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

struct  empty  {
};
//SIG(-1 empty) C1{}



static void Test_empty()
{
  {
    init_simple_test("empty");
    empty lv;
    check2(sizeof(lv), 1, "sizeof(empty)");
    check2(__alignof__(lv), 1, "__alignof__(empty)");
  }
}
static Arrange_To_Call_Me vempty(Test_empty, "empty", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu15s  {
  ::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 Sf_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu15s(Test_Sf_BFu16i_BFu15s, "Sf_BFu16i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu16i  {
  ::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 Sf_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu16i(Test_Sf_BFu16i_BFu16i, "Sf_BFu16i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu16ll  {
  ::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 Sf_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu16ll(Test_Sf_BFu16i_BFu16ll, "Sf_BFu16i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu16s  {
  ::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 Sf_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu16s(Test_Sf_BFu16i_BFu16s, "Sf_BFu16i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu17i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu17i(Test_Sf_BFu16i_BFu17i, "Sf_BFu16i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu17ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "Sf_BFu16i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu17ll(Test_Sf_BFu16i_BFu17ll, "Sf_BFu16i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu1c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu1c(Test_Sf_BFu16i_BFu1c, "Sf_BFu16i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu1i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu1i(Test_Sf_BFu16i_BFu1i, "Sf_BFu16i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu1ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu1ll(Test_Sf_BFu16i_BFu1ll, "Sf_BFu16i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu1s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu1s(Test_Sf_BFu16i_BFu1s, "Sf_BFu16i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu31i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu31i(Test_Sf_BFu16i_BFu31i, "Sf_BFu16i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu31ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "Sf_BFu16i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu31ll(Test_Sf_BFu16i_BFu31ll, "Sf_BFu16i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu32i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu32i(Test_Sf_BFu16i_BFu32i, "Sf_BFu16i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu32ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "Sf_BFu16i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu32ll(Test_Sf_BFu16i_BFu32ll, "Sf_BFu16i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu33  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "Sf_BFu16i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu33(Test_Sf_BFu16i_BFu33, "Sf_BFu16i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu7c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu7c(Test_Sf_BFu16i_BFu7c, "Sf_BFu16i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu7i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu7i(Test_Sf_BFu16i_BFu7i, "Sf_BFu16i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu7ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu7ll(Test_Sf_BFu16i_BFu7ll, "Sf_BFu16i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu7s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu7s(Test_Sf_BFu16i_BFu7s, "Sf_BFu16i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu8c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu8c(Test_Sf_BFu16i_BFu8c, "Sf_BFu16i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu8i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu8i(Test_Sf_BFu16i_BFu8i, "Sf_BFu16i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu8ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu8ll(Test_Sf_BFu16i_BFu8ll, "Sf_BFu16i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu8s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu8s(Test_Sf_BFu16i_BFu8s, "Sf_BFu16i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu9i  {
  ::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 Sf_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu9i(Test_Sf_BFu16i_BFu9i, "Sf_BFu16i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu9ll  {
  ::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 Sf_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu9ll(Test_Sf_BFu16i_BFu9ll, "Sf_BFu16i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_BFu9s  {
  ::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 Sf_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_BFu9s(Test_Sf_BFu16i_BFu9s, "Sf_BFu16i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_C  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_C");
    check_field_offset(lv, v3, 3, "Sf_BFu16i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_C(Test_Sf_BFu16i_C, "Sf_BFu16i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_D  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_D(Test_Sf_BFu16i_D, "Sf_BFu16i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_F  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_F(Test_Sf_BFu16i_F, "Sf_BFu16i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_I  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_I(Test_Sf_BFu16i_I, "Sf_BFu16i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Ip  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Ip(Test_Sf_BFu16i_Ip, "Sf_BFu16i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_L  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_L(Test_Sf_BFu16i_L, "Sf_BFu16i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_S  {
  ::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 Sf_BFu16i_S lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_S(Test_Sf_BFu16i_S, "Sf_BFu16i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Sf  {
  ::empty v1;
  unsigned int v2:16;
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu16i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Sf(Test_Sf_BFu16i_Sf, "Sf_BFu16i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Uc  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu16i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Uc(Test_Sf_BFu16i_Uc, "Sf_BFu16i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Ui  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Ui(Test_Sf_BFu16i_Ui, "Sf_BFu16i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Ul  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Ul(Test_Sf_BFu16i_Ul, "Sf_BFu16i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Us  {
  ::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 Sf_BFu16i_Us lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Us(Test_Sf_BFu16i_Us, "Sf_BFu16i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16i_Vp  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16i_Vp(Test_Sf_BFu16i_Vp, "Sf_BFu16i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll  {
  ::empty v1;
  __tsu64 v2:16;
};
//SIG(1 Sf_BFu16ll) C1{ FC2{} FL:16}



static void Test_Sf_BFu16ll()
{
  {
    init_simple_test("Sf_BFu16ll");
    static 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, 1, 0, 16, 1, "Sf_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll(Test_Sf_BFu16ll, "Sf_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu15i  {
  ::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 Sf_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu15i(Test_Sf_BFu16ll_BFu15i, "Sf_BFu16ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu15ll  {
  ::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 Sf_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu15ll(Test_Sf_BFu16ll_BFu15ll, "Sf_BFu16ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu15s  {
  ::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 Sf_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu15s(Test_Sf_BFu16ll_BFu15s, "Sf_BFu16ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu16i  {
  ::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 Sf_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu16i(Test_Sf_BFu16ll_BFu16i, "Sf_BFu16ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu16ll  {
  ::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 Sf_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu16ll(Test_Sf_BFu16ll_BFu16ll, "Sf_BFu16ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu16s  {
  ::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 Sf_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu16s(Test_Sf_BFu16ll_BFu16s, "Sf_BFu16ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu17i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu17i(Test_Sf_BFu16ll_BFu17i, "Sf_BFu16ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu17ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "Sf_BFu16ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu17ll(Test_Sf_BFu16ll_BFu17ll, "Sf_BFu16ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu1c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu1c(Test_Sf_BFu16ll_BFu1c, "Sf_BFu16ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu1i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu1i(Test_Sf_BFu16ll_BFu1i, "Sf_BFu16ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu1ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu1ll(Test_Sf_BFu16ll_BFu1ll, "Sf_BFu16ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu1s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "Sf_BFu16ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu1s(Test_Sf_BFu16ll_BFu1s, "Sf_BFu16ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu31i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu31i(Test_Sf_BFu16ll_BFu31i, "Sf_BFu16ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu31ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "Sf_BFu16ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu31ll(Test_Sf_BFu16ll_BFu31ll, "Sf_BFu16ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu32i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu32i(Test_Sf_BFu16ll_BFu32i, "Sf_BFu16ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu32ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "Sf_BFu16ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu32ll(Test_Sf_BFu16ll_BFu32ll, "Sf_BFu16ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu33  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "Sf_BFu16ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu33(Test_Sf_BFu16ll_BFu33, "Sf_BFu16ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu7c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu7c(Test_Sf_BFu16ll_BFu7c, "Sf_BFu16ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu7i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu7i(Test_Sf_BFu16ll_BFu7i, "Sf_BFu16ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu7ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu7ll(Test_Sf_BFu16ll_BFu7ll, "Sf_BFu16ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu7s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu7s(Test_Sf_BFu16ll_BFu7s, "Sf_BFu16ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu8c  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu8c(Test_Sf_BFu16ll_BFu8c, "Sf_BFu16ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu8i  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu8i(Test_Sf_BFu16ll_BFu8i, "Sf_BFu16ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu8ll  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu8ll(Test_Sf_BFu16ll_BFu8ll, "Sf_BFu16ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu8s  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu8s(Test_Sf_BFu16ll_BFu8s, "Sf_BFu16ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu9i  {
  ::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 Sf_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu9i(Test_Sf_BFu16ll_BFu9i, "Sf_BFu16ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu9ll  {
  ::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 Sf_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu9ll(Test_Sf_BFu16ll_BFu9ll, "Sf_BFu16ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_BFu9s  {
  ::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 Sf_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_BFu9s(Test_Sf_BFu16ll_BFu9s, "Sf_BFu16ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_C  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_C");
    check_field_offset(lv, v3, 3, "Sf_BFu16ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_C(Test_Sf_BFu16ll_C, "Sf_BFu16ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_D  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_D(Test_Sf_BFu16ll_D, "Sf_BFu16ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_F  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_F(Test_Sf_BFu16ll_F, "Sf_BFu16ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_I  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_I(Test_Sf_BFu16ll_I, "Sf_BFu16ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Ip  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Ip(Test_Sf_BFu16ll_Ip, "Sf_BFu16ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_L  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_L(Test_Sf_BFu16ll_L, "Sf_BFu16ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_S  {
  ::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 Sf_BFu16ll_S lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_S(Test_Sf_BFu16ll_S, "Sf_BFu16ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Sf  {
  ::empty v1;
  __tsu64 v2:16;
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu16ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Sf(Test_Sf_BFu16ll_Sf, "Sf_BFu16ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Uc  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu16ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Uc(Test_Sf_BFu16ll_Uc, "Sf_BFu16ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Ui  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Ui(Test_Sf_BFu16ll_Ui, "Sf_BFu16ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Ul  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Ul(Test_Sf_BFu16ll_Ul, "Sf_BFu16ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Us  {
  ::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 Sf_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "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, 1, 0, 16, 1, "Sf_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Us(Test_Sf_BFu16ll_Us, "Sf_BFu16ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16ll_Vp  {
  ::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 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, 1, 0, 16, 1, "Sf_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16ll_Vp(Test_Sf_BFu16ll_Vp, "Sf_BFu16ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s  {
  ::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 Sf_BFu16s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 16, 1, "Sf_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s(Test_Sf_BFu16s, "Sf_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu15i  {
  ::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 Sf_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu15i(Test_Sf_BFu16s_BFu15i, "Sf_BFu16s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu15ll  {
  ::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 Sf_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu15ll(Test_Sf_BFu16s_BFu15ll, "Sf_BFu16s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu15s  {
  ::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 Sf_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu15s(Test_Sf_BFu16s_BFu15s, "Sf_BFu16s_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu16i  {
  ::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 Sf_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu16i(Test_Sf_BFu16s_BFu16i, "Sf_BFu16s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu16ll  {
  ::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 Sf_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu16ll(Test_Sf_BFu16s_BFu16ll, "Sf_BFu16s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu16s  {
  ::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 Sf_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu16s(Test_Sf_BFu16s_BFu16s, "Sf_BFu16s_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu17i  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu17i(Test_Sf_BFu16s_BFu17i, "Sf_BFu16s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu17ll  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu16s_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu17ll(Test_Sf_BFu16s_BFu17ll, "Sf_BFu16s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu1c  {
  ::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 Sf_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu16s_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu1c(Test_Sf_BFu16s_BFu1c, "Sf_BFu16s_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu1i  {
  ::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 Sf_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu16s_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu1i(Test_Sf_BFu16s_BFu1i, "Sf_BFu16s_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu1ll  {
  ::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 Sf_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu16s_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu1ll(Test_Sf_BFu16s_BFu1ll, "Sf_BFu16s_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu1s  {
  ::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 Sf_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu16s_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu1s(Test_Sf_BFu16s_BFu1s, "Sf_BFu16s_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu31i  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu31i(Test_Sf_BFu16s_BFu31i, "Sf_BFu16s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu31ll  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu16s_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu31ll(Test_Sf_BFu16s_BFu31ll, "Sf_BFu16s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu32i  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu32i(Test_Sf_BFu16s_BFu32i, "Sf_BFu16s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu32ll  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu16s_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu32ll(Test_Sf_BFu16s_BFu32ll, "Sf_BFu16s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu33  {
  ::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 Sf_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 2, 0, 16, 1, "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_BFu16s_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu33(Test_Sf_BFu16s_BFu33, "Sf_BFu16s_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu7c  {
  ::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 Sf_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu7c(Test_Sf_BFu16s_BFu7c, "Sf_BFu16s_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu7i  {
  ::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 Sf_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu7i(Test_Sf_BFu16s_BFu7i, "Sf_BFu16s_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu7ll  {
  ::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 Sf_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu7ll(Test_Sf_BFu16s_BFu7ll, "Sf_BFu16s_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu7s  {
  ::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 Sf_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu7s(Test_Sf_BFu16s_BFu7s, "Sf_BFu16s_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu8c  {
  ::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 Sf_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu8c(Test_Sf_BFu16s_BFu8c, "Sf_BFu16s_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu8i  {
  ::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 Sf_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu8i(Test_Sf_BFu16s_BFu8i, "Sf_BFu16s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu8ll  {
  ::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 Sf_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu8ll(Test_Sf_BFu16s_BFu8ll, "Sf_BFu16s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu8s  {
  ::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 Sf_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu8s(Test_Sf_BFu16s_BFu8s, "Sf_BFu16s_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu9i  {
  ::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 Sf_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu9i(Test_Sf_BFu16s_BFu9i, "Sf_BFu16s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu9ll  {
  ::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 Sf_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu9ll(Test_Sf_BFu16s_BFu9ll, "Sf_BFu16s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_BFu9s  {
  ::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 Sf_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_BFu9s(Test_Sf_BFu16s_BFu9s, "Sf_BFu16s_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_C  {
  ::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 Sf_BFu16s_C lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_C");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_C(Test_Sf_BFu16s_C, "Sf_BFu16s_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_D  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_D(Test_Sf_BFu16s_D, "Sf_BFu16s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_F  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_F(Test_Sf_BFu16s_F, "Sf_BFu16s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_I  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_I(Test_Sf_BFu16s_I, "Sf_BFu16s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Ip  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Ip(Test_Sf_BFu16s_Ip, "Sf_BFu16s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_L  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_L(Test_Sf_BFu16s_L, "Sf_BFu16s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_S  {
  ::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 Sf_BFu16s_S lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_S");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_S(Test_Sf_BFu16s_S, "Sf_BFu16s_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Sf  {
  ::empty v1;
  unsigned short v2:16;
  ::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 Sf_BFu16s_Sf lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Sf(Test_Sf_BFu16s_Sf, "Sf_BFu16s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Uc  {
  ::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 Sf_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Uc(Test_Sf_BFu16s_Uc, "Sf_BFu16s_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Ui  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Ui(Test_Sf_BFu16s_Ui, "Sf_BFu16s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Ul  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Ul(Test_Sf_BFu16s_Ul, "Sf_BFu16s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Us  {
  ::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 Sf_BFu16s_Us lv;
    check2(sizeof(lv), 6, "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, 2, 0, 16, 1, "Sf_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Us(Test_Sf_BFu16s_Us, "Sf_BFu16s_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu16s_Vp  {
  ::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 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, 2, 0, 16, 1, "Sf_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu16s_Vp(Test_Sf_BFu16s_Vp, "Sf_BFu16s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i(Test_Sf_BFu17i, "Sf_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu15i  {
  ::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 Sf_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu15i(Test_Sf_BFu17i_BFu15i, "Sf_BFu17i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu15ll  {
  ::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 Sf_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu15ll(Test_Sf_BFu17i_BFu15ll, "Sf_BFu17i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu15s  {
  ::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 Sf_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu15s(Test_Sf_BFu17i_BFu15s, "Sf_BFu17i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu16i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu16i(Test_Sf_BFu17i_BFu16i, "Sf_BFu17i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu16ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "Sf_BFu17i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu16ll(Test_Sf_BFu17i_BFu16ll, "Sf_BFu17i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu16s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu16s(Test_Sf_BFu17i_BFu16s, "Sf_BFu17i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu17i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu17i(Test_Sf_BFu17i_BFu17i, "Sf_BFu17i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu17ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu17ll(Test_Sf_BFu17i_BFu17ll, "Sf_BFu17i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu1c  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu1c(Test_Sf_BFu17i_BFu1c, "Sf_BFu17i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu1i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu1i(Test_Sf_BFu17i_BFu1i, "Sf_BFu17i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu1ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu1ll(Test_Sf_BFu17i_BFu1ll, "Sf_BFu17i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu1s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu1s(Test_Sf_BFu17i_BFu1s, "Sf_BFu17i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu31i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu31i(Test_Sf_BFu17i_BFu31i, "Sf_BFu17i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu31ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "Sf_BFu17i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu31ll(Test_Sf_BFu17i_BFu31ll, "Sf_BFu17i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu32i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu32i(Test_Sf_BFu17i_BFu32i, "Sf_BFu17i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu32ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "Sf_BFu17i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu32ll(Test_Sf_BFu17i_BFu32ll, "Sf_BFu17i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu33  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "Sf_BFu17i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu33(Test_Sf_BFu17i_BFu33, "Sf_BFu17i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu7c  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu7c(Test_Sf_BFu17i_BFu7c, "Sf_BFu17i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu7i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu7i(Test_Sf_BFu17i_BFu7i, "Sf_BFu17i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu7ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu7ll(Test_Sf_BFu17i_BFu7ll, "Sf_BFu17i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu7s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu7s(Test_Sf_BFu17i_BFu7s, "Sf_BFu17i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu8c  {
  ::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 Sf_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu8c(Test_Sf_BFu17i_BFu8c, "Sf_BFu17i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu8i  {
  ::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 Sf_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu8i(Test_Sf_BFu17i_BFu8i, "Sf_BFu17i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu8ll  {
  ::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 Sf_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu8ll(Test_Sf_BFu17i_BFu8ll, "Sf_BFu17i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu8s  {
  ::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 Sf_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu8s(Test_Sf_BFu17i_BFu8s, "Sf_BFu17i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu9i  {
  ::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 Sf_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu9i(Test_Sf_BFu17i_BFu9i, "Sf_BFu17i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu9ll  {
  ::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 Sf_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu9ll(Test_Sf_BFu17i_BFu9ll, "Sf_BFu17i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_BFu9s  {
  ::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 Sf_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_BFu9s(Test_Sf_BFu17i_BFu9s, "Sf_BFu17i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_C  {
  ::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 Sf_BFu17i_C lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_C");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_C(Test_Sf_BFu17i_C, "Sf_BFu17i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_D  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_D(Test_Sf_BFu17i_D, "Sf_BFu17i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_F  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_F(Test_Sf_BFu17i_F, "Sf_BFu17i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_I  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_I(Test_Sf_BFu17i_I, "Sf_BFu17i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Ip  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Ip(Test_Sf_BFu17i_Ip, "Sf_BFu17i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_L  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_L(Test_Sf_BFu17i_L, "Sf_BFu17i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_S  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_S(Test_Sf_BFu17i_S, "Sf_BFu17i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Sf  {
  ::empty v1;
  unsigned int v2:17;
  ::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 Sf_BFu17i_Sf lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Sf(Test_Sf_BFu17i_Sf, "Sf_BFu17i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Uc  {
  ::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 Sf_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Uc(Test_Sf_BFu17i_Uc, "Sf_BFu17i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Ui  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Ui(Test_Sf_BFu17i_Ui, "Sf_BFu17i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Ul  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Ul(Test_Sf_BFu17i_Ul, "Sf_BFu17i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Us  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Us(Test_Sf_BFu17i_Us, "Sf_BFu17i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17i_Vp  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17i_Vp(Test_Sf_BFu17i_Vp, "Sf_BFu17i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll  {
  ::empty v1;
  __tsu64 v2:17;
};
//SIG(1 Sf_BFu17ll) C1{ FC2{} FL:17}



static void Test_Sf_BFu17ll()
{
  {
    init_simple_test("Sf_BFu17ll");
    static 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, 1, 0, 17, 1, "Sf_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll(Test_Sf_BFu17ll, "Sf_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu15i  {
  ::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 Sf_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu15i(Test_Sf_BFu17ll_BFu15i, "Sf_BFu17ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu15ll  {
  ::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 Sf_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu15ll(Test_Sf_BFu17ll_BFu15ll, "Sf_BFu17ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu15s  {
  ::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 Sf_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu15s(Test_Sf_BFu17ll_BFu15s, "Sf_BFu17ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu16i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu16i(Test_Sf_BFu17ll_BFu16i, "Sf_BFu17ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu16ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "Sf_BFu17ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu16ll(Test_Sf_BFu17ll_BFu16ll, "Sf_BFu17ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu16s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu16s(Test_Sf_BFu17ll_BFu16s, "Sf_BFu17ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu17i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu17i(Test_Sf_BFu17ll_BFu17i, "Sf_BFu17ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu17ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu17ll(Test_Sf_BFu17ll_BFu17ll, "Sf_BFu17ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu1c  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu1c(Test_Sf_BFu17ll_BFu1c, "Sf_BFu17ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu1i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu1i(Test_Sf_BFu17ll_BFu1i, "Sf_BFu17ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu1ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu1ll(Test_Sf_BFu17ll_BFu1ll, "Sf_BFu17ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu1s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu17ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu1s(Test_Sf_BFu17ll_BFu1s, "Sf_BFu17ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu31i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu31i(Test_Sf_BFu17ll_BFu31i, "Sf_BFu17ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu31ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "Sf_BFu17ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu31ll(Test_Sf_BFu17ll_BFu31ll, "Sf_BFu17ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu32i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu32i(Test_Sf_BFu17ll_BFu32i, "Sf_BFu17ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu32ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "Sf_BFu17ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu32ll(Test_Sf_BFu17ll_BFu32ll, "Sf_BFu17ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu33  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "Sf_BFu17ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu33(Test_Sf_BFu17ll_BFu33, "Sf_BFu17ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu7c  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu7c(Test_Sf_BFu17ll_BFu7c, "Sf_BFu17ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu7i  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu7i(Test_Sf_BFu17ll_BFu7i, "Sf_BFu17ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu7ll  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu7ll(Test_Sf_BFu17ll_BFu7ll, "Sf_BFu17ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu7s  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu7s(Test_Sf_BFu17ll_BFu7s, "Sf_BFu17ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu8c  {
  ::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 Sf_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu8c(Test_Sf_BFu17ll_BFu8c, "Sf_BFu17ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu8i  {
  ::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 Sf_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu8i(Test_Sf_BFu17ll_BFu8i, "Sf_BFu17ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu8ll  {
  ::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 Sf_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu8ll(Test_Sf_BFu17ll_BFu8ll, "Sf_BFu17ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu8s  {
  ::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 Sf_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu8s(Test_Sf_BFu17ll_BFu8s, "Sf_BFu17ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu9i  {
  ::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 Sf_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu9i(Test_Sf_BFu17ll_BFu9i, "Sf_BFu17ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu9ll  {
  ::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 Sf_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu9ll(Test_Sf_BFu17ll_BFu9ll, "Sf_BFu17ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_BFu9s  {
  ::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 Sf_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_BFu9s(Test_Sf_BFu17ll_BFu9s, "Sf_BFu17ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_C  {
  ::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 Sf_BFu17ll_C lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_C");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_C(Test_Sf_BFu17ll_C, "Sf_BFu17ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_D  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_D(Test_Sf_BFu17ll_D, "Sf_BFu17ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_F  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_F(Test_Sf_BFu17ll_F, "Sf_BFu17ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_I  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_I(Test_Sf_BFu17ll_I, "Sf_BFu17ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Ip  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Ip(Test_Sf_BFu17ll_Ip, "Sf_BFu17ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_L  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_L(Test_Sf_BFu17ll_L, "Sf_BFu17ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_S  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_S(Test_Sf_BFu17ll_S, "Sf_BFu17ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Sf  {
  ::empty v1;
  __tsu64 v2:17;
  ::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 Sf_BFu17ll_Sf lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Sf(Test_Sf_BFu17ll_Sf, "Sf_BFu17ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Uc  {
  ::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 Sf_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "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, 1, 0, 17, 1, "Sf_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Uc(Test_Sf_BFu17ll_Uc, "Sf_BFu17ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Ui  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Ui(Test_Sf_BFu17ll_Ui, "Sf_BFu17ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Ul  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Ul(Test_Sf_BFu17ll_Ul, "Sf_BFu17ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Us  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Us(Test_Sf_BFu17ll_Us, "Sf_BFu17ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu17ll_Vp  {
  ::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 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, 1, 0, 17, 1, "Sf_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu17ll_Vp(Test_Sf_BFu17ll_Vp, "Sf_BFu17ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c  {
  ::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 Sf_BFu1c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 1, 1, "Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu1c(Test_Sf_BFu1c, "Sf_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu15i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu15i(Test_Sf_BFu1c_BFu15i, "Sf_BFu1c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu15ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu15ll(Test_Sf_BFu1c_BFu15ll, "Sf_BFu1c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu15s  {
  ::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 Sf_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu15s(Test_Sf_BFu1c_BFu15s, "Sf_BFu1c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu16i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1c_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu16i(Test_Sf_BFu1c_BFu16i, "Sf_BFu1c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu16ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1c_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu16ll(Test_Sf_BFu1c_BFu16ll, "Sf_BFu1c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu16s  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu16s(Test_Sf_BFu1c_BFu16s, "Sf_BFu1c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu17i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1c_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu17i(Test_Sf_BFu1c_BFu17i, "Sf_BFu1c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu17ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1c_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu17ll(Test_Sf_BFu1c_BFu17ll, "Sf_BFu1c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu1c  {
  ::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 Sf_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1c_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu1c(Test_Sf_BFu1c_BFu1c, "Sf_BFu1c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu1i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1c_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu1i(Test_Sf_BFu1c_BFu1i, "Sf_BFu1c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu1ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1c_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu1ll(Test_Sf_BFu1c_BFu1ll, "Sf_BFu1c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu1s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1c_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu1s(Test_Sf_BFu1c_BFu1s, "Sf_BFu1c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu31i  {
  ::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 Sf_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu1c_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu31i(Test_Sf_BFu1c_BFu31i, "Sf_BFu1c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu31ll  {
  ::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 Sf_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu1c_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu31ll(Test_Sf_BFu1c_BFu31ll, "Sf_BFu1c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu32i  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu32i(Test_Sf_BFu1c_BFu32i, "Sf_BFu1c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu32ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu1c_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu32ll(Test_Sf_BFu1c_BFu32ll, "Sf_BFu1c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu33  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu1c_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu33(Test_Sf_BFu1c_BFu33, "Sf_BFu1c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu7c  {
  ::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 Sf_BFu1c_BFu7c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu7c(Test_Sf_BFu1c_BFu7c, "Sf_BFu1c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu7i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu7i(Test_Sf_BFu1c_BFu7i, "Sf_BFu1c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu7ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu7ll(Test_Sf_BFu1c_BFu7ll, "Sf_BFu1c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu7s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu7s(Test_Sf_BFu1c_BFu7s, "Sf_BFu1c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu8c  {
  ::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 Sf_BFu1c_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu8c(Test_Sf_BFu1c_BFu8c, "Sf_BFu1c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu8i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu8i(Test_Sf_BFu1c_BFu8i, "Sf_BFu1c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu8ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu8ll(Test_Sf_BFu1c_BFu8ll, "Sf_BFu1c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu8s  {
  ::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 Sf_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu8s(Test_Sf_BFu1c_BFu8s, "Sf_BFu1c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu9i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu9i(Test_Sf_BFu1c_BFu9i, "Sf_BFu1c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu9ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu9ll(Test_Sf_BFu1c_BFu9ll, "Sf_BFu1c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_BFu9s  {
  ::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 Sf_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_BFu9s(Test_Sf_BFu1c_BFu9s, "Sf_BFu1c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_C  {
  ::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 Sf_BFu1c_C lv;
    check2(sizeof(lv), 3, "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, 1, 0, 1, 1, "Sf_BFu1c_C");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_C(Test_Sf_BFu1c_C, "Sf_BFu1c_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_D  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_D(Test_Sf_BFu1c_D, "Sf_BFu1c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_F  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_F(Test_Sf_BFu1c_F, "Sf_BFu1c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_I  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_I(Test_Sf_BFu1c_I, "Sf_BFu1c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Ip  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Ip(Test_Sf_BFu1c_Ip, "Sf_BFu1c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_L  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_L(Test_Sf_BFu1c_L, "Sf_BFu1c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_S  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_S(Test_Sf_BFu1c_S, "Sf_BFu1c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Sf  {
  ::empty v1;
  unsigned char v2:1;
  ::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 Sf_BFu1c_Sf lv;
    check2(sizeof(lv), 3, "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, 1, 0, 1, 1, "Sf_BFu1c_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Sf(Test_Sf_BFu1c_Sf, "Sf_BFu1c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Uc  {
  ::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 Sf_BFu1c_Uc lv;
    check2(sizeof(lv), 3, "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, 1, 0, 1, 1, "Sf_BFu1c_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Uc(Test_Sf_BFu1c_Uc, "Sf_BFu1c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Ui  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Ui(Test_Sf_BFu1c_Ui, "Sf_BFu1c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Ul  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Ul(Test_Sf_BFu1c_Ul, "Sf_BFu1c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Us  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Us(Test_Sf_BFu1c_Us, "Sf_BFu1c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1c_Vp  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1c_Vp(Test_Sf_BFu1c_Vp, "Sf_BFu1c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i(Test_Sf_BFu1i, "Sf_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu15i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu15i(Test_Sf_BFu1i_BFu15i, "Sf_BFu1i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu15ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu15ll(Test_Sf_BFu1i_BFu15ll, "Sf_BFu1i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu15s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu15s(Test_Sf_BFu1i_BFu15s, "Sf_BFu1i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu16i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu16i(Test_Sf_BFu1i_BFu16i, "Sf_BFu1i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu16ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu16ll(Test_Sf_BFu1i_BFu16ll, "Sf_BFu1i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu16s  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu16s(Test_Sf_BFu1i_BFu16s, "Sf_BFu1i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu17i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu17i(Test_Sf_BFu1i_BFu17i, "Sf_BFu1i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu17ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu17ll(Test_Sf_BFu1i_BFu17ll, "Sf_BFu1i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu1c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu1c(Test_Sf_BFu1i_BFu1c, "Sf_BFu1i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu1i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu1i(Test_Sf_BFu1i_BFu1i, "Sf_BFu1i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu1ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu1ll(Test_Sf_BFu1i_BFu1ll, "Sf_BFu1i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu1s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu1s(Test_Sf_BFu1i_BFu1s, "Sf_BFu1i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu31i  {
  ::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 Sf_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu1i_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu31i(Test_Sf_BFu1i_BFu31i, "Sf_BFu1i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu31ll  {
  ::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 Sf_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu1i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu31ll(Test_Sf_BFu1i_BFu31ll, "Sf_BFu1i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu32i  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu32i(Test_Sf_BFu1i_BFu32i, "Sf_BFu1i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu32ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu1i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu32ll(Test_Sf_BFu1i_BFu32ll, "Sf_BFu1i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu33  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu1i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu33(Test_Sf_BFu1i_BFu33, "Sf_BFu1i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu7c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu7c(Test_Sf_BFu1i_BFu7c, "Sf_BFu1i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu7i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu7i(Test_Sf_BFu1i_BFu7i, "Sf_BFu1i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu7ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu7ll(Test_Sf_BFu1i_BFu7ll, "Sf_BFu1i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu7s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu7s(Test_Sf_BFu1i_BFu7s, "Sf_BFu1i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu8c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu8c(Test_Sf_BFu1i_BFu8c, "Sf_BFu1i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu8i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu8i(Test_Sf_BFu1i_BFu8i, "Sf_BFu1i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu8ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu8ll(Test_Sf_BFu1i_BFu8ll, "Sf_BFu1i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu8s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu8s(Test_Sf_BFu1i_BFu8s, "Sf_BFu1i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu9i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu9i(Test_Sf_BFu1i_BFu9i, "Sf_BFu1i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu9ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu9ll(Test_Sf_BFu1i_BFu9ll, "Sf_BFu1i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_BFu9s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_BFu9s(Test_Sf_BFu1i_BFu9s, "Sf_BFu1i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_C  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_C");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_C(Test_Sf_BFu1i_C, "Sf_BFu1i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_D  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_D(Test_Sf_BFu1i_D, "Sf_BFu1i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_F  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_F(Test_Sf_BFu1i_F, "Sf_BFu1i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_I  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_I(Test_Sf_BFu1i_I, "Sf_BFu1i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Ip  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Ip(Test_Sf_BFu1i_Ip, "Sf_BFu1i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_L  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_L(Test_Sf_BFu1i_L, "Sf_BFu1i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_S  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_S(Test_Sf_BFu1i_S, "Sf_BFu1i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Sf  {
  ::empty v1;
  unsigned int v2:1;
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Sf(Test_Sf_BFu1i_Sf, "Sf_BFu1i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Uc  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Uc(Test_Sf_BFu1i_Uc, "Sf_BFu1i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Ui  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Ui(Test_Sf_BFu1i_Ui, "Sf_BFu1i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Ul  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Ul(Test_Sf_BFu1i_Ul, "Sf_BFu1i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Us  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Us(Test_Sf_BFu1i_Us, "Sf_BFu1i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1i_Vp  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1i_Vp(Test_Sf_BFu1i_Vp, "Sf_BFu1i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll  {
  ::empty v1;
  __tsu64 v2:1;
};
//SIG(1 Sf_BFu1ll) C1{ FC2{} FL:1}



static void Test_Sf_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1ll");
    static 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, 1, 0, 1, 1, "Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll(Test_Sf_BFu1ll, "Sf_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu15i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu15i(Test_Sf_BFu1ll_BFu15i, "Sf_BFu1ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu15ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu15ll(Test_Sf_BFu1ll_BFu15ll, "Sf_BFu1ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu15s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu15s(Test_Sf_BFu1ll_BFu15s, "Sf_BFu1ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu16i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu16i(Test_Sf_BFu1ll_BFu16i, "Sf_BFu1ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu16ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu16ll(Test_Sf_BFu1ll_BFu16ll, "Sf_BFu1ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu16s  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu16s(Test_Sf_BFu1ll_BFu16s, "Sf_BFu1ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu17i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu17i(Test_Sf_BFu1ll_BFu17i, "Sf_BFu1ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu17ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu17ll(Test_Sf_BFu1ll_BFu17ll, "Sf_BFu1ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu1c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu1c(Test_Sf_BFu1ll_BFu1c, "Sf_BFu1ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu1i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu1i(Test_Sf_BFu1ll_BFu1i, "Sf_BFu1ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu1ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu1ll(Test_Sf_BFu1ll_BFu1ll, "Sf_BFu1ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu1s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu1s(Test_Sf_BFu1ll_BFu1s, "Sf_BFu1ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu31i  {
  ::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 Sf_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu1ll_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu31i(Test_Sf_BFu1ll_BFu31i, "Sf_BFu1ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu31ll  {
  ::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 Sf_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu1ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu31ll(Test_Sf_BFu1ll_BFu31ll, "Sf_BFu1ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu32i  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu32i(Test_Sf_BFu1ll_BFu32i, "Sf_BFu1ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu32ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu1ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu32ll(Test_Sf_BFu1ll_BFu32ll, "Sf_BFu1ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu33  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu1ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu33(Test_Sf_BFu1ll_BFu33, "Sf_BFu1ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu7c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu7c(Test_Sf_BFu1ll_BFu7c, "Sf_BFu1ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu7i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu7i(Test_Sf_BFu1ll_BFu7i, "Sf_BFu1ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu7ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu7ll(Test_Sf_BFu1ll_BFu7ll, "Sf_BFu1ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu7s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu7s(Test_Sf_BFu1ll_BFu7s, "Sf_BFu1ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu8c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu8c(Test_Sf_BFu1ll_BFu8c, "Sf_BFu1ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu8i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu8i(Test_Sf_BFu1ll_BFu8i, "Sf_BFu1ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu8ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu8ll(Test_Sf_BFu1ll_BFu8ll, "Sf_BFu1ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu8s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu8s(Test_Sf_BFu1ll_BFu8s, "Sf_BFu1ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu9i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu9i(Test_Sf_BFu1ll_BFu9i, "Sf_BFu1ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu9ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu9ll(Test_Sf_BFu1ll_BFu9ll, "Sf_BFu1ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_BFu9s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_BFu9s(Test_Sf_BFu1ll_BFu9s, "Sf_BFu1ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_C  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_C");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_C(Test_Sf_BFu1ll_C, "Sf_BFu1ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_D  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_D(Test_Sf_BFu1ll_D, "Sf_BFu1ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_F  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_F(Test_Sf_BFu1ll_F, "Sf_BFu1ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_I  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_I(Test_Sf_BFu1ll_I, "Sf_BFu1ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Ip  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Ip(Test_Sf_BFu1ll_Ip, "Sf_BFu1ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_L  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_L(Test_Sf_BFu1ll_L, "Sf_BFu1ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_S  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_S(Test_Sf_BFu1ll_S, "Sf_BFu1ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Sf  {
  ::empty v1;
  __tsu64 v2:1;
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Sf(Test_Sf_BFu1ll_Sf, "Sf_BFu1ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Uc  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Uc(Test_Sf_BFu1ll_Uc, "Sf_BFu1ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Ui  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Ui(Test_Sf_BFu1ll_Ui, "Sf_BFu1ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Ul  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Ul(Test_Sf_BFu1ll_Ul, "Sf_BFu1ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Us  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Us(Test_Sf_BFu1ll_Us, "Sf_BFu1ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1ll_Vp  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1ll_Vp(Test_Sf_BFu1ll_Vp, "Sf_BFu1ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s(Test_Sf_BFu1s, "Sf_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu15i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu15i(Test_Sf_BFu1s_BFu15i, "Sf_BFu1s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu15ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu15ll(Test_Sf_BFu1s_BFu15ll, "Sf_BFu1s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu15s  {
  ::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 Sf_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu15s(Test_Sf_BFu1s_BFu15s, "Sf_BFu1s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu16i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1s_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu16i(Test_Sf_BFu1s_BFu16i, "Sf_BFu1s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu16ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu1s_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu16ll(Test_Sf_BFu1s_BFu16ll, "Sf_BFu1s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu16s  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu16s(Test_Sf_BFu1s_BFu16s, "Sf_BFu1s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu17i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1s_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu17i(Test_Sf_BFu1s_BFu17i, "Sf_BFu1s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu17ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu1s_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu17ll(Test_Sf_BFu1s_BFu17ll, "Sf_BFu1s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu1c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1s_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu1c(Test_Sf_BFu1s_BFu1c, "Sf_BFu1s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu1i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1s_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu1i(Test_Sf_BFu1s_BFu1i, "Sf_BFu1s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu1ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1s_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu1ll(Test_Sf_BFu1s_BFu1ll, "Sf_BFu1s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu1s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu1s_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu1s(Test_Sf_BFu1s_BFu1s, "Sf_BFu1s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu31i  {
  ::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 Sf_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu1s_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu31i(Test_Sf_BFu1s_BFu31i, "Sf_BFu1s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu31ll  {
  ::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 Sf_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu1s_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu31ll(Test_Sf_BFu1s_BFu31ll, "Sf_BFu1s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu32i  {
  ::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 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, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu32i(Test_Sf_BFu1s_BFu32i, "Sf_BFu1s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu32ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu1s_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu32ll(Test_Sf_BFu1s_BFu32ll, "Sf_BFu1s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu33  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu1s_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu33(Test_Sf_BFu1s_BFu33, "Sf_BFu1s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu7c  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu7c(Test_Sf_BFu1s_BFu7c, "Sf_BFu1s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu7i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu7i(Test_Sf_BFu1s_BFu7i, "Sf_BFu1s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu7ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu7ll(Test_Sf_BFu1s_BFu7ll, "Sf_BFu1s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu7s  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu7s(Test_Sf_BFu1s_BFu7s, "Sf_BFu1s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu8c  {
  ::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 Sf_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu8c(Test_Sf_BFu1s_BFu8c, "Sf_BFu1s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu8i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu8i(Test_Sf_BFu1s_BFu8i, "Sf_BFu1s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu8ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu8ll(Test_Sf_BFu1s_BFu8ll, "Sf_BFu1s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu8s  {
  ::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 Sf_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu8s(Test_Sf_BFu1s_BFu8s, "Sf_BFu1s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu9i  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu9i(Test_Sf_BFu1s_BFu9i, "Sf_BFu1s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu9ll  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu9ll(Test_Sf_BFu1s_BFu9ll, "Sf_BFu1s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_BFu9s  {
  ::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 Sf_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_BFu9s(Test_Sf_BFu1s_BFu9s, "Sf_BFu1s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_C  {
  ::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 Sf_BFu1s_C lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_C");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_C(Test_Sf_BFu1s_C, "Sf_BFu1s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_D  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_D(Test_Sf_BFu1s_D, "Sf_BFu1s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_F  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_F(Test_Sf_BFu1s_F, "Sf_BFu1s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_I  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_I(Test_Sf_BFu1s_I, "Sf_BFu1s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Ip  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Ip(Test_Sf_BFu1s_Ip, "Sf_BFu1s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_L  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_L(Test_Sf_BFu1s_L, "Sf_BFu1s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_S  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_S(Test_Sf_BFu1s_S, "Sf_BFu1s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Sf  {
  ::empty v1;
  unsigned short v2:1;
  ::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 Sf_BFu1s_Sf lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Sf(Test_Sf_BFu1s_Sf, "Sf_BFu1s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Uc  {
  ::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 Sf_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "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, 1, 0, 1, 1, "Sf_BFu1s_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Uc(Test_Sf_BFu1s_Uc, "Sf_BFu1s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Ui  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Ui(Test_Sf_BFu1s_Ui, "Sf_BFu1s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Ul  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Ul(Test_Sf_BFu1s_Ul, "Sf_BFu1s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Us  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Us(Test_Sf_BFu1s_Us, "Sf_BFu1s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu1s_Vp  {
  ::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 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, 1, 0, 1, 1, "Sf_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu1s_Vp(Test_Sf_BFu1s_Vp, "Sf_BFu1s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i  {
  ::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 Sf_BFu31i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 31, 1, "Sf_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i(Test_Sf_BFu31i, "Sf_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu15i  {
  ::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 Sf_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu15i(Test_Sf_BFu31i_BFu15i, "Sf_BFu31i_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu15ll  {
  ::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 Sf_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu15ll(Test_Sf_BFu31i_BFu15ll, "Sf_BFu31i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu15s  {
  ::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 Sf_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu15s(Test_Sf_BFu31i_BFu15s, "Sf_BFu31i_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu16i  {
  ::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 Sf_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu16i(Test_Sf_BFu31i_BFu16i, "Sf_BFu31i_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu16ll  {
  ::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 Sf_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu16ll(Test_Sf_BFu31i_BFu16ll, "Sf_BFu31i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu16s  {
  ::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 Sf_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu16s(Test_Sf_BFu31i_BFu16s, "Sf_BFu31i_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu17i  {
  ::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 Sf_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_BFu31i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu17i(Test_Sf_BFu31i_BFu17i, "Sf_BFu31i_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu17ll  {
  ::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 Sf_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "Sf_BFu31i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu17ll(Test_Sf_BFu31i_BFu17ll, "Sf_BFu31i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu1c  {
  ::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 Sf_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "Sf_BFu31i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu1c(Test_Sf_BFu31i_BFu1c, "Sf_BFu31i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu1i  {
  ::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 Sf_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "Sf_BFu31i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu1i(Test_Sf_BFu31i_BFu1i, "Sf_BFu31i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu1ll  {
  ::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 Sf_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "Sf_BFu31i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu1ll(Test_Sf_BFu31i_BFu1ll, "Sf_BFu31i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu1s  {
  ::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 Sf_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "Sf_BFu31i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu1s(Test_Sf_BFu31i_BFu1s, "Sf_BFu31i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu31i  {
  ::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 Sf_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu31i(Test_Sf_BFu31i_BFu31i, "Sf_BFu31i_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu31ll  {
  ::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 Sf_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu31ll(Test_Sf_BFu31i_BFu31ll, "Sf_BFu31i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu32i  {
  ::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 Sf_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu31i_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu32i(Test_Sf_BFu31i_BFu32i, "Sf_BFu31i_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu32ll  {
  ::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 Sf_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "Sf_BFu31i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu32ll(Test_Sf_BFu31i_BFu32ll, "Sf_BFu31i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu33  {
  ::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 Sf_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "Sf_BFu31i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu33(Test_Sf_BFu31i_BFu33, "Sf_BFu31i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu7c  {
  ::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 Sf_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu7c(Test_Sf_BFu31i_BFu7c, "Sf_BFu31i_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu7i  {
  ::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 Sf_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu7i(Test_Sf_BFu31i_BFu7i, "Sf_BFu31i_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu7ll  {
  ::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 Sf_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu7ll(Test_Sf_BFu31i_BFu7ll, "Sf_BFu31i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu7s  {
  ::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 Sf_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu7s(Test_Sf_BFu31i_BFu7s, "Sf_BFu31i_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu8c  {
  ::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 Sf_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu8c(Test_Sf_BFu31i_BFu8c, "Sf_BFu31i_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu8i  {
  ::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 Sf_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu8i(Test_Sf_BFu31i_BFu8i, "Sf_BFu31i_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu8ll  {
  ::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 Sf_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu8ll(Test_Sf_BFu31i_BFu8ll, "Sf_BFu31i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu8s  {
  ::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 Sf_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu8s(Test_Sf_BFu31i_BFu8s, "Sf_BFu31i_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu9i  {
  ::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 Sf_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu9i(Test_Sf_BFu31i_BFu9i, "Sf_BFu31i_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu9ll  {
  ::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 Sf_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu9ll(Test_Sf_BFu31i_BFu9ll, "Sf_BFu31i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_BFu9s  {
  ::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 Sf_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_BFu9s(Test_Sf_BFu31i_BFu9s, "Sf_BFu31i_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_C  {
  ::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 Sf_BFu31i_C lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_C");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_C(Test_Sf_BFu31i_C, "Sf_BFu31i_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_D  {
  ::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 Sf_BFu31i_D lv;
    check2(sizeof(lv), 16, "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, 4, 0, 31, 1, "Sf_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_D");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_D(Test_Sf_BFu31i_D, "Sf_BFu31i_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_F  {
  ::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 Sf_BFu31i_F lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_F");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_F(Test_Sf_BFu31i_F, "Sf_BFu31i_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_I  {
  ::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 Sf_BFu31i_I lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_I");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_I(Test_Sf_BFu31i_I, "Sf_BFu31i_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Ip  {
  ::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 Sf_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Ip(Test_Sf_BFu31i_Ip, "Sf_BFu31i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_L  {
  ::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 Sf_BFu31i_L lv;
    check2(sizeof(lv), 16, "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, 4, 0, 31, 1, "Sf_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_L");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_L(Test_Sf_BFu31i_L, "Sf_BFu31i_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_S  {
  ::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 Sf_BFu31i_S lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_S");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_S(Test_Sf_BFu31i_S, "Sf_BFu31i_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Sf  {
  ::empty v1;
  unsigned int v2:31;
  ::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 Sf_BFu31i_Sf lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Sf");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Sf(Test_Sf_BFu31i_Sf, "Sf_BFu31i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Uc  {
  ::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 Sf_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Uc(Test_Sf_BFu31i_Uc, "Sf_BFu31i_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Ui  {
  ::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 Sf_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Ui(Test_Sf_BFu31i_Ui, "Sf_BFu31i_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Ul  {
  ::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 Sf_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "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, 4, 0, 31, 1, "Sf_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Ul(Test_Sf_BFu31i_Ul, "Sf_BFu31i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Us  {
  ::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 Sf_BFu31i_Us lv;
    check2(sizeof(lv), 12, "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, 4, 0, 31, 1, "Sf_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Us");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Us(Test_Sf_BFu31i_Us, "Sf_BFu31i_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31i_Vp  {
  ::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 Sf_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 31, 1, "Sf_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu31i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31i_Vp(Test_Sf_BFu31i_Vp, "Sf_BFu31i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll  {
  ::empty v1;
  __tsu64 v2:31;
};
//SIG(1 Sf_BFu31ll) C1{ FC2{} FL:31}



static void Test_Sf_BFu31ll()
{
  {
    init_simple_test("Sf_BFu31ll");
    static Sf_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll(Test_Sf_BFu31ll, "Sf_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu15i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu15i(Test_Sf_BFu31ll_BFu15i, "Sf_BFu31ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu15ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu15ll(Test_Sf_BFu31ll_BFu15ll, "Sf_BFu31ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu15s  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu15s(Test_Sf_BFu31ll_BFu15s, "Sf_BFu31ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu16i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu16i(Test_Sf_BFu31ll_BFu16i, "Sf_BFu31ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu16ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu16ll(Test_Sf_BFu31ll_BFu16ll, "Sf_BFu31ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu16s  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu16s(Test_Sf_BFu31ll_BFu16s, "Sf_BFu31ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu17i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "Sf_BFu31ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu17i(Test_Sf_BFu31ll_BFu17i, "Sf_BFu31ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu17ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "Sf_BFu31ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu17ll(Test_Sf_BFu31ll_BFu17ll, "Sf_BFu31ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu1c  {
  ::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 Sf_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "Sf_BFu31ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu1c(Test_Sf_BFu31ll_BFu1c, "Sf_BFu31ll_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu1i  {
  ::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 Sf_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "Sf_BFu31ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu1i(Test_Sf_BFu31ll_BFu1i, "Sf_BFu31ll_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu1ll  {
  ::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 Sf_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "Sf_BFu31ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu1ll(Test_Sf_BFu31ll_BFu1ll, "Sf_BFu31ll_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu1s  {
  ::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 Sf_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "Sf_BFu31ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu1s(Test_Sf_BFu31ll_BFu1s, "Sf_BFu31ll_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu31i  {
  ::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 Sf_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu31i(Test_Sf_BFu31ll_BFu31i, "Sf_BFu31ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu31ll  {
  ::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 Sf_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu31ll(Test_Sf_BFu31ll_BFu31ll, "Sf_BFu31ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu32i  {
  ::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 Sf_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu31ll_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu32i(Test_Sf_BFu31ll_BFu32i, "Sf_BFu31ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu32ll  {
  ::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 Sf_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "Sf_BFu31ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu32ll(Test_Sf_BFu31ll_BFu32ll, "Sf_BFu31ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu33  {
  ::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 Sf_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "Sf_BFu31ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu33(Test_Sf_BFu31ll_BFu33, "Sf_BFu31ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu7c  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu7c(Test_Sf_BFu31ll_BFu7c, "Sf_BFu31ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu7i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu7i(Test_Sf_BFu31ll_BFu7i, "Sf_BFu31ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu7ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu7ll(Test_Sf_BFu31ll_BFu7ll, "Sf_BFu31ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu7s  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu7s(Test_Sf_BFu31ll_BFu7s, "Sf_BFu31ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu8c  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu8c(Test_Sf_BFu31ll_BFu8c, "Sf_BFu31ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu8i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu8i(Test_Sf_BFu31ll_BFu8i, "Sf_BFu31ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu8ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu8ll(Test_Sf_BFu31ll_BFu8ll, "Sf_BFu31ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu8s  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu8s(Test_Sf_BFu31ll_BFu8s, "Sf_BFu31ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu9i  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu9i(Test_Sf_BFu31ll_BFu9i, "Sf_BFu31ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu9ll  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu9ll(Test_Sf_BFu31ll_BFu9ll, "Sf_BFu31ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_BFu9s  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_BFu9s(Test_Sf_BFu31ll_BFu9s, "Sf_BFu31ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_C  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_C");
    check_field_offset(lv, v3, 5, "Sf_BFu31ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_C(Test_Sf_BFu31ll_C, "Sf_BFu31ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_D  {
  ::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 Sf_BFu31ll_D lv;
    check2(sizeof(lv), 16, "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, 1, 0, 31, 1, "Sf_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_D");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_D(Test_Sf_BFu31ll_D, "Sf_BFu31ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_F  {
  ::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 Sf_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_F");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_F(Test_Sf_BFu31ll_F, "Sf_BFu31ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_I  {
  ::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 Sf_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_I");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_I(Test_Sf_BFu31ll_I, "Sf_BFu31ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Ip  {
  ::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 Sf_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Ip(Test_Sf_BFu31ll_Ip, "Sf_BFu31ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_L  {
  ::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 Sf_BFu31ll_L lv;
    check2(sizeof(lv), 16, "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, 1, 0, 31, 1, "Sf_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_L");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_L(Test_Sf_BFu31ll_L, "Sf_BFu31ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_S  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_S");
    check_field_offset(lv, v3, 6, "Sf_BFu31ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_S(Test_Sf_BFu31ll_S, "Sf_BFu31ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Sf  {
  ::empty v1;
  __tsu64 v2:31;
  ::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 Sf_BFu31ll_Sf lv;
    check2(sizeof(lv), 8, "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, 1, 0, 31, 1, "Sf_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Sf");
    check_field_offset(lv, v3, 5, "Sf_BFu31ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Sf(Test_Sf_BFu31ll_Sf, "Sf_BFu31ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Uc  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "Sf_BFu31ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Uc(Test_Sf_BFu31ll_Uc, "Sf_BFu31ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Ui  {
  ::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 Sf_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Ui(Test_Sf_BFu31ll_Ui, "Sf_BFu31ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Ul  {
  ::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 Sf_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "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, 1, 0, 31, 1, "Sf_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Ul(Test_Sf_BFu31ll_Ul, "Sf_BFu31ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Us  {
  ::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 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, 1, 0, 31, 1, "Sf_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "Sf_BFu31ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Us(Test_Sf_BFu31ll_Us, "Sf_BFu31ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu31ll_Vp  {
  ::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 Sf_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 31, 1, "Sf_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu31ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu31ll_Vp(Test_Sf_BFu31ll_Vp, "Sf_BFu31ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i  {
  ::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 Sf_BFu32i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 32, 1, "Sf_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i(Test_Sf_BFu32i, "Sf_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu15i  {
  ::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 Sf_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu15i(Test_Sf_BFu32i_BFu15i, "Sf_BFu32i_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu15ll  {
  ::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 Sf_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu15ll(Test_Sf_BFu32i_BFu15ll, "Sf_BFu32i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu15s  {
  ::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 Sf_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu15s(Test_Sf_BFu32i_BFu15s, "Sf_BFu32i_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu16i  {
  ::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 Sf_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu16i(Test_Sf_BFu32i_BFu16i, "Sf_BFu32i_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu16ll  {
  ::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 Sf_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu16ll(Test_Sf_BFu32i_BFu16ll, "Sf_BFu32i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu16s  {
  ::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 Sf_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu16s(Test_Sf_BFu32i_BFu16s, "Sf_BFu32i_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu17i  {
  ::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 Sf_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_BFu32i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu17i(Test_Sf_BFu32i_BFu17i, "Sf_BFu32i_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu17ll  {
  ::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 Sf_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_BFu32i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu17ll(Test_Sf_BFu32i_BFu17ll, "Sf_BFu32i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu1c  {
  ::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 Sf_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_BFu32i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu1c(Test_Sf_BFu32i_BFu1c, "Sf_BFu32i_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu1i  {
  ::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 Sf_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_BFu32i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu1i(Test_Sf_BFu32i_BFu1i, "Sf_BFu32i_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu1ll  {
  ::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 Sf_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_BFu32i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu1ll(Test_Sf_BFu32i_BFu1ll, "Sf_BFu32i_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu1s  {
  ::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 Sf_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_BFu32i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu1s(Test_Sf_BFu32i_BFu1s, "Sf_BFu32i_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu31i  {
  ::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 Sf_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu32i_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu31i(Test_Sf_BFu32i_BFu31i, "Sf_BFu32i_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu31ll  {
  ::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 Sf_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu32i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu31ll(Test_Sf_BFu32i_BFu31ll, "Sf_BFu32i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu32i  {
  ::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 Sf_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu32i(Test_Sf_BFu32i_BFu32i, "Sf_BFu32i_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu32ll  {
  ::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 Sf_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu32ll(Test_Sf_BFu32i_BFu32ll, "Sf_BFu32i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu33  {
  ::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 Sf_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_BFu32i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu33(Test_Sf_BFu32i_BFu33, "Sf_BFu32i_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu7c  {
  ::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 Sf_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu7c(Test_Sf_BFu32i_BFu7c, "Sf_BFu32i_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu7i  {
  ::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 Sf_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu7i(Test_Sf_BFu32i_BFu7i, "Sf_BFu32i_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu7ll  {
  ::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 Sf_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu7ll(Test_Sf_BFu32i_BFu7ll, "Sf_BFu32i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu7s  {
  ::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 Sf_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu7s(Test_Sf_BFu32i_BFu7s, "Sf_BFu32i_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu8c  {
  ::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 Sf_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu8c(Test_Sf_BFu32i_BFu8c, "Sf_BFu32i_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu8i  {
  ::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 Sf_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu8i(Test_Sf_BFu32i_BFu8i, "Sf_BFu32i_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu8ll  {
  ::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 Sf_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu8ll(Test_Sf_BFu32i_BFu8ll, "Sf_BFu32i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu8s  {
  ::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 Sf_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu8s(Test_Sf_BFu32i_BFu8s, "Sf_BFu32i_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu9i  {
  ::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 Sf_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu9i(Test_Sf_BFu32i_BFu9i, "Sf_BFu32i_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu9ll  {
  ::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 Sf_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu9ll(Test_Sf_BFu32i_BFu9ll, "Sf_BFu32i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_BFu9s  {
  ::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 Sf_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_BFu9s(Test_Sf_BFu32i_BFu9s, "Sf_BFu32i_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_C  {
  ::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 Sf_BFu32i_C lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_C");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_C(Test_Sf_BFu32i_C, "Sf_BFu32i_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_D  {
  ::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 Sf_BFu32i_D lv;
    check2(sizeof(lv), 16, "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, 4, 0, 32, 1, "Sf_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_D");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_D(Test_Sf_BFu32i_D, "Sf_BFu32i_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_F  {
  ::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 Sf_BFu32i_F lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_F");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_F(Test_Sf_BFu32i_F, "Sf_BFu32i_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_I  {
  ::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 Sf_BFu32i_I lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_I");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_I(Test_Sf_BFu32i_I, "Sf_BFu32i_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Ip  {
  ::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 Sf_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Ip(Test_Sf_BFu32i_Ip, "Sf_BFu32i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_L  {
  ::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 Sf_BFu32i_L lv;
    check2(sizeof(lv), 16, "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, 4, 0, 32, 1, "Sf_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_L");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_L(Test_Sf_BFu32i_L, "Sf_BFu32i_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_S  {
  ::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 Sf_BFu32i_S lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_S");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_S(Test_Sf_BFu32i_S, "Sf_BFu32i_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Sf  {
  ::empty v1;
  unsigned int v2:32;
  ::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 Sf_BFu32i_Sf lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Sf");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Sf(Test_Sf_BFu32i_Sf, "Sf_BFu32i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Uc  {
  ::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 Sf_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Uc(Test_Sf_BFu32i_Uc, "Sf_BFu32i_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Ui  {
  ::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 Sf_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Ui(Test_Sf_BFu32i_Ui, "Sf_BFu32i_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Ul  {
  ::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 Sf_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "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, 4, 0, 32, 1, "Sf_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Ul(Test_Sf_BFu32i_Ul, "Sf_BFu32i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Us  {
  ::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 Sf_BFu32i_Us lv;
    check2(sizeof(lv), 12, "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, 4, 0, 32, 1, "Sf_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Us");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Us(Test_Sf_BFu32i_Us, "Sf_BFu32i_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32i_Vp  {
  ::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 Sf_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, 0, 32, 1, "Sf_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu32i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32i_Vp(Test_Sf_BFu32i_Vp, "Sf_BFu32i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll  {
  ::empty v1;
  __tsu64 v2:32;
};
//SIG(1 Sf_BFu32ll) C1{ FC2{} FL:32}



static void Test_Sf_BFu32ll()
{
  {
    init_simple_test("Sf_BFu32ll");
    static Sf_BFu32ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 32, 1, "Sf_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll(Test_Sf_BFu32ll, "Sf_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu15i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu15i(Test_Sf_BFu32ll_BFu15i, "Sf_BFu32ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu15ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu15ll(Test_Sf_BFu32ll_BFu15ll, "Sf_BFu32ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu15s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu15s(Test_Sf_BFu32ll_BFu15s, "Sf_BFu32ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu16i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu16i(Test_Sf_BFu32ll_BFu16i, "Sf_BFu32ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu16ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu16ll(Test_Sf_BFu32ll_BFu16ll, "Sf_BFu32ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu16s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu16s(Test_Sf_BFu32ll_BFu16s, "Sf_BFu32ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu17i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "Sf_BFu32ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu17i(Test_Sf_BFu32ll_BFu17i, "Sf_BFu32ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu17ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "Sf_BFu32ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu17ll(Test_Sf_BFu32ll_BFu17ll, "Sf_BFu32ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu1c  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "Sf_BFu32ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu1c(Test_Sf_BFu32ll_BFu1c, "Sf_BFu32ll_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu1i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "Sf_BFu32ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu1i(Test_Sf_BFu32ll_BFu1i, "Sf_BFu32ll_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu1ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "Sf_BFu32ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu1ll(Test_Sf_BFu32ll_BFu1ll, "Sf_BFu32ll_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu1s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "Sf_BFu32ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu1s(Test_Sf_BFu32ll_BFu1s, "Sf_BFu32ll_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu31i  {
  ::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 Sf_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu32ll_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu31i(Test_Sf_BFu32ll_BFu31i, "Sf_BFu32ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu31ll  {
  ::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 Sf_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "Sf_BFu32ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu31ll(Test_Sf_BFu32ll_BFu31ll, "Sf_BFu32ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu32i  {
  ::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 Sf_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu32i(Test_Sf_BFu32ll_BFu32i, "Sf_BFu32ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu32ll  {
  ::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 Sf_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu32ll(Test_Sf_BFu32ll_BFu32ll, "Sf_BFu32ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu33  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "Sf_BFu32ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu33(Test_Sf_BFu32ll_BFu33, "Sf_BFu32ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu7c  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu7c(Test_Sf_BFu32ll_BFu7c, "Sf_BFu32ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu7i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu7i(Test_Sf_BFu32ll_BFu7i, "Sf_BFu32ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu7ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu7ll(Test_Sf_BFu32ll_BFu7ll, "Sf_BFu32ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu7s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu7s(Test_Sf_BFu32ll_BFu7s, "Sf_BFu32ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu8c  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu8c(Test_Sf_BFu32ll_BFu8c, "Sf_BFu32ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu8i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu8i(Test_Sf_BFu32ll_BFu8i, "Sf_BFu32ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu8ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu8ll(Test_Sf_BFu32ll_BFu8ll, "Sf_BFu32ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu8s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu8s(Test_Sf_BFu32ll_BFu8s, "Sf_BFu32ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu9i  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu9i(Test_Sf_BFu32ll_BFu9i, "Sf_BFu32ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu9ll  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu9ll(Test_Sf_BFu32ll_BFu9ll, "Sf_BFu32ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_BFu9s  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_BFu9s(Test_Sf_BFu32ll_BFu9s, "Sf_BFu32ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_C  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_C");
    check_field_offset(lv, v3, 5, "Sf_BFu32ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_C(Test_Sf_BFu32ll_C, "Sf_BFu32ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_D  {
  ::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 Sf_BFu32ll_D lv;
    check2(sizeof(lv), 16, "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, 1, 0, 32, 1, "Sf_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_D");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_D(Test_Sf_BFu32ll_D, "Sf_BFu32ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_F  {
  ::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 Sf_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_F");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_F(Test_Sf_BFu32ll_F, "Sf_BFu32ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_I  {
  ::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 Sf_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_I");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_I(Test_Sf_BFu32ll_I, "Sf_BFu32ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Ip  {
  ::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 Sf_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Ip(Test_Sf_BFu32ll_Ip, "Sf_BFu32ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_L  {
  ::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 Sf_BFu32ll_L lv;
    check2(sizeof(lv), 16, "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, 1, 0, 32, 1, "Sf_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_L");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_L(Test_Sf_BFu32ll_L, "Sf_BFu32ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_S  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_S");
    check_field_offset(lv, v3, 6, "Sf_BFu32ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_S(Test_Sf_BFu32ll_S, "Sf_BFu32ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Sf  {
  ::empty v1;
  __tsu64 v2:32;
  ::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 Sf_BFu32ll_Sf lv;
    check2(sizeof(lv), 8, "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, 1, 0, 32, 1, "Sf_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Sf");
    check_field_offset(lv, v3, 5, "Sf_BFu32ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Sf(Test_Sf_BFu32ll_Sf, "Sf_BFu32ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Uc  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "Sf_BFu32ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Uc(Test_Sf_BFu32ll_Uc, "Sf_BFu32ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Ui  {
  ::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 Sf_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Ui(Test_Sf_BFu32ll_Ui, "Sf_BFu32ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Ul  {
  ::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 Sf_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "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, 1, 0, 32, 1, "Sf_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Ul(Test_Sf_BFu32ll_Ul, "Sf_BFu32ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Us  {
  ::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 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, 1, 0, 32, 1, "Sf_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "Sf_BFu32ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Us(Test_Sf_BFu32ll_Us, "Sf_BFu32ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu32ll_Vp  {
  ::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 Sf_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 32, 1, "Sf_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu32ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu32ll_Vp(Test_Sf_BFu32ll_Vp, "Sf_BFu32ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33  {
  ::empty v1;
  __tsu64 v2:33;
};
//SIG(1 Sf_BFu33) C1{ FC2{} FL:33}



static void Test_Sf_BFu33()
{
  {
    init_simple_test("Sf_BFu33");
    static 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, 1, 0, 33, 1, "Sf_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu33(Test_Sf_BFu33, "Sf_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu15i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu15i(Test_Sf_BFu33_BFu15i, "Sf_BFu33_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu15ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu15ll(Test_Sf_BFu33_BFu15ll, "Sf_BFu33_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu15s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu15s(Test_Sf_BFu33_BFu15s, "Sf_BFu33_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu16i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "Sf_BFu33_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu16i(Test_Sf_BFu33_BFu16i, "Sf_BFu33_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu16ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "Sf_BFu33_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu16ll(Test_Sf_BFu33_BFu16ll, "Sf_BFu33_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu16s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu16s(Test_Sf_BFu33_BFu16s, "Sf_BFu33_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu17i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "Sf_BFu33_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu17i(Test_Sf_BFu33_BFu17i, "Sf_BFu33_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu17ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "Sf_BFu33_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu17ll(Test_Sf_BFu33_BFu17ll, "Sf_BFu33_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu1c  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "Sf_BFu33_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu1c(Test_Sf_BFu33_BFu1c, "Sf_BFu33_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu1i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "Sf_BFu33_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu1i(Test_Sf_BFu33_BFu1i, "Sf_BFu33_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu1ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "Sf_BFu33_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu1ll(Test_Sf_BFu33_BFu1ll, "Sf_BFu33_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu1s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "Sf_BFu33_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu1s(Test_Sf_BFu33_BFu1s, "Sf_BFu33_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu31i  {
  ::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 Sf_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 33, 1, "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_BFu33_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu31i(Test_Sf_BFu33_BFu31i, "Sf_BFu33_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu31ll  {
  ::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 Sf_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, 0, 33, 1, "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "Sf_BFu33_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu31ll(Test_Sf_BFu33_BFu31ll, "Sf_BFu33_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu32i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu32i(Test_Sf_BFu33_BFu32i, "Sf_BFu33_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu32ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "Sf_BFu33_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu32ll(Test_Sf_BFu33_BFu32ll, "Sf_BFu33_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu33  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, 1, "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, hide_ull(1LL<<32), "Sf_BFu33_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu33(Test_Sf_BFu33_BFu33, "Sf_BFu33_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu7c  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu7c(Test_Sf_BFu33_BFu7c, "Sf_BFu33_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu7i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu7i(Test_Sf_BFu33_BFu7i, "Sf_BFu33_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu7ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu7ll(Test_Sf_BFu33_BFu7ll, "Sf_BFu33_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu7s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu7s(Test_Sf_BFu33_BFu7s, "Sf_BFu33_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu8c  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu8c(Test_Sf_BFu33_BFu8c, "Sf_BFu33_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu8i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu8i(Test_Sf_BFu33_BFu8i, "Sf_BFu33_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu8ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu8ll(Test_Sf_BFu33_BFu8ll, "Sf_BFu33_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu8s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu8s(Test_Sf_BFu33_BFu8s, "Sf_BFu33_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu9i  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu9i(Test_Sf_BFu33_BFu9i, "Sf_BFu33_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu9ll  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu9ll(Test_Sf_BFu33_BFu9ll, "Sf_BFu33_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_BFu9s  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu33_BFu9s(Test_Sf_BFu33_BFu9s, "Sf_BFu33_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_C  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_C");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_C");
    check_field_offset(lv, v3, 6, "Sf_BFu33_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_C(Test_Sf_BFu33_C, "Sf_BFu33_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_D  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_D");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_D");
    check_field_offset(lv, v3, 8, "Sf_BFu33_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_D(Test_Sf_BFu33_D, "Sf_BFu33_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_F  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_F");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_F");
    check_field_offset(lv, v3, 8, "Sf_BFu33_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_F(Test_Sf_BFu33_F, "Sf_BFu33_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_I  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_I");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_I");
    check_field_offset(lv, v3, 8, "Sf_BFu33_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_I(Test_Sf_BFu33_I, "Sf_BFu33_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Ip  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Ip");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Ip(Test_Sf_BFu33_Ip, "Sf_BFu33_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_L  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_L");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_L");
    check_field_offset(lv, v3, 8, "Sf_BFu33_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_L(Test_Sf_BFu33_L, "Sf_BFu33_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_S  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_S");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_S");
    check_field_offset(lv, v3, 6, "Sf_BFu33_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_S(Test_Sf_BFu33_S, "Sf_BFu33_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Sf  {
  ::empty v1;
  __tsu64 v2:33;
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Sf");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Sf");
    check_field_offset(lv, v3, 6, "Sf_BFu33_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Sf(Test_Sf_BFu33_Sf, "Sf_BFu33_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Uc  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Uc");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Uc");
    check_field_offset(lv, v3, 6, "Sf_BFu33_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Uc(Test_Sf_BFu33_Uc, "Sf_BFu33_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Ui  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Ui");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Ui(Test_Sf_BFu33_Ui, "Sf_BFu33_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Ul  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Ul");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Ul(Test_Sf_BFu33_Ul, "Sf_BFu33_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Us  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Us");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Us");
    check_field_offset(lv, v3, 6, "Sf_BFu33_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Us(Test_Sf_BFu33_Us, "Sf_BFu33_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu33_Vp  {
  ::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 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, 1, 0, 33, 1, "Sf_BFu33_Vp");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu33_Vp(Test_Sf_BFu33_Vp, "Sf_BFu33_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c  {
  ::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 Sf_BFu7c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 7, 1, "Sf_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu7c(Test_Sf_BFu7c, "Sf_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu15i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7c_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu15i(Test_Sf_BFu7c_BFu15i, "Sf_BFu7c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu15ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7c_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu15ll(Test_Sf_BFu7c_BFu15ll, "Sf_BFu7c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu15s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu15s(Test_Sf_BFu7c_BFu15s, "Sf_BFu7c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu16i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7c_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu16i(Test_Sf_BFu7c_BFu16i, "Sf_BFu7c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu16ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7c_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu16ll(Test_Sf_BFu7c_BFu16ll, "Sf_BFu7c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu16s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu16s(Test_Sf_BFu7c_BFu16s, "Sf_BFu7c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu17i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7c_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu17i(Test_Sf_BFu7c_BFu17i, "Sf_BFu7c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu17ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7c_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu17ll(Test_Sf_BFu7c_BFu17ll, "Sf_BFu7c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu1c  {
  ::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 Sf_BFu7c_BFu1c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7c_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu1c(Test_Sf_BFu7c_BFu1c, "Sf_BFu7c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu1i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7c_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu1i(Test_Sf_BFu7c_BFu1i, "Sf_BFu7c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu1ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7c_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu1ll(Test_Sf_BFu7c_BFu1ll, "Sf_BFu7c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu1s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7c_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu1s(Test_Sf_BFu7c_BFu1s, "Sf_BFu7c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu31i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu31i(Test_Sf_BFu7c_BFu31i, "Sf_BFu7c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu31ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "Sf_BFu7c_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu31ll(Test_Sf_BFu7c_BFu31ll, "Sf_BFu7c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu32i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu32i(Test_Sf_BFu7c_BFu32i, "Sf_BFu7c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu32ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "Sf_BFu7c_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu32ll(Test_Sf_BFu7c_BFu32ll, "Sf_BFu7c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu33  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "Sf_BFu7c_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu33(Test_Sf_BFu7c_BFu33, "Sf_BFu7c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu7c  {
  ::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 Sf_BFu7c_BFu7c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu7c(Test_Sf_BFu7c_BFu7c, "Sf_BFu7c_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu7i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu7i(Test_Sf_BFu7c_BFu7i, "Sf_BFu7c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu7ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu7ll(Test_Sf_BFu7c_BFu7ll, "Sf_BFu7c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu7s  {
  ::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 Sf_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu7s(Test_Sf_BFu7c_BFu7s, "Sf_BFu7c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu8c  {
  ::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 Sf_BFu7c_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu8c(Test_Sf_BFu7c_BFu8c, "Sf_BFu7c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu8i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu8i(Test_Sf_BFu7c_BFu8i, "Sf_BFu7c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu8ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu8ll(Test_Sf_BFu7c_BFu8ll, "Sf_BFu7c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu8s  {
  ::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 Sf_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu8s(Test_Sf_BFu7c_BFu8s, "Sf_BFu7c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu9i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu9i(Test_Sf_BFu7c_BFu9i, "Sf_BFu7c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu9ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu9ll(Test_Sf_BFu7c_BFu9ll, "Sf_BFu7c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_BFu9s  {
  ::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 Sf_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_BFu9s(Test_Sf_BFu7c_BFu9s, "Sf_BFu7c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_C  {
  ::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 Sf_BFu7c_C lv;
    check2(sizeof(lv), 3, "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, 1, 0, 7, 1, "Sf_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_C");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_C(Test_Sf_BFu7c_C, "Sf_BFu7c_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_D  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_D(Test_Sf_BFu7c_D, "Sf_BFu7c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_F  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_F(Test_Sf_BFu7c_F, "Sf_BFu7c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_I  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_I(Test_Sf_BFu7c_I, "Sf_BFu7c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Ip  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Ip(Test_Sf_BFu7c_Ip, "Sf_BFu7c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_L  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_L(Test_Sf_BFu7c_L, "Sf_BFu7c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_S  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_S(Test_Sf_BFu7c_S, "Sf_BFu7c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Sf  {
  ::empty v1;
  unsigned char v2:7;
  ::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 Sf_BFu7c_Sf lv;
    check2(sizeof(lv), 3, "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, 1, 0, 7, 1, "Sf_BFu7c_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Sf(Test_Sf_BFu7c_Sf, "Sf_BFu7c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Uc  {
  ::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 Sf_BFu7c_Uc lv;
    check2(sizeof(lv), 3, "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, 1, 0, 7, 1, "Sf_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Uc(Test_Sf_BFu7c_Uc, "Sf_BFu7c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Ui  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Ui(Test_Sf_BFu7c_Ui, "Sf_BFu7c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Ul  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Ul(Test_Sf_BFu7c_Ul, "Sf_BFu7c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Us  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Us(Test_Sf_BFu7c_Us, "Sf_BFu7c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7c_Vp  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7c_Vp(Test_Sf_BFu7c_Vp, "Sf_BFu7c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i(Test_Sf_BFu7i, "Sf_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu15i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu15i(Test_Sf_BFu7i_BFu15i, "Sf_BFu7i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu15ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu15ll(Test_Sf_BFu7i_BFu15ll, "Sf_BFu7i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu15s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu15s(Test_Sf_BFu7i_BFu15s, "Sf_BFu7i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu16i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu16i(Test_Sf_BFu7i_BFu16i, "Sf_BFu7i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu16ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu16ll(Test_Sf_BFu7i_BFu16ll, "Sf_BFu7i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu16s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu16s(Test_Sf_BFu7i_BFu16s, "Sf_BFu7i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu17i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu17i(Test_Sf_BFu7i_BFu17i, "Sf_BFu7i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu17ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu17ll(Test_Sf_BFu7i_BFu17ll, "Sf_BFu7i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu1c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu1c(Test_Sf_BFu7i_BFu1c, "Sf_BFu7i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu1i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu1i(Test_Sf_BFu7i_BFu1i, "Sf_BFu7i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu1ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu1ll(Test_Sf_BFu7i_BFu1ll, "Sf_BFu7i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu1s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu1s(Test_Sf_BFu7i_BFu1s, "Sf_BFu7i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu31i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu31i(Test_Sf_BFu7i_BFu31i, "Sf_BFu7i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu31ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "Sf_BFu7i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu31ll(Test_Sf_BFu7i_BFu31ll, "Sf_BFu7i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu32i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu32i(Test_Sf_BFu7i_BFu32i, "Sf_BFu7i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu32ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "Sf_BFu7i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu32ll(Test_Sf_BFu7i_BFu32ll, "Sf_BFu7i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu33  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "Sf_BFu7i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu33(Test_Sf_BFu7i_BFu33, "Sf_BFu7i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu7c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu7c(Test_Sf_BFu7i_BFu7c, "Sf_BFu7i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu7i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu7i(Test_Sf_BFu7i_BFu7i, "Sf_BFu7i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu7ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu7ll(Test_Sf_BFu7i_BFu7ll, "Sf_BFu7i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu7s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu7s(Test_Sf_BFu7i_BFu7s, "Sf_BFu7i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu8c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu8c(Test_Sf_BFu7i_BFu8c, "Sf_BFu7i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu8i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu8i(Test_Sf_BFu7i_BFu8i, "Sf_BFu7i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu8ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu8ll(Test_Sf_BFu7i_BFu8ll, "Sf_BFu7i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu8s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu8s(Test_Sf_BFu7i_BFu8s, "Sf_BFu7i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu9i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu9i(Test_Sf_BFu7i_BFu9i, "Sf_BFu7i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu9ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu9ll(Test_Sf_BFu7i_BFu9ll, "Sf_BFu7i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_BFu9s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_BFu9s(Test_Sf_BFu7i_BFu9s, "Sf_BFu7i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_C  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_C");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_C(Test_Sf_BFu7i_C, "Sf_BFu7i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_D  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_D(Test_Sf_BFu7i_D, "Sf_BFu7i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_F  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_F(Test_Sf_BFu7i_F, "Sf_BFu7i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_I  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_I(Test_Sf_BFu7i_I, "Sf_BFu7i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Ip  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Ip(Test_Sf_BFu7i_Ip, "Sf_BFu7i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_L  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_L(Test_Sf_BFu7i_L, "Sf_BFu7i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_S  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_S(Test_Sf_BFu7i_S, "Sf_BFu7i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Sf  {
  ::empty v1;
  unsigned int v2:7;
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Sf(Test_Sf_BFu7i_Sf, "Sf_BFu7i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Uc  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Uc(Test_Sf_BFu7i_Uc, "Sf_BFu7i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Ui  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Ui(Test_Sf_BFu7i_Ui, "Sf_BFu7i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Ul  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Ul(Test_Sf_BFu7i_Ul, "Sf_BFu7i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Us  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Us(Test_Sf_BFu7i_Us, "Sf_BFu7i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7i_Vp  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7i_Vp(Test_Sf_BFu7i_Vp, "Sf_BFu7i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll  {
  ::empty v1;
  __tsu64 v2:7;
};
//SIG(1 Sf_BFu7ll) C1{ FC2{} FL:7}



static void Test_Sf_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7ll");
    static 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, 1, 0, 7, 1, "Sf_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll(Test_Sf_BFu7ll, "Sf_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu15i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu15i(Test_Sf_BFu7ll_BFu15i, "Sf_BFu7ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu15ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu15ll(Test_Sf_BFu7ll_BFu15ll, "Sf_BFu7ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu15s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu15s(Test_Sf_BFu7ll_BFu15s, "Sf_BFu7ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu16i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu16i(Test_Sf_BFu7ll_BFu16i, "Sf_BFu7ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu16ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu16ll(Test_Sf_BFu7ll_BFu16ll, "Sf_BFu7ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu16s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu16s(Test_Sf_BFu7ll_BFu16s, "Sf_BFu7ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu17i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu17i(Test_Sf_BFu7ll_BFu17i, "Sf_BFu7ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu17ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu17ll(Test_Sf_BFu7ll_BFu17ll, "Sf_BFu7ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu1c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu1c(Test_Sf_BFu7ll_BFu1c, "Sf_BFu7ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu1i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu1i(Test_Sf_BFu7ll_BFu1i, "Sf_BFu7ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu1ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu1ll(Test_Sf_BFu7ll_BFu1ll, "Sf_BFu7ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu1s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu1s(Test_Sf_BFu7ll_BFu1s, "Sf_BFu7ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu31i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu31i(Test_Sf_BFu7ll_BFu31i, "Sf_BFu7ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu31ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "Sf_BFu7ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu31ll(Test_Sf_BFu7ll_BFu31ll, "Sf_BFu7ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu32i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu32i(Test_Sf_BFu7ll_BFu32i, "Sf_BFu7ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu32ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "Sf_BFu7ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu32ll(Test_Sf_BFu7ll_BFu32ll, "Sf_BFu7ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu33  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "Sf_BFu7ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu33(Test_Sf_BFu7ll_BFu33, "Sf_BFu7ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu7c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu7c(Test_Sf_BFu7ll_BFu7c, "Sf_BFu7ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu7i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu7i(Test_Sf_BFu7ll_BFu7i, "Sf_BFu7ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu7ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu7ll(Test_Sf_BFu7ll_BFu7ll, "Sf_BFu7ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu7s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu7s(Test_Sf_BFu7ll_BFu7s, "Sf_BFu7ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu8c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu8c(Test_Sf_BFu7ll_BFu8c, "Sf_BFu7ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu8i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu8i(Test_Sf_BFu7ll_BFu8i, "Sf_BFu7ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu8ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu8ll(Test_Sf_BFu7ll_BFu8ll, "Sf_BFu7ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu8s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu8s(Test_Sf_BFu7ll_BFu8s, "Sf_BFu7ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu9i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu9i(Test_Sf_BFu7ll_BFu9i, "Sf_BFu7ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu9ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu9ll(Test_Sf_BFu7ll_BFu9ll, "Sf_BFu7ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_BFu9s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_BFu9s(Test_Sf_BFu7ll_BFu9s, "Sf_BFu7ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_C  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_C");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_C(Test_Sf_BFu7ll_C, "Sf_BFu7ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_D  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_D(Test_Sf_BFu7ll_D, "Sf_BFu7ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_F  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_F(Test_Sf_BFu7ll_F, "Sf_BFu7ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_I  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_I(Test_Sf_BFu7ll_I, "Sf_BFu7ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Ip  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Ip(Test_Sf_BFu7ll_Ip, "Sf_BFu7ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_L  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_L(Test_Sf_BFu7ll_L, "Sf_BFu7ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_S  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_S(Test_Sf_BFu7ll_S, "Sf_BFu7ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Sf  {
  ::empty v1;
  __tsu64 v2:7;
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Sf(Test_Sf_BFu7ll_Sf, "Sf_BFu7ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Uc  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Uc(Test_Sf_BFu7ll_Uc, "Sf_BFu7ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Ui  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Ui(Test_Sf_BFu7ll_Ui, "Sf_BFu7ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Ul  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Ul(Test_Sf_BFu7ll_Ul, "Sf_BFu7ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Us  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Us(Test_Sf_BFu7ll_Us, "Sf_BFu7ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7ll_Vp  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7ll_Vp(Test_Sf_BFu7ll_Vp, "Sf_BFu7ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu7s(Test_Sf_BFu7s, "Sf_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu15i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7s_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu15i(Test_Sf_BFu7s_BFu15i, "Sf_BFu7s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu15ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "Sf_BFu7s_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu15ll(Test_Sf_BFu7s_BFu15ll, "Sf_BFu7s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu15s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu15s(Test_Sf_BFu7s_BFu15s, "Sf_BFu7s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu16i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7s_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu16i(Test_Sf_BFu7s_BFu16i, "Sf_BFu7s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu16ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "Sf_BFu7s_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu16ll(Test_Sf_BFu7s_BFu16ll, "Sf_BFu7s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu16s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu16s(Test_Sf_BFu7s_BFu16s, "Sf_BFu7s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu17i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7s_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu17i(Test_Sf_BFu7s_BFu17i, "Sf_BFu7s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu17ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "Sf_BFu7s_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu17ll(Test_Sf_BFu7s_BFu17ll, "Sf_BFu7s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu1c  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7s_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu1c(Test_Sf_BFu7s_BFu1c, "Sf_BFu7s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu1i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7s_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu1i(Test_Sf_BFu7s_BFu1i, "Sf_BFu7s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu1ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7s_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu1ll(Test_Sf_BFu7s_BFu1ll, "Sf_BFu7s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu1s  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "Sf_BFu7s_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu1s(Test_Sf_BFu7s_BFu1s, "Sf_BFu7s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu31i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu31i(Test_Sf_BFu7s_BFu31i, "Sf_BFu7s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu31ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "Sf_BFu7s_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu31ll(Test_Sf_BFu7s_BFu31ll, "Sf_BFu7s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu32i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu32i(Test_Sf_BFu7s_BFu32i, "Sf_BFu7s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu32ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "Sf_BFu7s_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu32ll(Test_Sf_BFu7s_BFu32ll, "Sf_BFu7s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu33  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "Sf_BFu7s_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu33(Test_Sf_BFu7s_BFu33, "Sf_BFu7s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu7c  {
  ::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 Sf_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu7c(Test_Sf_BFu7s_BFu7c, "Sf_BFu7s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu7i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu7i(Test_Sf_BFu7s_BFu7i, "Sf_BFu7s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu7ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu7ll(Test_Sf_BFu7s_BFu7ll, "Sf_BFu7s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu7s  {
  ::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 Sf_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu7s(Test_Sf_BFu7s_BFu7s, "Sf_BFu7s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu8c  {
  ::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 Sf_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu8c(Test_Sf_BFu7s_BFu8c, "Sf_BFu7s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu8i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu8i(Test_Sf_BFu7s_BFu8i, "Sf_BFu7s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu8ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu8ll(Test_Sf_BFu7s_BFu8ll, "Sf_BFu7s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu8s  {
  ::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 Sf_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu8s(Test_Sf_BFu7s_BFu8s, "Sf_BFu7s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu9i  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu9i(Test_Sf_BFu7s_BFu9i, "Sf_BFu7s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu9ll  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu9ll(Test_Sf_BFu7s_BFu9ll, "Sf_BFu7s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_BFu9s  {
  ::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 Sf_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_BFu9s(Test_Sf_BFu7s_BFu9s, "Sf_BFu7s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_C  {
  ::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 Sf_BFu7s_C lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_C");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_C(Test_Sf_BFu7s_C, "Sf_BFu7s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_D  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_D(Test_Sf_BFu7s_D, "Sf_BFu7s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_F  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_F(Test_Sf_BFu7s_F, "Sf_BFu7s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_I  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_I(Test_Sf_BFu7s_I, "Sf_BFu7s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Ip  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Ip(Test_Sf_BFu7s_Ip, "Sf_BFu7s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_L  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_L(Test_Sf_BFu7s_L, "Sf_BFu7s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_S  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_S(Test_Sf_BFu7s_S, "Sf_BFu7s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Sf  {
  ::empty v1;
  unsigned short v2:7;
  ::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 Sf_BFu7s_Sf lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Sf(Test_Sf_BFu7s_Sf, "Sf_BFu7s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Uc  {
  ::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 Sf_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "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, 1, 0, 7, 1, "Sf_BFu7s_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Uc(Test_Sf_BFu7s_Uc, "Sf_BFu7s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Ui  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Ui(Test_Sf_BFu7s_Ui, "Sf_BFu7s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Ul  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Ul(Test_Sf_BFu7s_Ul, "Sf_BFu7s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Us  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Us(Test_Sf_BFu7s_Us, "Sf_BFu7s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu7s_Vp  {
  ::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 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, 1, 0, 7, 1, "Sf_BFu7s_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu7s_Vp(Test_Sf_BFu7s_Vp, "Sf_BFu7s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c  {
  ::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 Sf_BFu8c lv;
    check2(sizeof(lv), 2, "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, 1, 0, 8, 1, "Sf_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu8c(Test_Sf_BFu8c, "Sf_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu15i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8c_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu15i(Test_Sf_BFu8c_BFu15i, "Sf_BFu8c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu15ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8c_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu15ll(Test_Sf_BFu8c_BFu15ll, "Sf_BFu8c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu15s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu15s(Test_Sf_BFu8c_BFu15s, "Sf_BFu8c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu16i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8c_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu16i(Test_Sf_BFu8c_BFu16i, "Sf_BFu8c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu16ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8c_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu16ll(Test_Sf_BFu8c_BFu16ll, "Sf_BFu8c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu16s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu16s(Test_Sf_BFu8c_BFu16s, "Sf_BFu8c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu17i  {
  ::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 Sf_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu8c_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu17i(Test_Sf_BFu8c_BFu17i, "Sf_BFu8c_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu17ll  {
  ::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 Sf_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu8c_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu17ll(Test_Sf_BFu8c_BFu17ll, "Sf_BFu8c_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu1c  {
  ::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 Sf_BFu8c_BFu1c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8c_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu1c(Test_Sf_BFu8c_BFu1c, "Sf_BFu8c_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu1i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8c_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu1i(Test_Sf_BFu8c_BFu1i, "Sf_BFu8c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu1ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8c_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu1ll(Test_Sf_BFu8c_BFu1ll, "Sf_BFu8c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu1s  {
  ::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 Sf_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8c_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu1s(Test_Sf_BFu8c_BFu1s, "Sf_BFu8c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu31i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu31i(Test_Sf_BFu8c_BFu31i, "Sf_BFu8c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu31ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu8c_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu31ll(Test_Sf_BFu8c_BFu31ll, "Sf_BFu8c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu32i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu32i(Test_Sf_BFu8c_BFu32i, "Sf_BFu8c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu32ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu8c_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu32ll(Test_Sf_BFu8c_BFu32ll, "Sf_BFu8c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu33  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu8c_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu33(Test_Sf_BFu8c_BFu33, "Sf_BFu8c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu7c  {
  ::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 Sf_BFu8c_BFu7c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu7c(Test_Sf_BFu8c_BFu7c, "Sf_BFu8c_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu7i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu7i(Test_Sf_BFu8c_BFu7i, "Sf_BFu8c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu7ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu7ll(Test_Sf_BFu8c_BFu7ll, "Sf_BFu8c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu7s  {
  ::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 Sf_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu7s(Test_Sf_BFu8c_BFu7s, "Sf_BFu8c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu8c  {
  ::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 Sf_BFu8c_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu8c(Test_Sf_BFu8c_BFu8c, "Sf_BFu8c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu8i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu8i(Test_Sf_BFu8c_BFu8i, "Sf_BFu8c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu8ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu8ll(Test_Sf_BFu8c_BFu8ll, "Sf_BFu8c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu8s  {
  ::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 Sf_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu8s(Test_Sf_BFu8c_BFu8s, "Sf_BFu8c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu9i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8c_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu9i(Test_Sf_BFu8c_BFu9i, "Sf_BFu8c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu9ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8c_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu9ll(Test_Sf_BFu8c_BFu9ll, "Sf_BFu8c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_BFu9s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_BFu9s(Test_Sf_BFu8c_BFu9s, "Sf_BFu8c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_C  {
  ::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 Sf_BFu8c_C lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_C");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_C(Test_Sf_BFu8c_C, "Sf_BFu8c_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_D  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_D(Test_Sf_BFu8c_D, "Sf_BFu8c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_F  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_F(Test_Sf_BFu8c_F, "Sf_BFu8c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_I  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_I(Test_Sf_BFu8c_I, "Sf_BFu8c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Ip  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Ip(Test_Sf_BFu8c_Ip, "Sf_BFu8c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_L  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_L(Test_Sf_BFu8c_L, "Sf_BFu8c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_S  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_S(Test_Sf_BFu8c_S, "Sf_BFu8c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Sf  {
  ::empty v1;
  unsigned char v2:8;
  ::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 Sf_BFu8c_Sf lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Sf(Test_Sf_BFu8c_Sf, "Sf_BFu8c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Uc  {
  ::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 Sf_BFu8c_Uc lv;
    check2(sizeof(lv), 3, "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, 1, 0, 8, 1, "Sf_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Uc(Test_Sf_BFu8c_Uc, "Sf_BFu8c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Ui  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Ui(Test_Sf_BFu8c_Ui, "Sf_BFu8c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Ul  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Ul(Test_Sf_BFu8c_Ul, "Sf_BFu8c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Us  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Us(Test_Sf_BFu8c_Us, "Sf_BFu8c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8c_Vp  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8c_Vp(Test_Sf_BFu8c_Vp, "Sf_BFu8c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i(Test_Sf_BFu8i, "Sf_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu15i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu15i(Test_Sf_BFu8i_BFu15i, "Sf_BFu8i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu15ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu15ll(Test_Sf_BFu8i_BFu15ll, "Sf_BFu8i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu15s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu15s(Test_Sf_BFu8i_BFu15s, "Sf_BFu8i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu16i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu16i(Test_Sf_BFu8i_BFu16i, "Sf_BFu8i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu16ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu16ll(Test_Sf_BFu8i_BFu16ll, "Sf_BFu8i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu16s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu16s(Test_Sf_BFu8i_BFu16s, "Sf_BFu8i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu17i  {
  ::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 Sf_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu8i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu17i(Test_Sf_BFu8i_BFu17i, "Sf_BFu8i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu17ll  {
  ::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 Sf_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu8i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu17ll(Test_Sf_BFu8i_BFu17ll, "Sf_BFu8i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu1c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu1c(Test_Sf_BFu8i_BFu1c, "Sf_BFu8i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu1i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu1i(Test_Sf_BFu8i_BFu1i, "Sf_BFu8i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu1ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu1ll(Test_Sf_BFu8i_BFu1ll, "Sf_BFu8i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu1s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu1s(Test_Sf_BFu8i_BFu1s, "Sf_BFu8i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu31i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu31i(Test_Sf_BFu8i_BFu31i, "Sf_BFu8i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu31ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu8i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu31ll(Test_Sf_BFu8i_BFu31ll, "Sf_BFu8i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu32i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu32i(Test_Sf_BFu8i_BFu32i, "Sf_BFu8i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu32ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu8i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu32ll(Test_Sf_BFu8i_BFu32ll, "Sf_BFu8i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu33  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu8i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu33(Test_Sf_BFu8i_BFu33, "Sf_BFu8i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu7c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu7c(Test_Sf_BFu8i_BFu7c, "Sf_BFu8i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu7i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu7i(Test_Sf_BFu8i_BFu7i, "Sf_BFu8i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu7ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu7ll(Test_Sf_BFu8i_BFu7ll, "Sf_BFu8i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu7s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu7s(Test_Sf_BFu8i_BFu7s, "Sf_BFu8i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu8c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu8c(Test_Sf_BFu8i_BFu8c, "Sf_BFu8i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu8i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu8i(Test_Sf_BFu8i_BFu8i, "Sf_BFu8i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu8ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu8ll(Test_Sf_BFu8i_BFu8ll, "Sf_BFu8i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu8s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu8s(Test_Sf_BFu8i_BFu8s, "Sf_BFu8i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu9i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu9i(Test_Sf_BFu8i_BFu9i, "Sf_BFu8i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu9ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu9ll(Test_Sf_BFu8i_BFu9ll, "Sf_BFu8i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_BFu9s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_BFu9s(Test_Sf_BFu8i_BFu9s, "Sf_BFu8i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_C  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_C");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_C(Test_Sf_BFu8i_C, "Sf_BFu8i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_D  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_D(Test_Sf_BFu8i_D, "Sf_BFu8i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_F  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_F(Test_Sf_BFu8i_F, "Sf_BFu8i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_I  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_I(Test_Sf_BFu8i_I, "Sf_BFu8i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Ip  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Ip(Test_Sf_BFu8i_Ip, "Sf_BFu8i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_L  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_L(Test_Sf_BFu8i_L, "Sf_BFu8i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_S  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_S(Test_Sf_BFu8i_S, "Sf_BFu8i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Sf  {
  ::empty v1;
  unsigned int v2:8;
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Sf(Test_Sf_BFu8i_Sf, "Sf_BFu8i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Uc  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Uc(Test_Sf_BFu8i_Uc, "Sf_BFu8i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Ui  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Ui(Test_Sf_BFu8i_Ui, "Sf_BFu8i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Ul  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Ul(Test_Sf_BFu8i_Ul, "Sf_BFu8i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Us  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Us(Test_Sf_BFu8i_Us, "Sf_BFu8i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8i_Vp  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8i_Vp(Test_Sf_BFu8i_Vp, "Sf_BFu8i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll  {
  ::empty v1;
  __tsu64 v2:8;
};
//SIG(1 Sf_BFu8ll) C1{ FC2{} FL:8}



static void Test_Sf_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8ll");
    static 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, 1, 0, 8, 1, "Sf_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll(Test_Sf_BFu8ll, "Sf_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu15i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu15i(Test_Sf_BFu8ll_BFu15i, "Sf_BFu8ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu15ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu15ll(Test_Sf_BFu8ll_BFu15ll, "Sf_BFu8ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu15s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu15s(Test_Sf_BFu8ll_BFu15s, "Sf_BFu8ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu16i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu16i(Test_Sf_BFu8ll_BFu16i, "Sf_BFu8ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu16ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu16ll(Test_Sf_BFu8ll_BFu16ll, "Sf_BFu8ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu16s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu16s(Test_Sf_BFu8ll_BFu16s, "Sf_BFu8ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu17i  {
  ::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 Sf_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu8ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu17i(Test_Sf_BFu8ll_BFu17i, "Sf_BFu8ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu17ll  {
  ::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 Sf_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu8ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu17ll(Test_Sf_BFu8ll_BFu17ll, "Sf_BFu8ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu1c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu1c(Test_Sf_BFu8ll_BFu1c, "Sf_BFu8ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu1i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu1i(Test_Sf_BFu8ll_BFu1i, "Sf_BFu8ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu1ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu1ll(Test_Sf_BFu8ll_BFu1ll, "Sf_BFu8ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu1s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu1s(Test_Sf_BFu8ll_BFu1s, "Sf_BFu8ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu31i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu31i(Test_Sf_BFu8ll_BFu31i, "Sf_BFu8ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu31ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu8ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu31ll(Test_Sf_BFu8ll_BFu31ll, "Sf_BFu8ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu32i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu32i(Test_Sf_BFu8ll_BFu32i, "Sf_BFu8ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu32ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu8ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu32ll(Test_Sf_BFu8ll_BFu32ll, "Sf_BFu8ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu33  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu8ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu33(Test_Sf_BFu8ll_BFu33, "Sf_BFu8ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu7c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu7c(Test_Sf_BFu8ll_BFu7c, "Sf_BFu8ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu7i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu7i(Test_Sf_BFu8ll_BFu7i, "Sf_BFu8ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu7ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu7ll(Test_Sf_BFu8ll_BFu7ll, "Sf_BFu8ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu7s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu7s(Test_Sf_BFu8ll_BFu7s, "Sf_BFu8ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu8c  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu8c(Test_Sf_BFu8ll_BFu8c, "Sf_BFu8ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu8i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu8i(Test_Sf_BFu8ll_BFu8i, "Sf_BFu8ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu8ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu8ll(Test_Sf_BFu8ll_BFu8ll, "Sf_BFu8ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu8s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu8s(Test_Sf_BFu8ll_BFu8s, "Sf_BFu8ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu9i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu9i(Test_Sf_BFu8ll_BFu9i, "Sf_BFu8ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu9ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu9ll(Test_Sf_BFu8ll_BFu9ll, "Sf_BFu8ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_BFu9s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_BFu9s(Test_Sf_BFu8ll_BFu9s, "Sf_BFu8ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_C  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_C");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_C(Test_Sf_BFu8ll_C, "Sf_BFu8ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_D  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_D(Test_Sf_BFu8ll_D, "Sf_BFu8ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_F  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_F(Test_Sf_BFu8ll_F, "Sf_BFu8ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_I  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_I(Test_Sf_BFu8ll_I, "Sf_BFu8ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Ip  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Ip(Test_Sf_BFu8ll_Ip, "Sf_BFu8ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_L  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_L(Test_Sf_BFu8ll_L, "Sf_BFu8ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_S  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_S(Test_Sf_BFu8ll_S, "Sf_BFu8ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Sf  {
  ::empty v1;
  __tsu64 v2:8;
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Sf(Test_Sf_BFu8ll_Sf, "Sf_BFu8ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Uc  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Uc(Test_Sf_BFu8ll_Uc, "Sf_BFu8ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Ui  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Ui(Test_Sf_BFu8ll_Ui, "Sf_BFu8ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Ul  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Ul(Test_Sf_BFu8ll_Ul, "Sf_BFu8ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Us  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Us(Test_Sf_BFu8ll_Us, "Sf_BFu8ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8ll_Vp  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8ll_Vp(Test_Sf_BFu8ll_Vp, "Sf_BFu8ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu8s(Test_Sf_BFu8s, "Sf_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu15i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8s_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu15i(Test_Sf_BFu8s_BFu15i, "Sf_BFu8s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu15ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8s_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu15ll(Test_Sf_BFu8s_BFu15ll, "Sf_BFu8s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu15s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu15s(Test_Sf_BFu8s_BFu15s, "Sf_BFu8s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu16i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8s_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu16i(Test_Sf_BFu8s_BFu16i, "Sf_BFu8s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu16ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8s_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu16ll(Test_Sf_BFu8s_BFu16ll, "Sf_BFu8s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu16s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu16s(Test_Sf_BFu8s_BFu16s, "Sf_BFu8s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu17i  {
  ::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 Sf_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu8s_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu17i(Test_Sf_BFu8s_BFu17i, "Sf_BFu8s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu17ll  {
  ::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 Sf_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu8s_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu17ll(Test_Sf_BFu8s_BFu17ll, "Sf_BFu8s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu1c  {
  ::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 Sf_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8s_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu1c(Test_Sf_BFu8s_BFu1c, "Sf_BFu8s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu1i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8s_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu1i(Test_Sf_BFu8s_BFu1i, "Sf_BFu8s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu1ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8s_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu1ll(Test_Sf_BFu8s_BFu1ll, "Sf_BFu8s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu1s  {
  ::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 Sf_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu8s_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu1s(Test_Sf_BFu8s_BFu1s, "Sf_BFu8s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu31i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu31i(Test_Sf_BFu8s_BFu31i, "Sf_BFu8s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu31ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu8s_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu31ll(Test_Sf_BFu8s_BFu31ll, "Sf_BFu8s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu32i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu32i(Test_Sf_BFu8s_BFu32i, "Sf_BFu8s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu32ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu8s_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu32ll(Test_Sf_BFu8s_BFu32ll, "Sf_BFu8s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu33  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu8s_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu33(Test_Sf_BFu8s_BFu33, "Sf_BFu8s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu7c  {
  ::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 Sf_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu7c(Test_Sf_BFu8s_BFu7c, "Sf_BFu8s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu7i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu7i(Test_Sf_BFu8s_BFu7i, "Sf_BFu8s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu7ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu7ll(Test_Sf_BFu8s_BFu7ll, "Sf_BFu8s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu7s  {
  ::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 Sf_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu7s(Test_Sf_BFu8s_BFu7s, "Sf_BFu8s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu8c  {
  ::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 Sf_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu8c(Test_Sf_BFu8s_BFu8c, "Sf_BFu8s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu8i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu8i(Test_Sf_BFu8s_BFu8i, "Sf_BFu8s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu8ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu8ll(Test_Sf_BFu8s_BFu8ll, "Sf_BFu8s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu8s  {
  ::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 Sf_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu8s(Test_Sf_BFu8s_BFu8s, "Sf_BFu8s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu9i  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8s_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu9i(Test_Sf_BFu8s_BFu9i, "Sf_BFu8s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu9ll  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8s_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu9ll(Test_Sf_BFu8s_BFu9ll, "Sf_BFu8s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_BFu9s  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_BFu9s(Test_Sf_BFu8s_BFu9s, "Sf_BFu8s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_C  {
  ::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 Sf_BFu8s_C lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_C");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_C(Test_Sf_BFu8s_C, "Sf_BFu8s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_D  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_D(Test_Sf_BFu8s_D, "Sf_BFu8s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_F  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_F(Test_Sf_BFu8s_F, "Sf_BFu8s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_I  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_I(Test_Sf_BFu8s_I, "Sf_BFu8s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Ip  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Ip(Test_Sf_BFu8s_Ip, "Sf_BFu8s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_L  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_L(Test_Sf_BFu8s_L, "Sf_BFu8s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_S  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_S(Test_Sf_BFu8s_S, "Sf_BFu8s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Sf  {
  ::empty v1;
  unsigned short v2:8;
  ::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 Sf_BFu8s_Sf lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Sf(Test_Sf_BFu8s_Sf, "Sf_BFu8s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Uc  {
  ::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 Sf_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "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, 1, 0, 8, 1, "Sf_BFu8s_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Uc(Test_Sf_BFu8s_Uc, "Sf_BFu8s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Ui  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Ui(Test_Sf_BFu8s_Ui, "Sf_BFu8s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Ul  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Ul(Test_Sf_BFu8s_Ul, "Sf_BFu8s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Us  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Us(Test_Sf_BFu8s_Us, "Sf_BFu8s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu8s_Vp  {
  ::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 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, 1, 0, 8, 1, "Sf_BFu8s_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu8s_Vp(Test_Sf_BFu8s_Vp, "Sf_BFu8s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i(Test_Sf_BFu9i, "Sf_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu15i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu15i(Test_Sf_BFu9i_BFu15i, "Sf_BFu9i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu15ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu15ll(Test_Sf_BFu9i_BFu15ll, "Sf_BFu9i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu15s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu15s(Test_Sf_BFu9i_BFu15s, "Sf_BFu9i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu16i  {
  ::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 Sf_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu16i(Test_Sf_BFu9i_BFu16i, "Sf_BFu9i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu16ll  {
  ::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 Sf_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu16ll(Test_Sf_BFu9i_BFu16ll, "Sf_BFu9i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu16s  {
  ::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 Sf_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu16s(Test_Sf_BFu9i_BFu16s, "Sf_BFu9i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu17i  {
  ::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 Sf_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu9i_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu17i(Test_Sf_BFu9i_BFu17i, "Sf_BFu9i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu17ll  {
  ::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 Sf_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "Sf_BFu9i_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu17ll(Test_Sf_BFu9i_BFu17ll, "Sf_BFu9i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu1c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9i_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu1c(Test_Sf_BFu9i_BFu1c, "Sf_BFu9i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu1i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9i_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu1i(Test_Sf_BFu9i_BFu1i, "Sf_BFu9i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu1ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9i_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu1ll(Test_Sf_BFu9i_BFu1ll, "Sf_BFu9i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu1s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9i_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu1s(Test_Sf_BFu9i_BFu1s, "Sf_BFu9i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu31i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu31i(Test_Sf_BFu9i_BFu31i, "Sf_BFu9i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu31ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "Sf_BFu9i_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu31ll(Test_Sf_BFu9i_BFu31ll, "Sf_BFu9i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu32i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu32i(Test_Sf_BFu9i_BFu32i, "Sf_BFu9i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu32ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "Sf_BFu9i_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu32ll(Test_Sf_BFu9i_BFu32ll, "Sf_BFu9i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu33  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "Sf_BFu9i_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu33(Test_Sf_BFu9i_BFu33, "Sf_BFu9i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu7c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu7c(Test_Sf_BFu9i_BFu7c, "Sf_BFu9i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu7i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu7i(Test_Sf_BFu9i_BFu7i, "Sf_BFu9i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu7ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu7ll(Test_Sf_BFu9i_BFu7ll, "Sf_BFu9i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu7s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu7s(Test_Sf_BFu9i_BFu7s, "Sf_BFu9i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu8c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu8c(Test_Sf_BFu9i_BFu8c, "Sf_BFu9i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu8i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu8i(Test_Sf_BFu9i_BFu8i, "Sf_BFu9i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu8ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu8ll(Test_Sf_BFu9i_BFu8ll, "Sf_BFu9i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu8s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu8s(Test_Sf_BFu9i_BFu8s, "Sf_BFu9i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu9i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu9i(Test_Sf_BFu9i_BFu9i, "Sf_BFu9i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu9ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu9ll(Test_Sf_BFu9i_BFu9ll, "Sf_BFu9i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_BFu9s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_BFu9s(Test_Sf_BFu9i_BFu9s, "Sf_BFu9i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_C  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_C");
    check_field_offset(lv, v3, 3, "Sf_BFu9i_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_C(Test_Sf_BFu9i_C, "Sf_BFu9i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_D  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_D(Test_Sf_BFu9i_D, "Sf_BFu9i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_F  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_F(Test_Sf_BFu9i_F, "Sf_BFu9i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_I  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_I(Test_Sf_BFu9i_I, "Sf_BFu9i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Ip  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Ip(Test_Sf_BFu9i_Ip, "Sf_BFu9i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_L  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_L(Test_Sf_BFu9i_L, "Sf_BFu9i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_S  {
  ::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 Sf_BFu9i_S lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_S(Test_Sf_BFu9i_S, "Sf_BFu9i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Sf  {
  ::empty v1;
  unsigned int v2:9;
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu9i_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Sf(Test_Sf_BFu9i_Sf, "Sf_BFu9i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Uc  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu9i_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Uc(Test_Sf_BFu9i_Uc, "Sf_BFu9i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Ui  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Ui(Test_Sf_BFu9i_Ui, "Sf_BFu9i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Ul  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Ul(Test_Sf_BFu9i_Ul, "Sf_BFu9i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Us  {
  ::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 Sf_BFu9i_Us lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Us(Test_Sf_BFu9i_Us, "Sf_BFu9i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9i_Vp  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9i_Vp(Test_Sf_BFu9i_Vp, "Sf_BFu9i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Sf_BFu9ll()
{
  {
    init_simple_test("Sf_BFu9ll");
    static 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, 1, 0, 9, 1, "Sf_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll(Test_Sf_BFu9ll, "Sf_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu15i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu15i(Test_Sf_BFu9ll_BFu15i, "Sf_BFu9ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu15ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu15ll(Test_Sf_BFu9ll_BFu15ll, "Sf_BFu9ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu15s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu15s(Test_Sf_BFu9ll_BFu15s, "Sf_BFu9ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu16i  {
  ::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 Sf_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu16i(Test_Sf_BFu9ll_BFu16i, "Sf_BFu9ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu16ll  {
  ::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 Sf_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu16ll(Test_Sf_BFu9ll_BFu16ll, "Sf_BFu9ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu16s  {
  ::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 Sf_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu16s(Test_Sf_BFu9ll_BFu16s, "Sf_BFu9ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu17i  {
  ::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 Sf_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu9ll_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu17i(Test_Sf_BFu9ll_BFu17i, "Sf_BFu9ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu17ll  {
  ::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 Sf_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "Sf_BFu9ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu17ll(Test_Sf_BFu9ll_BFu17ll, "Sf_BFu9ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu1c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9ll_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu1c(Test_Sf_BFu9ll_BFu1c, "Sf_BFu9ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu1i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9ll_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu1i(Test_Sf_BFu9ll_BFu1i, "Sf_BFu9ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu1ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu1ll(Test_Sf_BFu9ll_BFu1ll, "Sf_BFu9ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu1s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu9ll_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu1s(Test_Sf_BFu9ll_BFu1s, "Sf_BFu9ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu31i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu31i(Test_Sf_BFu9ll_BFu31i, "Sf_BFu9ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu31ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "Sf_BFu9ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu31ll(Test_Sf_BFu9ll_BFu31ll, "Sf_BFu9ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu32i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu32i(Test_Sf_BFu9ll_BFu32i, "Sf_BFu9ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu32ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "Sf_BFu9ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu32ll(Test_Sf_BFu9ll_BFu32ll, "Sf_BFu9ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu33  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "Sf_BFu9ll_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu33(Test_Sf_BFu9ll_BFu33, "Sf_BFu9ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu7c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu7c(Test_Sf_BFu9ll_BFu7c, "Sf_BFu9ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu7i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu7i(Test_Sf_BFu9ll_BFu7i, "Sf_BFu9ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu7ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu7ll(Test_Sf_BFu9ll_BFu7ll, "Sf_BFu9ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu7s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu7s(Test_Sf_BFu9ll_BFu7s, "Sf_BFu9ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu8c  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu8c(Test_Sf_BFu9ll_BFu8c, "Sf_BFu9ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu8i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu8i(Test_Sf_BFu9ll_BFu8i, "Sf_BFu9ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu8ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu8ll(Test_Sf_BFu9ll_BFu8ll, "Sf_BFu9ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu8s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu8s(Test_Sf_BFu9ll_BFu8s, "Sf_BFu9ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu9i  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu9i(Test_Sf_BFu9ll_BFu9i, "Sf_BFu9ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu9ll  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu9ll(Test_Sf_BFu9ll_BFu9ll, "Sf_BFu9ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_BFu9s  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_BFu9s(Test_Sf_BFu9ll_BFu9s, "Sf_BFu9ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_C  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_C");
    check_field_offset(lv, v3, 3, "Sf_BFu9ll_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_C(Test_Sf_BFu9ll_C, "Sf_BFu9ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_D  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_D(Test_Sf_BFu9ll_D, "Sf_BFu9ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_F  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_F(Test_Sf_BFu9ll_F, "Sf_BFu9ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_I  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_I(Test_Sf_BFu9ll_I, "Sf_BFu9ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Ip  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Ip(Test_Sf_BFu9ll_Ip, "Sf_BFu9ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_L  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_L(Test_Sf_BFu9ll_L, "Sf_BFu9ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_S  {
  ::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 Sf_BFu9ll_S lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_S(Test_Sf_BFu9ll_S, "Sf_BFu9ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Sf  {
  ::empty v1;
  __tsu64 v2:9;
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu9ll_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Sf(Test_Sf_BFu9ll_Sf, "Sf_BFu9ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Uc  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu9ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Uc(Test_Sf_BFu9ll_Uc, "Sf_BFu9ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Ui  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Ui(Test_Sf_BFu9ll_Ui, "Sf_BFu9ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Ul  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Ul(Test_Sf_BFu9ll_Ul, "Sf_BFu9ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Us  {
  ::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 Sf_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "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, 1, 0, 9, 1, "Sf_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Us(Test_Sf_BFu9ll_Us, "Sf_BFu9ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9ll_Vp  {
  ::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 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, 1, 0, 9, 1, "Sf_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9ll_Vp(Test_Sf_BFu9ll_Vp, "Sf_BFu9ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s  {
  ::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 Sf_BFu9s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 9, 1, "Sf_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s(Test_Sf_BFu9s, "Sf_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu15i  {
  ::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 Sf_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu15i(Test_Sf_BFu9s_BFu15i, "Sf_BFu9s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu15ll  {
  ::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 Sf_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu15ll(Test_Sf_BFu9s_BFu15ll, "Sf_BFu9s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu15s  {
  ::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 Sf_BFu9s_BFu15s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu15s(Test_Sf_BFu9s_BFu15s, "Sf_BFu9s_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu16i  {
  ::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 Sf_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu16i(Test_Sf_BFu9s_BFu16i, "Sf_BFu9s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu16ll  {
  ::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 Sf_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu16ll(Test_Sf_BFu9s_BFu16ll, "Sf_BFu9s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu16s  {
  ::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 Sf_BFu9s_BFu16s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu16s(Test_Sf_BFu9s_BFu16s, "Sf_BFu9s_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu17i  {
  ::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 Sf_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu9s_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu17i(Test_Sf_BFu9s_BFu17i, "Sf_BFu9s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu17ll  {
  ::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 Sf_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "Sf_BFu9s_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu17ll(Test_Sf_BFu9s_BFu17ll, "Sf_BFu9s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu1c  {
  ::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 Sf_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu9s_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu1c(Test_Sf_BFu9s_BFu1c, "Sf_BFu9s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu1i  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu9s_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu1i(Test_Sf_BFu9s_BFu1i, "Sf_BFu9s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu1ll  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu9s_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu1ll(Test_Sf_BFu9s_BFu1ll, "Sf_BFu9s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu1s  {
  ::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 Sf_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "Sf_BFu9s_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu1s(Test_Sf_BFu9s_BFu1s, "Sf_BFu9s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu31i  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu31i(Test_Sf_BFu9s_BFu31i, "Sf_BFu9s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu31ll  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "Sf_BFu9s_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu31ll(Test_Sf_BFu9s_BFu31ll, "Sf_BFu9s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu32i  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 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");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu32i(Test_Sf_BFu9s_BFu32i, "Sf_BFu9s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu32ll  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "Sf_BFu9s_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu32ll(Test_Sf_BFu9s_BFu32ll, "Sf_BFu9s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu33  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "Sf_BFu9s_BFu33");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu33(Test_Sf_BFu9s_BFu33, "Sf_BFu9s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu7c  {
  ::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 Sf_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu7c(Test_Sf_BFu9s_BFu7c, "Sf_BFu9s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu7i  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu7i(Test_Sf_BFu9s_BFu7i, "Sf_BFu9s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu7ll  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu7ll(Test_Sf_BFu9s_BFu7ll, "Sf_BFu9s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu7s  {
  ::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 Sf_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu7s(Test_Sf_BFu9s_BFu7s, "Sf_BFu9s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu8c  {
  ::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 Sf_BFu9s_BFu8c lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu8c(Test_Sf_BFu9s_BFu8c, "Sf_BFu9s_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu8i  {
  ::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 Sf_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu8i(Test_Sf_BFu9s_BFu8i, "Sf_BFu9s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu8ll  {
  ::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 Sf_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu8ll(Test_Sf_BFu9s_BFu8ll, "Sf_BFu9s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu8s  {
  ::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 Sf_BFu9s_BFu8s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu8s(Test_Sf_BFu9s_BFu8s, "Sf_BFu9s_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu9i  {
  ::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 Sf_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu9i(Test_Sf_BFu9s_BFu9i, "Sf_BFu9s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu9ll  {
  ::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 Sf_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu9ll(Test_Sf_BFu9s_BFu9ll, "Sf_BFu9s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_BFu9s  {
  ::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 Sf_BFu9s_BFu9s lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_BFu9s(Test_Sf_BFu9s_BFu9s, "Sf_BFu9s_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_C  {
  ::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 Sf_BFu9s_C lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_C");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_C.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_C(Test_Sf_BFu9s_C, "Sf_BFu9s_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_D  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_D.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_D(Test_Sf_BFu9s_D, "Sf_BFu9s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_F  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_F.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_F(Test_Sf_BFu9s_F, "Sf_BFu9s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_I  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_I.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_I(Test_Sf_BFu9s_I, "Sf_BFu9s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Ip  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Ip(Test_Sf_BFu9s_Ip, "Sf_BFu9s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_L  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_L.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_L(Test_Sf_BFu9s_L, "Sf_BFu9s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_S  {
  ::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 Sf_BFu9s_S lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_S");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_S.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_S(Test_Sf_BFu9s_S, "Sf_BFu9s_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Sf  {
  ::empty v1;
  unsigned short v2:9;
  ::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 Sf_BFu9s_Sf lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Sf(Test_Sf_BFu9s_Sf, "Sf_BFu9s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Uc  {
  ::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 Sf_BFu9s_Uc lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Uc(Test_Sf_BFu9s_Uc, "Sf_BFu9s_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Ui  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Ui(Test_Sf_BFu9s_Ui, "Sf_BFu9s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Ul  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Ul(Test_Sf_BFu9s_Ul, "Sf_BFu9s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Us  {
  ::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 Sf_BFu9s_Us lv;
    check2(sizeof(lv), 6, "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, 2, 0, 9, 1, "Sf_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Us(Test_Sf_BFu9s_Us, "Sf_BFu9s_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_BFu9s_Vp  {
  ::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 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, 2, 0, 9, 1, "Sf_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_BFu9s_Vp(Test_Sf_BFu9s_Vp, "Sf_BFu9s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C  {
  ::empty v1;
  char v2;
};
//SIG(1 Sf_C) C1{ FC2{} Fc}



static void Test_Sf_C()
{
  {
    init_simple_test("Sf_C");
    Sf_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C)");
    check_field_offset(lv, v1, 0, "Sf_C.v1");
    check_field_offset(lv, v2, 1, "Sf_C.v2");
  }
}
static Arrange_To_Call_Me vSf_C(Test_Sf_C, "Sf_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu15i  {
  ::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 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, 1, "Sf_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_C_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu15i(Test_Sf_C_BFu15i, "Sf_C_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu15ll  {
  ::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 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, 1, "Sf_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_C_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu15ll(Test_Sf_C_BFu15ll, "Sf_C_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu15s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_C_BFu15s(Test_Sf_C_BFu15s, "Sf_C_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu16i  {
  ::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 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, 1, "Sf_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_C_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu16i(Test_Sf_C_BFu16i, "Sf_C_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu16ll  {
  ::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 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, 1, "Sf_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_C_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu16ll(Test_Sf_C_BFu16ll, "Sf_C_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu16s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_C_BFu16s(Test_Sf_C_BFu16s, "Sf_C_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu17i  {
  ::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 Sf_C_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_C_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu17i(Test_Sf_C_BFu17i, "Sf_C_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu17ll  {
  ::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 Sf_C_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_C_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu17ll(Test_Sf_C_BFu17ll, "Sf_C_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu1c  {
  ::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 Sf_C_BFu1c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_C_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_C_BFu1c(Test_Sf_C_BFu1c, "Sf_C_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu1i  {
  ::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 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, 1, "Sf_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_C_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu1i(Test_Sf_C_BFu1i, "Sf_C_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu1ll  {
  ::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 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, 1, "Sf_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_C_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu1ll(Test_Sf_C_BFu1ll, "Sf_C_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu1s  {
  ::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 Sf_C_BFu1s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_C_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_C_BFu1s(Test_Sf_C_BFu1s, "Sf_C_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu31i  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_C_BFu31i(Test_Sf_C_BFu31i, "Sf_C_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu31ll  {
  ::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 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, 1, "Sf_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_C_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu31ll(Test_Sf_C_BFu31ll, "Sf_C_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu32i  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_C_BFu32i(Test_Sf_C_BFu32i, "Sf_C_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu32ll  {
  ::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 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, 1, "Sf_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_C_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu32ll(Test_Sf_C_BFu32ll, "Sf_C_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu33  {
  ::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 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, 1, "Sf_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_C_BFu33");
  }
}
static Arrange_To_Call_Me vSf_C_BFu33(Test_Sf_C_BFu33, "Sf_C_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu7c  {
  ::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 Sf_C_BFu7c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_C_BFu7c(Test_Sf_C_BFu7c, "Sf_C_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu7i  {
  ::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 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, 1, "Sf_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu7i(Test_Sf_C_BFu7i, "Sf_C_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu7ll  {
  ::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 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, 1, "Sf_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu7ll(Test_Sf_C_BFu7ll, "Sf_C_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu7s  {
  ::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 Sf_C_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_C_BFu7s(Test_Sf_C_BFu7s, "Sf_C_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu8c  {
  ::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 Sf_C_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_C_BFu8c(Test_Sf_C_BFu8c, "Sf_C_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu8i  {
  ::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 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, 1, "Sf_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu8i(Test_Sf_C_BFu8i, "Sf_C_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu8ll  {
  ::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 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, 1, "Sf_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu8ll(Test_Sf_C_BFu8ll, "Sf_C_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu8s  {
  ::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 Sf_C_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_C_BFu8s(Test_Sf_C_BFu8s, "Sf_C_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu9i  {
  ::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 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, 1, "Sf_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_C_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_C_BFu9i(Test_Sf_C_BFu9i, "Sf_C_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu9ll  {
  ::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 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, 1, "Sf_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_C_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_C_BFu9ll(Test_Sf_C_BFu9ll, "Sf_C_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_BFu9s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_C_BFu9s(Test_Sf_C_BFu9s, "Sf_C_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_C  {
  ::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");
    Sf_C_C lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_C.v2");
    check_field_offset(lv, v3, 2, "Sf_C_C.v3");
  }
}
static Arrange_To_Call_Me vSf_C_C(Test_Sf_C_C, "Sf_C_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_D  {
  ::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");
    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, 1, "Sf_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_D.v3");
  }
}
static Arrange_To_Call_Me vSf_C_D(Test_Sf_C_D, "Sf_C_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_F  {
  ::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");
    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, 1, "Sf_C_F.v2");
    check_field_offset(lv, v3, 4, "Sf_C_F.v3");
  }
}
static Arrange_To_Call_Me vSf_C_F(Test_Sf_C_F, "Sf_C_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_I  {
  ::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");
    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, 1, "Sf_C_I.v2");
    check_field_offset(lv, v3, 4, "Sf_C_I.v3");
  }
}
static Arrange_To_Call_Me vSf_C_I(Test_Sf_C_I, "Sf_C_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Ip  {
  ::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");
    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, 1, "Sf_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Ip(Test_Sf_C_Ip, "Sf_C_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_L  {
  ::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");
    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, 1, "Sf_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_L.v3");
  }
}
static Arrange_To_Call_Me vSf_C_L(Test_Sf_C_L, "Sf_C_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_S  {
  ::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");
    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, 1, "Sf_C_S.v2");
    check_field_offset(lv, v3, 2, "Sf_C_S.v3");
  }
}
static Arrange_To_Call_Me vSf_C_S(Test_Sf_C_S, "Sf_C_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Sf  {
  ::empty v1;
  char v2;
  ::empty v3;
};
//SIG(1 Sf_C_Sf) C1{ FC2{} Fc FC2}



static void Test_Sf_C_Sf()
{
  {
    init_simple_test("Sf_C_Sf");
    Sf_C_Sf lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_Sf.v2");
    check_field_offset(lv, v3, 2, "Sf_C_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Sf(Test_Sf_C_Sf, "Sf_C_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Uc  {
  ::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");
    Sf_C_Uc lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_C_Uc.v2");
    check_field_offset(lv, v3, 2, "Sf_C_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Uc(Test_Sf_C_Uc, "Sf_C_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Ui  {
  ::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");
    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, 1, "Sf_C_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_C_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Ui(Test_Sf_C_Ui, "Sf_C_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Ul  {
  ::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");
    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, 1, "Sf_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Ul(Test_Sf_C_Ul, "Sf_C_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Us  {
  ::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");
    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, 1, "Sf_C_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_C_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Us(Test_Sf_C_Us, "Sf_C_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_C_Vp  {
  ::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");
    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, 1, "Sf_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_C_Vp(Test_Sf_C_Vp, "Sf_C_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D  {
  ::empty v1;
  double v2;
};
//SIG(1 Sf_D) C1{ FC2{} FL}



static void Test_Sf_D()
{
  {
    init_simple_test("Sf_D");
    Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, ABISELECT(8,4), "Sf_D.v2");
  }
}
static Arrange_To_Call_Me vSf_D(Test_Sf_D, "Sf_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu15i  {
  ::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 Sf_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu15i(Test_Sf_D_BFu15i, "Sf_D_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu15ll  {
  ::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 Sf_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu15ll(Test_Sf_D_BFu15ll, "Sf_D_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu15s  {
  ::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 Sf_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu15s(Test_Sf_D_BFu15s, "Sf_D_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu16i  {
  ::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 Sf_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu16i(Test_Sf_D_BFu16i, "Sf_D_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu16ll  {
  ::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 Sf_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu16ll(Test_Sf_D_BFu16ll, "Sf_D_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu16s  {
  ::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 Sf_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu16s(Test_Sf_D_BFu16s, "Sf_D_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu17i  {
  ::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 Sf_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_D_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu17i(Test_Sf_D_BFu17i, "Sf_D_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu17ll  {
  ::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 Sf_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_D_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu17ll(Test_Sf_D_BFu17ll, "Sf_D_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu1c  {
  ::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 Sf_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_D_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_D_BFu1c(Test_Sf_D_BFu1c, "Sf_D_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu1i  {
  ::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 Sf_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_D_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu1i(Test_Sf_D_BFu1i, "Sf_D_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu1ll  {
  ::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 Sf_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_D_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu1ll(Test_Sf_D_BFu1ll, "Sf_D_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu1s  {
  ::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 Sf_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_D_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu1s(Test_Sf_D_BFu1s, "Sf_D_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu31i  {
  ::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 Sf_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_D_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu31i(Test_Sf_D_BFu31i, "Sf_D_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu31ll  {
  ::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 Sf_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_D_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu31ll(Test_Sf_D_BFu31ll, "Sf_D_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu32i  {
  ::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 Sf_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_D_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu32i(Test_Sf_D_BFu32i, "Sf_D_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu32ll  {
  ::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 Sf_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_D_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu32ll(Test_Sf_D_BFu32ll, "Sf_D_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu33  {
  ::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 Sf_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Sf_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Sf_D_BFu33");
  }
}
static Arrange_To_Call_Me vSf_D_BFu33(Test_Sf_D_BFu33, "Sf_D_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu7c  {
  ::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 Sf_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_D_BFu7c(Test_Sf_D_BFu7c, "Sf_D_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu7i  {
  ::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 Sf_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu7i(Test_Sf_D_BFu7i, "Sf_D_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu7ll  {
  ::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 Sf_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu7ll(Test_Sf_D_BFu7ll, "Sf_D_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu7s  {
  ::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 Sf_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu7s(Test_Sf_D_BFu7s, "Sf_D_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu8c  {
  ::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 Sf_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_D_BFu8c(Test_Sf_D_BFu8c, "Sf_D_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu8i  {
  ::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 Sf_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu8i(Test_Sf_D_BFu8i, "Sf_D_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu8ll  {
  ::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 Sf_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu8ll(Test_Sf_D_BFu8ll, "Sf_D_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu8s  {
  ::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 Sf_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu8s(Test_Sf_D_BFu8s, "Sf_D_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu9i  {
  ::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 Sf_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_D_BFu9i(Test_Sf_D_BFu9i, "Sf_D_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu9ll  {
  ::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 Sf_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_D_BFu9ll(Test_Sf_D_BFu9ll, "Sf_D_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_BFu9s  {
  ::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 Sf_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_D_BFu9s(Test_Sf_D_BFu9s, "Sf_D_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_C  {
  ::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");
    Sf_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_C.v3");
  }
}
static Arrange_To_Call_Me vSf_D_C(Test_Sf_D_C, "Sf_D_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_D  {
  ::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");
    Sf_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_D.v3");
  }
}
static Arrange_To_Call_Me vSf_D_D(Test_Sf_D_D, "Sf_D_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_F  {
  ::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");
    Sf_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_F.v3");
  }
}
static Arrange_To_Call_Me vSf_D_F(Test_Sf_D_F, "Sf_D_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_I  {
  ::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");
    Sf_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_I.v3");
  }
}
static Arrange_To_Call_Me vSf_D_I(Test_Sf_D_I, "Sf_D_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Ip  {
  ::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");
    Sf_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Ip(Test_Sf_D_Ip, "Sf_D_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_L  {
  ::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");
    Sf_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_L.v3");
  }
}
static Arrange_To_Call_Me vSf_D_L(Test_Sf_D_L, "Sf_D_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_S  {
  ::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");
    Sf_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_S.v3");
  }
}
static Arrange_To_Call_Me vSf_D_S(Test_Sf_D_S, "Sf_D_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Sf  {
  ::empty v1;
  double v2;
  ::empty v3;
};
//SIG(1 Sf_D_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_D_Sf()
{
  {
    init_simple_test("Sf_D_Sf");
    Sf_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Sf(Test_Sf_D_Sf, "Sf_D_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Uc  {
  ::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");
    Sf_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Uc(Test_Sf_D_Uc, "Sf_D_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Ui  {
  ::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");
    Sf_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Ui(Test_Sf_D_Ui, "Sf_D_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Ul  {
  ::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");
    Sf_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Ul(Test_Sf_D_Ul, "Sf_D_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Us  {
  ::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");
    Sf_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Us(Test_Sf_D_Us, "Sf_D_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_D_Vp  {
  ::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");
    Sf_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_D_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_D_Vp(Test_Sf_D_Vp, "Sf_D_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F  {
  ::empty v1;
  float v2;
};
//SIG(1 Sf_F) C1{ FC2{} Fi}



static void Test_Sf_F()
{
  {
    init_simple_test("Sf_F");
    Sf_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F)");
    check_field_offset(lv, v1, 0, "Sf_F.v1");
    check_field_offset(lv, v2, 4, "Sf_F.v2");
  }
}
static Arrange_To_Call_Me vSf_F(Test_Sf_F, "Sf_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu15i  {
  ::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 Sf_F_BFu15i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu15i(Test_Sf_F_BFu15i, "Sf_F_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu15ll  {
  ::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 Sf_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu15ll(Test_Sf_F_BFu15ll, "Sf_F_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu15s  {
  ::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 Sf_F_BFu15s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu15s(Test_Sf_F_BFu15s, "Sf_F_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu16i  {
  ::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 Sf_F_BFu16i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu16i(Test_Sf_F_BFu16i, "Sf_F_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu16ll  {
  ::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 Sf_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu16ll(Test_Sf_F_BFu16ll, "Sf_F_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu16s  {
  ::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 Sf_F_BFu16s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu16s(Test_Sf_F_BFu16s, "Sf_F_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu17i  {
  ::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 Sf_F_BFu17i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_F_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu17i(Test_Sf_F_BFu17i, "Sf_F_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu17ll  {
  ::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 Sf_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_F_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu17ll(Test_Sf_F_BFu17ll, "Sf_F_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu1c  {
  ::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 Sf_F_BFu1c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_F_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_F_BFu1c(Test_Sf_F_BFu1c, "Sf_F_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu1i  {
  ::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 Sf_F_BFu1i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_F_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu1i(Test_Sf_F_BFu1i, "Sf_F_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu1ll  {
  ::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 Sf_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_F_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu1ll(Test_Sf_F_BFu1ll, "Sf_F_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu1s  {
  ::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 Sf_F_BFu1s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_F_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu1s(Test_Sf_F_BFu1s, "Sf_F_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu31i  {
  ::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 Sf_F_BFu31i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_F_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu31i(Test_Sf_F_BFu31i, "Sf_F_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu31ll  {
  ::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 Sf_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_F_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu31ll(Test_Sf_F_BFu31ll, "Sf_F_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu32i  {
  ::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 Sf_F_BFu32i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_F_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu32i(Test_Sf_F_BFu32i, "Sf_F_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu32ll  {
  ::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 Sf_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_F_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu32ll(Test_Sf_F_BFu32ll, "Sf_F_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu33  {
  ::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 Sf_F_BFu33 lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_F_BFu33");
  }
}
static Arrange_To_Call_Me vSf_F_BFu33(Test_Sf_F_BFu33, "Sf_F_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu7c  {
  ::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 Sf_F_BFu7c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_F_BFu7c(Test_Sf_F_BFu7c, "Sf_F_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu7i  {
  ::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 Sf_F_BFu7i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu7i(Test_Sf_F_BFu7i, "Sf_F_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu7ll  {
  ::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 Sf_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu7ll(Test_Sf_F_BFu7ll, "Sf_F_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu7s  {
  ::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 Sf_F_BFu7s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu7s(Test_Sf_F_BFu7s, "Sf_F_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu8c  {
  ::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 Sf_F_BFu8c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_F_BFu8c(Test_Sf_F_BFu8c, "Sf_F_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu8i  {
  ::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 Sf_F_BFu8i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu8i(Test_Sf_F_BFu8i, "Sf_F_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu8ll  {
  ::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 Sf_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu8ll(Test_Sf_F_BFu8ll, "Sf_F_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu8s  {
  ::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 Sf_F_BFu8s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu8s(Test_Sf_F_BFu8s, "Sf_F_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu9i  {
  ::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 Sf_F_BFu9i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_F_BFu9i(Test_Sf_F_BFu9i, "Sf_F_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu9ll  {
  ::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 Sf_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_F_BFu9ll(Test_Sf_F_BFu9ll, "Sf_F_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_BFu9s  {
  ::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 Sf_F_BFu9s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_F_BFu9s(Test_Sf_F_BFu9s, "Sf_F_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_C  {
  ::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");
    Sf_F_C lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_C.v2");
    check_field_offset(lv, v3, 8, "Sf_F_C.v3");
  }
}
static Arrange_To_Call_Me vSf_F_C(Test_Sf_F_C, "Sf_F_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_D  {
  ::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");
    Sf_F_D lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_F_D.v2");
    check_field_offset(lv, v3, 8, "Sf_F_D.v3");
  }
}
static Arrange_To_Call_Me vSf_F_D(Test_Sf_F_D, "Sf_F_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_F  {
  ::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");
    Sf_F_F lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_F.v2");
    check_field_offset(lv, v3, 8, "Sf_F_F.v3");
  }
}
static Arrange_To_Call_Me vSf_F_F(Test_Sf_F_F, "Sf_F_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_I  {
  ::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");
    Sf_F_I lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_I.v2");
    check_field_offset(lv, v3, 8, "Sf_F_I.v3");
  }
}
static Arrange_To_Call_Me vSf_F_I(Test_Sf_F_I, "Sf_F_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Ip  {
  ::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");
    Sf_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Ip(Test_Sf_F_Ip, "Sf_F_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_L  {
  ::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");
    Sf_F_L lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_F_L.v2");
    check_field_offset(lv, v3, 8, "Sf_F_L.v3");
  }
}
static Arrange_To_Call_Me vSf_F_L(Test_Sf_F_L, "Sf_F_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_S  {
  ::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");
    Sf_F_S lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_S.v2");
    check_field_offset(lv, v3, 8, "Sf_F_S.v3");
  }
}
static Arrange_To_Call_Me vSf_F_S(Test_Sf_F_S, "Sf_F_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Sf  {
  ::empty v1;
  float v2;
  ::empty v3;
};
//SIG(1 Sf_F_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_F_Sf()
{
  {
    init_simple_test("Sf_F_Sf");
    Sf_F_Sf lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Sf(Test_Sf_F_Sf, "Sf_F_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Uc  {
  ::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");
    Sf_F_Uc lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Uc(Test_Sf_F_Uc, "Sf_F_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Ui  {
  ::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");
    Sf_F_Ui lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Ui(Test_Sf_F_Ui, "Sf_F_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Ul  {
  ::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");
    Sf_F_Ul lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_F_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Ul(Test_Sf_F_Ul, "Sf_F_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Us  {
  ::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");
    Sf_F_Us lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_F_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Us(Test_Sf_F_Us, "Sf_F_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_F_Vp  {
  ::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");
    Sf_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_F_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_F_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_F_Vp(Test_Sf_F_Vp, "Sf_F_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I  {
  ::empty v1;
  int v2;
};
//SIG(1 Sf_I) C1{ FC2{} Fi}



static void Test_Sf_I()
{
  {
    init_simple_test("Sf_I");
    Sf_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I)");
    check_field_offset(lv, v1, 0, "Sf_I.v1");
    check_field_offset(lv, v2, 4, "Sf_I.v2");
  }
}
static Arrange_To_Call_Me vSf_I(Test_Sf_I, "Sf_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu15i  {
  ::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 Sf_I_BFu15i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu15i(Test_Sf_I_BFu15i, "Sf_I_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu15ll  {
  ::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 Sf_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu15ll(Test_Sf_I_BFu15ll, "Sf_I_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu15s  {
  ::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 Sf_I_BFu15s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu15s(Test_Sf_I_BFu15s, "Sf_I_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu16i  {
  ::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 Sf_I_BFu16i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu16i(Test_Sf_I_BFu16i, "Sf_I_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu16ll  {
  ::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 Sf_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu16ll(Test_Sf_I_BFu16ll, "Sf_I_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu16s  {
  ::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 Sf_I_BFu16s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu16s(Test_Sf_I_BFu16s, "Sf_I_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu17i  {
  ::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 Sf_I_BFu17i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_I_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu17i(Test_Sf_I_BFu17i, "Sf_I_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu17ll  {
  ::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 Sf_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_I_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu17ll(Test_Sf_I_BFu17ll, "Sf_I_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu1c  {
  ::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 Sf_I_BFu1c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_I_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_I_BFu1c(Test_Sf_I_BFu1c, "Sf_I_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu1i  {
  ::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 Sf_I_BFu1i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_I_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu1i(Test_Sf_I_BFu1i, "Sf_I_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu1ll  {
  ::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 Sf_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_I_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu1ll(Test_Sf_I_BFu1ll, "Sf_I_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu1s  {
  ::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 Sf_I_BFu1s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_I_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu1s(Test_Sf_I_BFu1s, "Sf_I_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu31i  {
  ::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 Sf_I_BFu31i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_I_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu31i(Test_Sf_I_BFu31i, "Sf_I_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu31ll  {
  ::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 Sf_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_I_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu31ll(Test_Sf_I_BFu31ll, "Sf_I_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu32i  {
  ::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 Sf_I_BFu32i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_I_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu32i(Test_Sf_I_BFu32i, "Sf_I_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu32ll  {
  ::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 Sf_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_I_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu32ll(Test_Sf_I_BFu32ll, "Sf_I_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu33  {
  ::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 Sf_I_BFu33 lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_I_BFu33");
  }
}
static Arrange_To_Call_Me vSf_I_BFu33(Test_Sf_I_BFu33, "Sf_I_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu7c  {
  ::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 Sf_I_BFu7c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_I_BFu7c(Test_Sf_I_BFu7c, "Sf_I_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu7i  {
  ::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 Sf_I_BFu7i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu7i(Test_Sf_I_BFu7i, "Sf_I_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu7ll  {
  ::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 Sf_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu7ll(Test_Sf_I_BFu7ll, "Sf_I_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu7s  {
  ::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 Sf_I_BFu7s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu7s(Test_Sf_I_BFu7s, "Sf_I_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu8c  {
  ::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 Sf_I_BFu8c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_I_BFu8c(Test_Sf_I_BFu8c, "Sf_I_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu8i  {
  ::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 Sf_I_BFu8i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu8i(Test_Sf_I_BFu8i, "Sf_I_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu8ll  {
  ::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 Sf_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu8ll(Test_Sf_I_BFu8ll, "Sf_I_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu8s  {
  ::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 Sf_I_BFu8s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu8s(Test_Sf_I_BFu8s, "Sf_I_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu9i  {
  ::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 Sf_I_BFu9i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_I_BFu9i(Test_Sf_I_BFu9i, "Sf_I_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu9ll  {
  ::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 Sf_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_I_BFu9ll(Test_Sf_I_BFu9ll, "Sf_I_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_BFu9s  {
  ::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 Sf_I_BFu9s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_I_BFu9s(Test_Sf_I_BFu9s, "Sf_I_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_C  {
  ::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");
    Sf_I_C lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_C.v2");
    check_field_offset(lv, v3, 8, "Sf_I_C.v3");
  }
}
static Arrange_To_Call_Me vSf_I_C(Test_Sf_I_C, "Sf_I_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_D  {
  ::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");
    Sf_I_D lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_I_D.v2");
    check_field_offset(lv, v3, 8, "Sf_I_D.v3");
  }
}
static Arrange_To_Call_Me vSf_I_D(Test_Sf_I_D, "Sf_I_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_F  {
  ::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");
    Sf_I_F lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_F.v2");
    check_field_offset(lv, v3, 8, "Sf_I_F.v3");
  }
}
static Arrange_To_Call_Me vSf_I_F(Test_Sf_I_F, "Sf_I_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_I  {
  ::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");
    Sf_I_I lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_I.v2");
    check_field_offset(lv, v3, 8, "Sf_I_I.v3");
  }
}
static Arrange_To_Call_Me vSf_I_I(Test_Sf_I_I, "Sf_I_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Ip  {
  ::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");
    Sf_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Ip(Test_Sf_I_Ip, "Sf_I_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_L  {
  ::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");
    Sf_I_L lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_I_L.v2");
    check_field_offset(lv, v3, 8, "Sf_I_L.v3");
  }
}
static Arrange_To_Call_Me vSf_I_L(Test_Sf_I_L, "Sf_I_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_S  {
  ::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");
    Sf_I_S lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_S.v2");
    check_field_offset(lv, v3, 8, "Sf_I_S.v3");
  }
}
static Arrange_To_Call_Me vSf_I_S(Test_Sf_I_S, "Sf_I_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Sf  {
  ::empty v1;
  int v2;
  ::empty v3;
};
//SIG(1 Sf_I_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_I_Sf()
{
  {
    init_simple_test("Sf_I_Sf");
    Sf_I_Sf lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Sf(Test_Sf_I_Sf, "Sf_I_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Uc  {
  ::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");
    Sf_I_Uc lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Uc(Test_Sf_I_Uc, "Sf_I_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Ui  {
  ::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");
    Sf_I_Ui lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Ui(Test_Sf_I_Ui, "Sf_I_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Ul  {
  ::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");
    Sf_I_Ul lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_I_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Ul(Test_Sf_I_Ul, "Sf_I_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Us  {
  ::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");
    Sf_I_Us lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_I_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Us(Test_Sf_I_Us, "Sf_I_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_I_Vp  {
  ::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");
    Sf_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_I_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_I_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_I_Vp(Test_Sf_I_Vp, "Sf_I_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip  {
  ::empty v1;
  int *v2;
};
//SIG(1 Sf_Ip) C1{ FC2{} Fp}



static void Test_Sf_Ip()
{
  {
    init_simple_test("Sf_Ip");
    Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "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, ABISELECT(8,4), "Sf_Ip.v2");
  }
}
static Arrange_To_Call_Me vSf_Ip(Test_Sf_Ip, "Sf_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu15i  {
  ::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 Sf_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu15i(Test_Sf_Ip_BFu15i, "Sf_Ip_BFu15i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu15ll  {
  ::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 Sf_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu15ll(Test_Sf_Ip_BFu15ll, "Sf_Ip_BFu15ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu15s  {
  ::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 Sf_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu15s(Test_Sf_Ip_BFu15s, "Sf_Ip_BFu15s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu16i  {
  ::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 Sf_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu16i(Test_Sf_Ip_BFu16i, "Sf_Ip_BFu16i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu16ll  {
  ::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 Sf_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu16ll(Test_Sf_Ip_BFu16ll, "Sf_Ip_BFu16ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu16s  {
  ::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 Sf_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu16s(Test_Sf_Ip_BFu16s, "Sf_Ip_BFu16s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu17i  {
  ::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 Sf_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Sf_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Sf_Ip_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu17i(Test_Sf_Ip_BFu17i, "Sf_Ip_BFu17i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu17ll  {
  ::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 Sf_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Sf_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Sf_Ip_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu17ll(Test_Sf_Ip_BFu17ll, "Sf_Ip_BFu17ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu1c  {
  ::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 Sf_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Ip_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu1c(Test_Sf_Ip_BFu1c, "Sf_Ip_BFu1c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu1i  {
  ::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 Sf_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Ip_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu1i(Test_Sf_Ip_BFu1i, "Sf_Ip_BFu1i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu1ll  {
  ::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 Sf_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Ip_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu1ll(Test_Sf_Ip_BFu1ll, "Sf_Ip_BFu1ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu1s  {
  ::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 Sf_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Ip_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu1s(Test_Sf_Ip_BFu1s, "Sf_Ip_BFu1s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu31i  {
  ::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 Sf_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Sf_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Sf_Ip_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu31i(Test_Sf_Ip_BFu31i, "Sf_Ip_BFu31i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu31ll  {
  ::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 Sf_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Sf_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Sf_Ip_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu31ll(Test_Sf_Ip_BFu31ll, "Sf_Ip_BFu31ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu32i  {
  ::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 Sf_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Sf_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Sf_Ip_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu32i(Test_Sf_Ip_BFu32i, "Sf_Ip_BFu32i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu32ll  {
  ::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 Sf_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Sf_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Sf_Ip_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu32ll(Test_Sf_Ip_BFu32ll, "Sf_Ip_BFu32ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu33  {
  ::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 Sf_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Sf_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Sf_Ip_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu33(Test_Sf_Ip_BFu33, "Sf_Ip_BFu33", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu7c  {
  ::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 Sf_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu7c(Test_Sf_Ip_BFu7c, "Sf_Ip_BFu7c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu7i  {
  ::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 Sf_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu7i(Test_Sf_Ip_BFu7i, "Sf_Ip_BFu7i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu7ll  {
  ::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 Sf_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu7ll(Test_Sf_Ip_BFu7ll, "Sf_Ip_BFu7ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu7s  {
  ::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 Sf_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu7s(Test_Sf_Ip_BFu7s, "Sf_Ip_BFu7s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu8c  {
  ::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 Sf_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu8c(Test_Sf_Ip_BFu8c, "Sf_Ip_BFu8c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu8i  {
  ::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 Sf_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu8i(Test_Sf_Ip_BFu8i, "Sf_Ip_BFu8i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu8ll  {
  ::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 Sf_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu8ll(Test_Sf_Ip_BFu8ll, "Sf_Ip_BFu8ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu8s  {
  ::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 Sf_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu8s(Test_Sf_Ip_BFu8s, "Sf_Ip_BFu8s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu9i  {
  ::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 Sf_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu9i(Test_Sf_Ip_BFu9i, "Sf_Ip_BFu9i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu9ll  {
  ::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 Sf_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu9ll(Test_Sf_Ip_BFu9ll, "Sf_Ip_BFu9ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_BFu9s  {
  ::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 Sf_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Ip_BFu9s(Test_Sf_Ip_BFu9s, "Sf_Ip_BFu9s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_C  {
  ::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");
    Sf_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_C(Test_Sf_Ip_C, "Sf_Ip_C", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_D  {
  ::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");
    Sf_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_D(Test_Sf_Ip_D, "Sf_Ip_D", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_F  {
  ::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");
    Sf_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_F(Test_Sf_Ip_F, "Sf_Ip_F", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_I  {
  ::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");
    Sf_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_I(Test_Sf_Ip_I, "Sf_Ip_I", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Ip  {
  ::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");
    Sf_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Ip(Test_Sf_Ip_Ip, "Sf_Ip_Ip", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_L  {
  ::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");
    Sf_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_L(Test_Sf_Ip_L, "Sf_Ip_L", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_S  {
  ::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");
    Sf_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_S(Test_Sf_Ip_S, "Sf_Ip_S", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Sf  {
  ::empty v1;
  int *v2;
  ::empty v3;
};
//SIG(1 Sf_Ip_Sf) C1{ FC2{} Fp FC2}



static void Test_Sf_Ip_Sf()
{
  {
    init_simple_test("Sf_Ip_Sf");
    Sf_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Sf(Test_Sf_Ip_Sf, "Sf_Ip_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Uc  {
  ::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");
    Sf_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Uc(Test_Sf_Ip_Uc, "Sf_Ip_Uc", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Ui  {
  ::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");
    Sf_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Ui(Test_Sf_Ip_Ui, "Sf_Ip_Ui", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Ul  {
  ::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");
    Sf_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Ul(Test_Sf_Ip_Ul, "Sf_Ip_Ul", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Us  {
  ::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");
    Sf_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Us(Test_Sf_Ip_Us, "Sf_Ip_Us", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ip_Vp  {
  ::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");
    Sf_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Ip_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Ip_Vp(Test_Sf_Ip_Vp, "Sf_Ip_Vp", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L  {
  ::empty v1;
  __tsi64 v2;
};
//SIG(1 Sf_L) C1{ FC2{} FL}



static void Test_Sf_L()
{
  {
    init_simple_test("Sf_L");
    Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, ABISELECT(8,4), "Sf_L.v2");
  }
}
static Arrange_To_Call_Me vSf_L(Test_Sf_L, "Sf_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu15i  {
  ::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 Sf_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu15i(Test_Sf_L_BFu15i, "Sf_L_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu15ll  {
  ::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 Sf_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu15ll(Test_Sf_L_BFu15ll, "Sf_L_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu15s  {
  ::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 Sf_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu15s(Test_Sf_L_BFu15s, "Sf_L_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu16i  {
  ::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 Sf_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu16i(Test_Sf_L_BFu16i, "Sf_L_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu16ll  {
  ::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 Sf_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu16ll(Test_Sf_L_BFu16ll, "Sf_L_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu16s  {
  ::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 Sf_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu16s(Test_Sf_L_BFu16s, "Sf_L_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu17i  {
  ::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 Sf_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_L_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu17i(Test_Sf_L_BFu17i, "Sf_L_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu17ll  {
  ::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 Sf_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_L_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu17ll(Test_Sf_L_BFu17ll, "Sf_L_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu1c  {
  ::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 Sf_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_L_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_L_BFu1c(Test_Sf_L_BFu1c, "Sf_L_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu1i  {
  ::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 Sf_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_L_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu1i(Test_Sf_L_BFu1i, "Sf_L_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu1ll  {
  ::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 Sf_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_L_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu1ll(Test_Sf_L_BFu1ll, "Sf_L_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu1s  {
  ::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 Sf_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_L_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu1s(Test_Sf_L_BFu1s, "Sf_L_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu31i  {
  ::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 Sf_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_L_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu31i(Test_Sf_L_BFu31i, "Sf_L_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu31ll  {
  ::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 Sf_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_L_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu31ll(Test_Sf_L_BFu31ll, "Sf_L_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu32i  {
  ::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 Sf_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_L_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu32i(Test_Sf_L_BFu32i, "Sf_L_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu32ll  {
  ::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 Sf_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_L_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu32ll(Test_Sf_L_BFu32ll, "Sf_L_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu33  {
  ::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 Sf_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Sf_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Sf_L_BFu33");
  }
}
static Arrange_To_Call_Me vSf_L_BFu33(Test_Sf_L_BFu33, "Sf_L_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu7c  {
  ::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 Sf_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_L_BFu7c(Test_Sf_L_BFu7c, "Sf_L_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu7i  {
  ::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 Sf_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu7i(Test_Sf_L_BFu7i, "Sf_L_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu7ll  {
  ::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 Sf_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu7ll(Test_Sf_L_BFu7ll, "Sf_L_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu7s  {
  ::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 Sf_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu7s(Test_Sf_L_BFu7s, "Sf_L_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu8c  {
  ::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 Sf_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_L_BFu8c(Test_Sf_L_BFu8c, "Sf_L_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu8i  {
  ::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 Sf_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu8i(Test_Sf_L_BFu8i, "Sf_L_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu8ll  {
  ::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 Sf_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu8ll(Test_Sf_L_BFu8ll, "Sf_L_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu8s  {
  ::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 Sf_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu8s(Test_Sf_L_BFu8s, "Sf_L_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu9i  {
  ::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 Sf_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_L_BFu9i(Test_Sf_L_BFu9i, "Sf_L_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu9ll  {
  ::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 Sf_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_L_BFu9ll(Test_Sf_L_BFu9ll, "Sf_L_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_BFu9s  {
  ::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 Sf_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_L_BFu9s(Test_Sf_L_BFu9s, "Sf_L_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_C  {
  ::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");
    Sf_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_C.v3");
  }
}
static Arrange_To_Call_Me vSf_L_C(Test_Sf_L_C, "Sf_L_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_D  {
  ::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");
    Sf_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_D.v3");
  }
}
static Arrange_To_Call_Me vSf_L_D(Test_Sf_L_D, "Sf_L_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_F  {
  ::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");
    Sf_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_F.v3");
  }
}
static Arrange_To_Call_Me vSf_L_F(Test_Sf_L_F, "Sf_L_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_I  {
  ::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");
    Sf_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_I.v3");
  }
}
static Arrange_To_Call_Me vSf_L_I(Test_Sf_L_I, "Sf_L_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Ip  {
  ::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");
    Sf_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Ip(Test_Sf_L_Ip, "Sf_L_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_L  {
  ::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");
    Sf_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_L.v3");
  }
}
static Arrange_To_Call_Me vSf_L_L(Test_Sf_L_L, "Sf_L_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_S  {
  ::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");
    Sf_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_S.v3");
  }
}
static Arrange_To_Call_Me vSf_L_S(Test_Sf_L_S, "Sf_L_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Sf  {
  ::empty v1;
  __tsi64 v2;
  ::empty v3;
};
//SIG(1 Sf_L_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_L_Sf()
{
  {
    init_simple_test("Sf_L_Sf");
    Sf_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Sf(Test_Sf_L_Sf, "Sf_L_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Uc  {
  ::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");
    Sf_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Uc(Test_Sf_L_Uc, "Sf_L_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Ui  {
  ::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");
    Sf_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Ui(Test_Sf_L_Ui, "Sf_L_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Ul  {
  ::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");
    Sf_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Ul(Test_Sf_L_Ul, "Sf_L_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Us  {
  ::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");
    Sf_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Us(Test_Sf_L_Us, "Sf_L_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_L_Vp  {
  ::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");
    Sf_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_L_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_L_Vp(Test_Sf_L_Vp, "Sf_L_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S  {
  ::empty v1;
  short v2;
};
//SIG(1 Sf_S) C1{ FC2{} Fs}



static void Test_Sf_S()
{
  {
    init_simple_test("Sf_S");
    Sf_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S)");
    check_field_offset(lv, v1, 0, "Sf_S.v1");
    check_field_offset(lv, v2, 2, "Sf_S.v2");
  }
}
static Arrange_To_Call_Me vSf_S(Test_Sf_S, "Sf_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu15i  {
  ::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 Sf_S_BFu15i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu15i(Test_Sf_S_BFu15i, "Sf_S_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu15ll  {
  ::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 Sf_S_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu15ll(Test_Sf_S_BFu15ll, "Sf_S_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu15s  {
  ::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 Sf_S_BFu15s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu15s(Test_Sf_S_BFu15s, "Sf_S_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu16i  {
  ::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 Sf_S_BFu16i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu16i(Test_Sf_S_BFu16i, "Sf_S_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu16ll  {
  ::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 Sf_S_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu16ll(Test_Sf_S_BFu16ll, "Sf_S_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu16s  {
  ::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 Sf_S_BFu16s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu16s(Test_Sf_S_BFu16s, "Sf_S_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu17i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_S_BFu17i(Test_Sf_S_BFu17i, "Sf_S_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu17ll  {
  ::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 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, 2, "Sf_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_S_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu17ll(Test_Sf_S_BFu17ll, "Sf_S_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu1c  {
  ::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 Sf_S_BFu1c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_S_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_S_BFu1c(Test_Sf_S_BFu1c, "Sf_S_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu1i  {
  ::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 Sf_S_BFu1i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_S_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu1i(Test_Sf_S_BFu1i, "Sf_S_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu1ll  {
  ::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 Sf_S_BFu1ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_S_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu1ll(Test_Sf_S_BFu1ll, "Sf_S_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu1s  {
  ::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 Sf_S_BFu1s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_S_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu1s(Test_Sf_S_BFu1s, "Sf_S_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu31i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_S_BFu31i(Test_Sf_S_BFu31i, "Sf_S_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu31ll  {
  ::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 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, 2, "Sf_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_S_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu31ll(Test_Sf_S_BFu31ll, "Sf_S_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu32i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_S_BFu32i(Test_Sf_S_BFu32i, "Sf_S_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu32ll  {
  ::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 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, 2, "Sf_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_S_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu32ll(Test_Sf_S_BFu32ll, "Sf_S_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu33  {
  ::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 Sf_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 2, "Sf_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_S_BFu33");
  }
}
static Arrange_To_Call_Me vSf_S_BFu33(Test_Sf_S_BFu33, "Sf_S_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu7c  {
  ::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 Sf_S_BFu7c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_S_BFu7c(Test_Sf_S_BFu7c, "Sf_S_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu7i  {
  ::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 Sf_S_BFu7i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu7i(Test_Sf_S_BFu7i, "Sf_S_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu7ll  {
  ::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 Sf_S_BFu7ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu7ll(Test_Sf_S_BFu7ll, "Sf_S_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu7s  {
  ::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 Sf_S_BFu7s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu7s(Test_Sf_S_BFu7s, "Sf_S_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu8c  {
  ::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 Sf_S_BFu8c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_S_BFu8c(Test_Sf_S_BFu8c, "Sf_S_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu8i  {
  ::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 Sf_S_BFu8i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu8i(Test_Sf_S_BFu8i, "Sf_S_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu8ll  {
  ::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 Sf_S_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu8ll(Test_Sf_S_BFu8ll, "Sf_S_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu8s  {
  ::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 Sf_S_BFu8s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu8s(Test_Sf_S_BFu8s, "Sf_S_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu9i  {
  ::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 Sf_S_BFu9i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_S_BFu9i(Test_Sf_S_BFu9i, "Sf_S_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu9ll  {
  ::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 Sf_S_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_S_BFu9ll(Test_Sf_S_BFu9ll, "Sf_S_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_BFu9s  {
  ::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 Sf_S_BFu9s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_S_BFu9s(Test_Sf_S_BFu9s, "Sf_S_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_C  {
  ::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");
    Sf_S_C lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_C.v2");
    check_field_offset(lv, v3, 4, "Sf_S_C.v3");
  }
}
static Arrange_To_Call_Me vSf_S_C(Test_Sf_S_C, "Sf_S_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_D  {
  ::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");
    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, 2, "Sf_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_D.v3");
  }
}
static Arrange_To_Call_Me vSf_S_D(Test_Sf_S_D, "Sf_S_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_F  {
  ::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");
    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, 2, "Sf_S_F.v2");
    check_field_offset(lv, v3, 4, "Sf_S_F.v3");
  }
}
static Arrange_To_Call_Me vSf_S_F(Test_Sf_S_F, "Sf_S_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_I  {
  ::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");
    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, 2, "Sf_S_I.v2");
    check_field_offset(lv, v3, 4, "Sf_S_I.v3");
  }
}
static Arrange_To_Call_Me vSf_S_I(Test_Sf_S_I, "Sf_S_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Ip  {
  ::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");
    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, 2, "Sf_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Ip(Test_Sf_S_Ip, "Sf_S_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_L  {
  ::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");
    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, 2, "Sf_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_L.v3");
  }
}
static Arrange_To_Call_Me vSf_S_L(Test_Sf_S_L, "Sf_S_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_S  {
  ::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");
    Sf_S_S lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_S.v2");
    check_field_offset(lv, v3, 4, "Sf_S_S.v3");
  }
}
static Arrange_To_Call_Me vSf_S_S(Test_Sf_S_S, "Sf_S_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Sf  {
  ::empty v1;
  short v2;
  ::empty v3;
};
//SIG(1 Sf_S_Sf) C1{ FC2{} Fs FC2}



static void Test_Sf_S_Sf()
{
  {
    init_simple_test("Sf_S_Sf");
    Sf_S_Sf lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_Sf.v2");
    check_field_offset(lv, v3, 4, "Sf_S_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Sf(Test_Sf_S_Sf, "Sf_S_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Uc  {
  ::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");
    Sf_S_Uc lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_Uc.v2");
    check_field_offset(lv, v3, 4, "Sf_S_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Uc(Test_Sf_S_Uc, "Sf_S_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Ui  {
  ::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");
    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, 2, "Sf_S_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_S_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Ui(Test_Sf_S_Ui, "Sf_S_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Ul  {
  ::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");
    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, 2, "Sf_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Ul(Test_Sf_S_Ul, "Sf_S_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Us  {
  ::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");
    Sf_S_Us lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_S_Us.v2");
    check_field_offset(lv, v3, 4, "Sf_S_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Us(Test_Sf_S_Us, "Sf_S_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_S_Vp  {
  ::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");
    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, 2, "Sf_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_S_Vp(Test_Sf_S_Vp, "Sf_S_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf  {
  ::empty v1;
  ::empty v2;
};
//SIG(1 Sf_Sf) C1{ FC2{} FC2}



static void Test_Sf_Sf()
{
  {
    init_simple_test("Sf_Sf");
    Sf_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Sf.v1");
    check_field_offset(lv, v2, 1, "Sf_Sf.v2");
  }
}
static Arrange_To_Call_Me vSf_Sf(Test_Sf_Sf, "Sf_Sf", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu15i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Sf_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu15i(Test_Sf_Sf_BFu15i, "Sf_Sf_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu15ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu15ll(Test_Sf_Sf_BFu15ll, "Sf_Sf_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu15s  {
  ::empty v1;
  ::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 Sf_Sf_BFu15s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Sf_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu15s(Test_Sf_Sf_BFu15s, "Sf_Sf_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu16i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Sf_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu16i(Test_Sf_Sf_BFu16i, "Sf_Sf_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu16ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu16ll(Test_Sf_Sf_BFu16ll, "Sf_Sf_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu16s  {
  ::empty v1;
  ::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 Sf_Sf_BFu16s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Sf_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu16s(Test_Sf_Sf_BFu16s, "Sf_Sf_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu17i  {
  ::empty v1;
  ::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 Sf_Sf_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Sf_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu17i(Test_Sf_Sf_BFu17i, "Sf_Sf_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu17ll  {
  ::empty v1;
  ::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 Sf_Sf_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu17ll(Test_Sf_Sf_BFu17ll, "Sf_Sf_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu1c  {
  ::empty v1;
  ::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 Sf_Sf_BFu1c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu1c(Test_Sf_Sf_BFu1c, "Sf_Sf_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu1i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu1i(Test_Sf_Sf_BFu1i, "Sf_Sf_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu1ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu1ll(Test_Sf_Sf_BFu1ll, "Sf_Sf_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu1s  {
  ::empty v1;
  ::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 Sf_Sf_BFu1s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu1s(Test_Sf_Sf_BFu1s, "Sf_Sf_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu31i  {
  ::empty v1;
  ::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 Sf_Sf_BFu31i lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Sf_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Sf_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu31i(Test_Sf_Sf_BFu31i, "Sf_Sf_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu31ll  {
  ::empty v1;
  ::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 Sf_Sf_BFu31ll lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu31ll(Test_Sf_Sf_BFu31ll, "Sf_Sf_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu32i  {
  ::empty v1;
  ::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 Sf_Sf_BFu32i lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Sf_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Sf_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu32i(Test_Sf_Sf_BFu32i, "Sf_Sf_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu32ll  {
  ::empty v1;
  ::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 Sf_Sf_BFu32ll lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu32ll(Test_Sf_Sf_BFu32ll, "Sf_Sf_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu33  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_Sf_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu33(Test_Sf_Sf_BFu33, "Sf_Sf_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu7c  {
  ::empty v1;
  ::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 Sf_Sf_BFu7c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Sf_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu7c(Test_Sf_Sf_BFu7c, "Sf_Sf_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu7i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Sf_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu7i(Test_Sf_Sf_BFu7i, "Sf_Sf_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu7ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu7ll(Test_Sf_Sf_BFu7ll, "Sf_Sf_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu7s  {
  ::empty v1;
  ::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 Sf_Sf_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Sf_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu7s(Test_Sf_Sf_BFu7s, "Sf_Sf_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu8c  {
  ::empty v1;
  ::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 Sf_Sf_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Sf_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu8c(Test_Sf_Sf_BFu8c, "Sf_Sf_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu8i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Sf_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu8i(Test_Sf_Sf_BFu8i, "Sf_Sf_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu8ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu8ll(Test_Sf_Sf_BFu8ll, "Sf_Sf_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu8s  {
  ::empty v1;
  ::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 Sf_Sf_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Sf_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu8s(Test_Sf_Sf_BFu8s, "Sf_Sf_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu9i  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Sf_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu9i(Test_Sf_Sf_BFu9i, "Sf_Sf_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu9ll  {
  ::empty v1;
  ::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 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, 1, "Sf_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu9ll(Test_Sf_Sf_BFu9ll, "Sf_Sf_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_BFu9s  {
  ::empty v1;
  ::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 Sf_Sf_BFu9s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Sf_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Sf_BFu9s(Test_Sf_Sf_BFu9s, "Sf_Sf_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_C  {
  ::empty v1;
  ::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");
    Sf_Sf_C lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_C.v2");
    check_field_offset(lv, v3, 2, "Sf_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_C(Test_Sf_Sf_C, "Sf_Sf_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_D  {
  ::empty v1;
  ::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");
    Sf_Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, "Sf_Sf_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Sf_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_D(Test_Sf_Sf_D, "Sf_Sf_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_F  {
  ::empty v1;
  ::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");
    Sf_Sf_F lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Sf_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_F(Test_Sf_Sf_F, "Sf_Sf_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_I  {
  ::empty v1;
  ::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");
    Sf_Sf_I lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Sf_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_I(Test_Sf_Sf_I, "Sf_Sf_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Ip  {
  ::empty v1;
  ::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");
    Sf_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "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, 1, "Sf_Sf_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Sf_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Ip(Test_Sf_Sf_Ip, "Sf_Sf_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_L  {
  ::empty v1;
  ::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");
    Sf_Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, "Sf_Sf_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Sf_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_L(Test_Sf_Sf_L, "Sf_Sf_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_S  {
  ::empty v1;
  ::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");
    Sf_Sf_S lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_S.v2");
    check_field_offset(lv, v3, 2, "Sf_Sf_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_S(Test_Sf_Sf_S, "Sf_Sf_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Sf  {
  ::empty v1;
  ::empty v2;
  ::empty v3;
};
//SIG(1 Sf_Sf_Sf) C1{ FC2{} FC2 FC2}



static void Test_Sf_Sf_Sf()
{
  {
    init_simple_test("Sf_Sf_Sf");
    Sf_Sf_Sf lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_Sf.v2");
    check_field_offset(lv, v3, 2, "Sf_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Sf(Test_Sf_Sf_Sf, "Sf_Sf_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Uc  {
  ::empty v1;
  ::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");
    Sf_Sf_Uc lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Sf_Uc.v2");
    check_field_offset(lv, v3, 2, "Sf_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Uc(Test_Sf_Sf_Uc, "Sf_Sf_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Ui  {
  ::empty v1;
  ::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");
    Sf_Sf_Ui lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Sf_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Sf_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Ui(Test_Sf_Sf_Ui, "Sf_Sf_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Ul  {
  ::empty v1;
  ::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");
    Sf_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 1, "Sf_Sf_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Sf_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Ul(Test_Sf_Sf_Ul, "Sf_Sf_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Us  {
  ::empty v1;
  ::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");
    Sf_Sf_Us lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Sf_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_Sf_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Us(Test_Sf_Sf_Us, "Sf_Sf_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Sf_Vp  {
  ::empty v1;
  ::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");
    Sf_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "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, 1, "Sf_Sf_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Sf_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Sf_Vp(Test_Sf_Sf_Vp, "Sf_Sf_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc  {
  ::empty v1;
  unsigned char v2;
};
//SIG(1 Sf_Uc) C1{ FC2{} Fc}



static void Test_Sf_Uc()
{
  {
    init_simple_test("Sf_Uc");
    Sf_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Uc.v1");
    check_field_offset(lv, v2, 1, "Sf_Uc.v2");
  }
}
static Arrange_To_Call_Me vSf_Uc(Test_Sf_Uc, "Sf_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu15i  {
  ::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 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, 1, "Sf_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Uc_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu15i(Test_Sf_Uc_BFu15i, "Sf_Uc_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu15ll  {
  ::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 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, 1, "Sf_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Uc_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu15ll(Test_Sf_Uc_BFu15ll, "Sf_Uc_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu15s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu15s(Test_Sf_Uc_BFu15s, "Sf_Uc_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu16i  {
  ::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 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, 1, "Sf_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Uc_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu16i(Test_Sf_Uc_BFu16i, "Sf_Uc_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu16ll  {
  ::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 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, 1, "Sf_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Uc_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu16ll(Test_Sf_Uc_BFu16ll, "Sf_Uc_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu16s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu16s(Test_Sf_Uc_BFu16s, "Sf_Uc_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu17i  {
  ::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 Sf_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Uc_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu17i(Test_Sf_Uc_BFu17i, "Sf_Uc_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu17ll  {
  ::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 Sf_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 1, "Sf_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_Uc_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu17ll(Test_Sf_Uc_BFu17ll, "Sf_Uc_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu1c  {
  ::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 Sf_Uc_BFu1c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Uc_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu1c(Test_Sf_Uc_BFu1c, "Sf_Uc_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu1i  {
  ::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 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, 1, "Sf_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Uc_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu1i(Test_Sf_Uc_BFu1i, "Sf_Uc_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu1ll  {
  ::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 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, 1, "Sf_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Uc_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu1ll(Test_Sf_Uc_BFu1ll, "Sf_Uc_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu1s  {
  ::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 Sf_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Uc_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu1s(Test_Sf_Uc_BFu1s, "Sf_Uc_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu31i  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu31i(Test_Sf_Uc_BFu31i, "Sf_Uc_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu31ll  {
  ::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 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, 1, "Sf_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_Uc_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu31ll(Test_Sf_Uc_BFu31ll, "Sf_Uc_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu32i  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu32i(Test_Sf_Uc_BFu32i, "Sf_Uc_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu32ll  {
  ::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 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, 1, "Sf_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_Uc_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu32ll(Test_Sf_Uc_BFu32ll, "Sf_Uc_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu33  {
  ::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 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, 1, "Sf_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_Uc_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu33(Test_Sf_Uc_BFu33, "Sf_Uc_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu7c  {
  ::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 Sf_Uc_BFu7c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu7c(Test_Sf_Uc_BFu7c, "Sf_Uc_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu7i  {
  ::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 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, 1, "Sf_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu7i(Test_Sf_Uc_BFu7i, "Sf_Uc_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu7ll  {
  ::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 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, 1, "Sf_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu7ll(Test_Sf_Uc_BFu7ll, "Sf_Uc_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu7s  {
  ::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 Sf_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu7s(Test_Sf_Uc_BFu7s, "Sf_Uc_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu8c  {
  ::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 Sf_Uc_BFu8c lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu8c(Test_Sf_Uc_BFu8c, "Sf_Uc_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu8i  {
  ::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 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, 1, "Sf_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu8i(Test_Sf_Uc_BFu8i, "Sf_Uc_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu8ll  {
  ::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 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, 1, "Sf_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu8ll(Test_Sf_Uc_BFu8ll, "Sf_Uc_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu8s  {
  ::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 Sf_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "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, 1, "Sf_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu8s(Test_Sf_Uc_BFu8s, "Sf_Uc_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu9i  {
  ::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 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, 1, "Sf_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Uc_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu9i(Test_Sf_Uc_BFu9i, "Sf_Uc_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu9ll  {
  ::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 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, 1, "Sf_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Uc_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu9ll(Test_Sf_Uc_BFu9ll, "Sf_Uc_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_BFu9s  {
  ::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 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, 1, "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");
  }
}
static Arrange_To_Call_Me vSf_Uc_BFu9s(Test_Sf_Uc_BFu9s, "Sf_Uc_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_C  {
  ::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");
    Sf_Uc_C lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_C.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_C(Test_Sf_Uc_C, "Sf_Uc_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_D  {
  ::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");
    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, 1, "Sf_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_D(Test_Sf_Uc_D, "Sf_Uc_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_F  {
  ::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");
    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, 1, "Sf_Uc_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_F(Test_Sf_Uc_F, "Sf_Uc_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_I  {
  ::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");
    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, 1, "Sf_Uc_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_I(Test_Sf_Uc_I, "Sf_Uc_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Ip  {
  ::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");
    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, 1, "Sf_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Ip(Test_Sf_Uc_Ip, "Sf_Uc_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_L  {
  ::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");
    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, 1, "Sf_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_L(Test_Sf_Uc_L, "Sf_Uc_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_S  {
  ::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");
    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, 1, "Sf_Uc_S.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_S(Test_Sf_Uc_S, "Sf_Uc_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Sf  {
  ::empty v1;
  unsigned char v2;
  ::empty v3;
};
//SIG(1 Sf_Uc_Sf) C1{ FC2{} Fc FC2}



static void Test_Sf_Uc_Sf()
{
  {
    init_simple_test("Sf_Uc_Sf");
    Sf_Uc_Sf lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_Sf.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Sf(Test_Sf_Uc_Sf, "Sf_Uc_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Uc  {
  ::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");
    Sf_Uc_Uc lv;
    check2(sizeof(lv), 3, "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, 1, "Sf_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Uc(Test_Sf_Uc_Uc, "Sf_Uc_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Ui  {
  ::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");
    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, 1, "Sf_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Ui(Test_Sf_Uc_Ui, "Sf_Uc_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Ul  {
  ::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");
    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, 1, "Sf_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Ul(Test_Sf_Uc_Ul, "Sf_Uc_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Us  {
  ::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");
    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, 1, "Sf_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Us(Test_Sf_Uc_Us, "Sf_Uc_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Uc_Vp  {
  ::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");
    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, 1, "Sf_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Uc_Vp(Test_Sf_Uc_Vp, "Sf_Uc_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui  {
  ::empty v1;
  unsigned int v2;
};
//SIG(1 Sf_Ui) C1{ FC2{} Fi}



static void Test_Sf_Ui()
{
  {
    init_simple_test("Sf_Ui");
    Sf_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Ui.v1");
    check_field_offset(lv, v2, 4, "Sf_Ui.v2");
  }
}
static Arrange_To_Call_Me vSf_Ui(Test_Sf_Ui, "Sf_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu15i  {
  ::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 Sf_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu15i(Test_Sf_Ui_BFu15i, "Sf_Ui_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu15ll  {
  ::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 Sf_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu15ll(Test_Sf_Ui_BFu15ll, "Sf_Ui_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu15s  {
  ::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 Sf_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu15s(Test_Sf_Ui_BFu15s, "Sf_Ui_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu16i  {
  ::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 Sf_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu16i(Test_Sf_Ui_BFu16i, "Sf_Ui_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu16ll  {
  ::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 Sf_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu16ll(Test_Sf_Ui_BFu16ll, "Sf_Ui_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu16s  {
  ::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 Sf_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu16s(Test_Sf_Ui_BFu16s, "Sf_Ui_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu17i  {
  ::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 Sf_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_Ui_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu17i(Test_Sf_Ui_BFu17i, "Sf_Ui_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu17ll  {
  ::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 Sf_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_Ui_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu17ll(Test_Sf_Ui_BFu17ll, "Sf_Ui_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu1c  {
  ::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 Sf_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ui_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu1c(Test_Sf_Ui_BFu1c, "Sf_Ui_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu1i  {
  ::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 Sf_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ui_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu1i(Test_Sf_Ui_BFu1i, "Sf_Ui_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu1ll  {
  ::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 Sf_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ui_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu1ll(Test_Sf_Ui_BFu1ll, "Sf_Ui_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu1s  {
  ::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 Sf_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ui_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu1s(Test_Sf_Ui_BFu1s, "Sf_Ui_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu31i  {
  ::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 Sf_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_Ui_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu31i(Test_Sf_Ui_BFu31i, "Sf_Ui_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu31ll  {
  ::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 Sf_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_Ui_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu31ll(Test_Sf_Ui_BFu31ll, "Sf_Ui_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu32i  {
  ::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 Sf_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_Ui_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu32i(Test_Sf_Ui_BFu32i, "Sf_Ui_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu32ll  {
  ::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 Sf_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_Ui_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu32ll(Test_Sf_Ui_BFu32ll, "Sf_Ui_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu33  {
  ::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 Sf_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_Ui_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu33(Test_Sf_Ui_BFu33, "Sf_Ui_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu7c  {
  ::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 Sf_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu7c(Test_Sf_Ui_BFu7c, "Sf_Ui_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu7i  {
  ::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 Sf_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu7i(Test_Sf_Ui_BFu7i, "Sf_Ui_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu7ll  {
  ::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 Sf_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu7ll(Test_Sf_Ui_BFu7ll, "Sf_Ui_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu7s  {
  ::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 Sf_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu7s(Test_Sf_Ui_BFu7s, "Sf_Ui_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu8c  {
  ::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 Sf_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu8c(Test_Sf_Ui_BFu8c, "Sf_Ui_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu8i  {
  ::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 Sf_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu8i(Test_Sf_Ui_BFu8i, "Sf_Ui_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu8ll  {
  ::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 Sf_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu8ll(Test_Sf_Ui_BFu8ll, "Sf_Ui_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu8s  {
  ::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 Sf_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu8s(Test_Sf_Ui_BFu8s, "Sf_Ui_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu9i  {
  ::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 Sf_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu9i(Test_Sf_Ui_BFu9i, "Sf_Ui_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu9ll  {
  ::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 Sf_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu9ll(Test_Sf_Ui_BFu9ll, "Sf_Ui_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_BFu9s  {
  ::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 Sf_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Ui_BFu9s(Test_Sf_Ui_BFu9s, "Sf_Ui_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_C  {
  ::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");
    Sf_Ui_C lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_C.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_C(Test_Sf_Ui_C, "Sf_Ui_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_D  {
  ::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");
    Sf_Ui_D lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_Ui_D.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_D(Test_Sf_Ui_D, "Sf_Ui_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_F  {
  ::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");
    Sf_Ui_F lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_F.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_F(Test_Sf_Ui_F, "Sf_Ui_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_I  {
  ::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");
    Sf_Ui_I lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_I.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_I(Test_Sf_Ui_I, "Sf_Ui_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Ip  {
  ::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");
    Sf_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Ip(Test_Sf_Ui_Ip, "Sf_Ui_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_L  {
  ::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");
    Sf_Ui_L lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_Ui_L.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_L(Test_Sf_Ui_L, "Sf_Ui_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_S  {
  ::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");
    Sf_Ui_S lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_S.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_S(Test_Sf_Ui_S, "Sf_Ui_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Sf  {
  ::empty v1;
  unsigned int v2;
  ::empty v3;
};
//SIG(1 Sf_Ui_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_Ui_Sf()
{
  {
    init_simple_test("Sf_Ui_Sf");
    Sf_Ui_Sf lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Sf(Test_Sf_Ui_Sf, "Sf_Ui_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Uc  {
  ::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");
    Sf_Ui_Uc lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Uc(Test_Sf_Ui_Uc, "Sf_Ui_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Ui  {
  ::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");
    Sf_Ui_Ui lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Ui(Test_Sf_Ui_Ui, "Sf_Ui_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Ul  {
  ::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");
    Sf_Ui_Ul lv;
    check2(sizeof(lv), 16, "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, 4, "Sf_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Ul(Test_Sf_Ui_Ul, "Sf_Ui_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Us  {
  ::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");
    Sf_Ui_Us lv;
    check2(sizeof(lv), 12, "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, 4, "Sf_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Us(Test_Sf_Ui_Us, "Sf_Ui_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ui_Vp  {
  ::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");
    Sf_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 4, "Sf_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_Ui_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Ui_Vp(Test_Sf_Ui_Vp, "Sf_Ui_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul  {
  ::empty v1;
  __tsu64 v2;
};
//SIG(1 Sf_Ul) C1{ FC2{} FL}



static void Test_Sf_Ul()
{
  {
    init_simple_test("Sf_Ul");
    Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, ABISELECT(8,4), "Sf_Ul.v2");
  }
}
static Arrange_To_Call_Me vSf_Ul(Test_Sf_Ul, "Sf_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu15i  {
  ::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 Sf_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu15i(Test_Sf_Ul_BFu15i, "Sf_Ul_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu15ll  {
  ::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 Sf_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu15ll(Test_Sf_Ul_BFu15ll, "Sf_Ul_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu15s  {
  ::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 Sf_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Sf_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu15s(Test_Sf_Ul_BFu15s, "Sf_Ul_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu16i  {
  ::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 Sf_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu16i(Test_Sf_Ul_BFu16i, "Sf_Ul_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu16ll  {
  ::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 Sf_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu16ll(Test_Sf_Ul_BFu16ll, "Sf_Ul_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu16s  {
  ::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 Sf_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Sf_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu16s(Test_Sf_Ul_BFu16s, "Sf_Ul_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu17i  {
  ::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 Sf_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_Ul_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu17i(Test_Sf_Ul_BFu17i, "Sf_Ul_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu17ll  {
  ::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 Sf_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Sf_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Sf_Ul_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu17ll(Test_Sf_Ul_BFu17ll, "Sf_Ul_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu1c  {
  ::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 Sf_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_Ul_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu1c(Test_Sf_Ul_BFu1c, "Sf_Ul_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu1i  {
  ::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 Sf_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_Ul_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu1i(Test_Sf_Ul_BFu1i, "Sf_Ul_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu1ll  {
  ::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 Sf_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_Ul_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu1ll(Test_Sf_Ul_BFu1ll, "Sf_Ul_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu1s  {
  ::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 Sf_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Sf_Ul_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu1s(Test_Sf_Ul_BFu1s, "Sf_Ul_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu31i  {
  ::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 Sf_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_Ul_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu31i(Test_Sf_Ul_BFu31i, "Sf_Ul_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu31ll  {
  ::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 Sf_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Sf_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Sf_Ul_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu31ll(Test_Sf_Ul_BFu31ll, "Sf_Ul_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu32i  {
  ::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 Sf_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_Ul_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu32i(Test_Sf_Ul_BFu32i, "Sf_Ul_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu32ll  {
  ::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 Sf_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Sf_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Sf_Ul_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu32ll(Test_Sf_Ul_BFu32ll, "Sf_Ul_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu33  {
  ::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 Sf_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Sf_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Sf_Ul_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu33(Test_Sf_Ul_BFu33, "Sf_Ul_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu7c  {
  ::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 Sf_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu7c(Test_Sf_Ul_BFu7c, "Sf_Ul_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu7i  {
  ::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 Sf_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu7i(Test_Sf_Ul_BFu7i, "Sf_Ul_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu7ll  {
  ::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 Sf_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu7ll(Test_Sf_Ul_BFu7ll, "Sf_Ul_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu7s  {
  ::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 Sf_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Sf_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu7s(Test_Sf_Ul_BFu7s, "Sf_Ul_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu8c  {
  ::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 Sf_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu8c(Test_Sf_Ul_BFu8c, "Sf_Ul_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu8i  {
  ::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 Sf_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu8i(Test_Sf_Ul_BFu8i, "Sf_Ul_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu8ll  {
  ::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 Sf_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu8ll(Test_Sf_Ul_BFu8ll, "Sf_Ul_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu8s  {
  ::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 Sf_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Sf_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu8s(Test_Sf_Ul_BFu8s, "Sf_Ul_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu9i  {
  ::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 Sf_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu9i(Test_Sf_Ul_BFu9i, "Sf_Ul_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu9ll  {
  ::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 Sf_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu9ll(Test_Sf_Ul_BFu9ll, "Sf_Ul_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_BFu9s  {
  ::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 Sf_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Sf_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Ul_BFu9s(Test_Sf_Ul_BFu9s, "Sf_Ul_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_C  {
  ::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");
    Sf_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_C(Test_Sf_Ul_C, "Sf_Ul_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_D  {
  ::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");
    Sf_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_D(Test_Sf_Ul_D, "Sf_Ul_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_F  {
  ::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");
    Sf_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_F(Test_Sf_Ul_F, "Sf_Ul_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_I  {
  ::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");
    Sf_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_I(Test_Sf_Ul_I, "Sf_Ul_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Ip  {
  ::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");
    Sf_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Ip(Test_Sf_Ul_Ip, "Sf_Ul_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_L  {
  ::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");
    Sf_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_L(Test_Sf_Ul_L, "Sf_Ul_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_S  {
  ::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");
    Sf_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_S(Test_Sf_Ul_S, "Sf_Ul_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Sf  {
  ::empty v1;
  __tsu64 v2;
  ::empty v3;
};
//SIG(1 Sf_Ul_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_Ul_Sf()
{
  {
    init_simple_test("Sf_Ul_Sf");
    Sf_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Sf(Test_Sf_Ul_Sf, "Sf_Ul_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Uc  {
  ::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");
    Sf_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Uc(Test_Sf_Ul_Uc, "Sf_Ul_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Ui  {
  ::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");
    Sf_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Ui(Test_Sf_Ul_Ui, "Sf_Ul_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Ul  {
  ::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");
    Sf_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(8,4), "Sf_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Ul(Test_Sf_Ul_Ul, "Sf_Ul_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Us  {
  ::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");
    Sf_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Us(Test_Sf_Ul_Us, "Sf_Ul_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Ul_Vp  {
  ::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");
    Sf_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Sf_Ul_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Ul_Vp(Test_Sf_Ul_Vp, "Sf_Ul_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Sf_Us()
{
  {
    init_simple_test("Sf_Us");
    Sf_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us)");
    check_field_offset(lv, v1, 0, "Sf_Us.v1");
    check_field_offset(lv, v2, 2, "Sf_Us.v2");
  }
}
static Arrange_To_Call_Me vSf_Us(Test_Sf_Us, "Sf_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu15i  {
  ::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 Sf_Us_BFu15i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu15i(Test_Sf_Us_BFu15i, "Sf_Us_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu15ll  {
  ::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 Sf_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu15ll(Test_Sf_Us_BFu15ll, "Sf_Us_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu15s  {
  ::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 Sf_Us_BFu15s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu15s(Test_Sf_Us_BFu15s, "Sf_Us_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu16i  {
  ::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 Sf_Us_BFu16i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu16i(Test_Sf_Us_BFu16i, "Sf_Us_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu16ll  {
  ::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 Sf_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu16ll(Test_Sf_Us_BFu16ll, "Sf_Us_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu16s  {
  ::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 Sf_Us_BFu16s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu16s(Test_Sf_Us_BFu16s, "Sf_Us_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu17i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu17i(Test_Sf_Us_BFu17i, "Sf_Us_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu17ll  {
  ::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 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, 2, "Sf_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Us_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu17ll(Test_Sf_Us_BFu17ll, "Sf_Us_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu1c  {
  ::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 Sf_Us_BFu1c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Us_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu1c(Test_Sf_Us_BFu1c, "Sf_Us_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu1i  {
  ::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 Sf_Us_BFu1i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Us_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu1i(Test_Sf_Us_BFu1i, "Sf_Us_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu1ll  {
  ::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 Sf_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Us_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu1ll(Test_Sf_Us_BFu1ll, "Sf_Us_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu1s  {
  ::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 Sf_Us_BFu1s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Us_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu1s(Test_Sf_Us_BFu1s, "Sf_Us_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu31i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu31i(Test_Sf_Us_BFu31i, "Sf_Us_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu31ll  {
  ::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 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, 2, "Sf_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Us_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu31ll(Test_Sf_Us_BFu31ll, "Sf_Us_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu32i  {
  ::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 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, 2, "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");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu32i(Test_Sf_Us_BFu32i, "Sf_Us_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu32ll  {
  ::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 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, 2, "Sf_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Us_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu32ll(Test_Sf_Us_BFu32ll, "Sf_Us_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu33  {
  ::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 Sf_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 2, "Sf_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_Us_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu33(Test_Sf_Us_BFu33, "Sf_Us_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu7c  {
  ::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 Sf_Us_BFu7c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu7c(Test_Sf_Us_BFu7c, "Sf_Us_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu7i  {
  ::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 Sf_Us_BFu7i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu7i(Test_Sf_Us_BFu7i, "Sf_Us_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu7ll  {
  ::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 Sf_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu7ll(Test_Sf_Us_BFu7ll, "Sf_Us_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu7s  {
  ::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 Sf_Us_BFu7s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu7s(Test_Sf_Us_BFu7s, "Sf_Us_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu8c  {
  ::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 Sf_Us_BFu8c lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu8c(Test_Sf_Us_BFu8c, "Sf_Us_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu8i  {
  ::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 Sf_Us_BFu8i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu8i(Test_Sf_Us_BFu8i, "Sf_Us_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu8ll  {
  ::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 Sf_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu8ll(Test_Sf_Us_BFu8ll, "Sf_Us_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu8s  {
  ::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 Sf_Us_BFu8s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu8s(Test_Sf_Us_BFu8s, "Sf_Us_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu9i  {
  ::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 Sf_Us_BFu9i lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu9i(Test_Sf_Us_BFu9i, "Sf_Us_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu9ll  {
  ::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 Sf_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 2, "Sf_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu9ll(Test_Sf_Us_BFu9ll, "Sf_Us_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_BFu9s  {
  ::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 Sf_Us_BFu9s lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Us_BFu9s(Test_Sf_Us_BFu9s, "Sf_Us_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_C  {
  ::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");
    Sf_Us_C lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_C.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_C(Test_Sf_Us_C, "Sf_Us_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_D  {
  ::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");
    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, 2, "Sf_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_D(Test_Sf_Us_D, "Sf_Us_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_F  {
  ::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");
    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, 2, "Sf_Us_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_F(Test_Sf_Us_F, "Sf_Us_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_I  {
  ::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");
    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, 2, "Sf_Us_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_I(Test_Sf_Us_I, "Sf_Us_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Ip  {
  ::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");
    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, 2, "Sf_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Ip(Test_Sf_Us_Ip, "Sf_Us_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_L  {
  ::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");
    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, 2, "Sf_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_L(Test_Sf_Us_L, "Sf_Us_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_S  {
  ::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");
    Sf_Us_S lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_S.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_S(Test_Sf_Us_S, "Sf_Us_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Sf_Us_Sf()
{
  {
    init_simple_test("Sf_Us_Sf");
    Sf_Us_Sf lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_Sf.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Sf(Test_Sf_Us_Sf, "Sf_Us_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Uc  {
  ::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");
    Sf_Us_Uc lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Uc(Test_Sf_Us_Uc, "Sf_Us_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Ui  {
  ::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");
    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, 2, "Sf_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Ui(Test_Sf_Us_Ui, "Sf_Us_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Ul  {
  ::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");
    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, 2, "Sf_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Ul(Test_Sf_Us_Ul, "Sf_Us_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Us  {
  ::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");
    Sf_Us_Us lv;
    check2(sizeof(lv), 6, "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, 2, "Sf_Us_Us.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Us(Test_Sf_Us_Us, "Sf_Us_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Us_Vp  {
  ::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");
    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, 2, "Sf_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Us_Vp(Test_Sf_Us_Vp, "Sf_Us_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp  {
  ::empty v1;
  void *v2;
};
//SIG(1 Sf_Vp) C1{ FC2{} Fp}



static void Test_Sf_Vp()
{
  {
    init_simple_test("Sf_Vp");
    Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "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, ABISELECT(8,4), "Sf_Vp.v2");
  }
}
static Arrange_To_Call_Me vSf_Vp(Test_Sf_Vp, "Sf_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu15i  {
  ::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 Sf_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu15i(Test_Sf_Vp_BFu15i, "Sf_Vp_BFu15i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu15ll  {
  ::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 Sf_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu15ll(Test_Sf_Vp_BFu15ll, "Sf_Vp_BFu15ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu15s  {
  ::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 Sf_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Sf_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu15s(Test_Sf_Vp_BFu15s, "Sf_Vp_BFu15s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu16i  {
  ::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 Sf_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu16i(Test_Sf_Vp_BFu16i, "Sf_Vp_BFu16i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu16ll  {
  ::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 Sf_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu16ll(Test_Sf_Vp_BFu16ll, "Sf_Vp_BFu16ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu16s  {
  ::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 Sf_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Sf_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu16s(Test_Sf_Vp_BFu16s, "Sf_Vp_BFu16s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu17i  {
  ::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 Sf_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Sf_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Sf_Vp_BFu17i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu17i(Test_Sf_Vp_BFu17i, "Sf_Vp_BFu17i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu17ll  {
  ::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 Sf_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Sf_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Sf_Vp_BFu17ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu17ll(Test_Sf_Vp_BFu17ll, "Sf_Vp_BFu17ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu1c  {
  ::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 Sf_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Vp_BFu1c");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu1c(Test_Sf_Vp_BFu1c, "Sf_Vp_BFu1c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu1i  {
  ::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 Sf_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Vp_BFu1i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu1i(Test_Sf_Vp_BFu1i, "Sf_Vp_BFu1i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu1ll  {
  ::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 Sf_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Vp_BFu1ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu1ll(Test_Sf_Vp_BFu1ll, "Sf_Vp_BFu1ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu1s  {
  ::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 Sf_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Sf_Vp_BFu1s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu1s(Test_Sf_Vp_BFu1s, "Sf_Vp_BFu1s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu31i  {
  ::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 Sf_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Sf_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Sf_Vp_BFu31i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu31i(Test_Sf_Vp_BFu31i, "Sf_Vp_BFu31i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu31ll  {
  ::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 Sf_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Sf_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Sf_Vp_BFu31ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu31ll(Test_Sf_Vp_BFu31ll, "Sf_Vp_BFu31ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu32i  {
  ::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 Sf_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Sf_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Sf_Vp_BFu32i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu32i(Test_Sf_Vp_BFu32i, "Sf_Vp_BFu32i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu32ll  {
  ::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 Sf_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Sf_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Sf_Vp_BFu32ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu32ll(Test_Sf_Vp_BFu32ll, "Sf_Vp_BFu32ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu33  {
  ::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 Sf_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Sf_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Sf_Vp_BFu33");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu33(Test_Sf_Vp_BFu33, "Sf_Vp_BFu33", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu7c  {
  ::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 Sf_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7c");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu7c(Test_Sf_Vp_BFu7c, "Sf_Vp_BFu7c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu7i  {
  ::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 Sf_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu7i(Test_Sf_Vp_BFu7i, "Sf_Vp_BFu7i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu7ll  {
  ::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 Sf_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu7ll(Test_Sf_Vp_BFu7ll, "Sf_Vp_BFu7ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu7s  {
  ::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 Sf_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Sf_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu7s(Test_Sf_Vp_BFu7s, "Sf_Vp_BFu7s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu8c  {
  ::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 Sf_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8c");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu8c(Test_Sf_Vp_BFu8c, "Sf_Vp_BFu8c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu8i  {
  ::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 Sf_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu8i(Test_Sf_Vp_BFu8i, "Sf_Vp_BFu8i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu8ll  {
  ::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 Sf_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu8ll(Test_Sf_Vp_BFu8ll, "Sf_Vp_BFu8ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu8s  {
  ::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 Sf_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Sf_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu8s(Test_Sf_Vp_BFu8s, "Sf_Vp_BFu8s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu9i  {
  ::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 Sf_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9i");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu9i(Test_Sf_Vp_BFu9i, "Sf_Vp_BFu9i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu9ll  {
  ::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 Sf_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9ll");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu9ll(Test_Sf_Vp_BFu9ll, "Sf_Vp_BFu9ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_BFu9s  {
  ::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 Sf_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Sf_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9s");
  }
}
static Arrange_To_Call_Me vSf_Vp_BFu9s(Test_Sf_Vp_BFu9s, "Sf_Vp_BFu9s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_C  {
  ::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");
    Sf_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_C.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_C(Test_Sf_Vp_C, "Sf_Vp_C", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_D  {
  ::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");
    Sf_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_D.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_D(Test_Sf_Vp_D, "Sf_Vp_D", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_F  {
  ::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");
    Sf_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_F.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_F(Test_Sf_Vp_F, "Sf_Vp_F", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_I  {
  ::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");
    Sf_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_I.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_I(Test_Sf_Vp_I, "Sf_Vp_I", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Ip  {
  ::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");
    Sf_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Ip.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Ip(Test_Sf_Vp_Ip, "Sf_Vp_Ip", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_L  {
  ::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");
    Sf_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_L.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_L(Test_Sf_Vp_L, "Sf_Vp_L", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_S  {
  ::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");
    Sf_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_S.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_S(Test_Sf_Vp_S, "Sf_Vp_S", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Sf  {
  ::empty v1;
  void *v2;
  ::empty v3;
};
//SIG(1 Sf_Vp_Sf) C1{ FC2{} Fp FC2}



static void Test_Sf_Vp_Sf()
{
  {
    init_simple_test("Sf_Vp_Sf");
    Sf_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Sf.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Sf(Test_Sf_Vp_Sf, "Sf_Vp_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Uc  {
  ::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");
    Sf_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Uc.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Uc(Test_Sf_Vp_Uc, "Sf_Vp_Uc", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Ui  {
  ::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");
    Sf_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Ui.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Ui(Test_Sf_Vp_Ui, "Sf_Vp_Ui", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Ul  {
  ::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");
    Sf_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(8,4), "Sf_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Ul.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Ul(Test_Sf_Vp_Ul, "Sf_Vp_Ul", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Us  {
  ::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");
    Sf_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Us.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Us(Test_Sf_Vp_Us, "Sf_Vp_Us", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Sf_Vp_Vp  {
  ::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");
    Sf_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "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, ABISELECT(8,4), "Sf_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Sf_Vp_Vp.v3");
  }
}
static Arrange_To_Call_Me vSf_Vp_Vp(Test_Sf_Vp_Vp, "Sf_Vp_Vp", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15i_Sf  {
  unsigned char v1;
  unsigned int v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu15i_Sf(Test_Uc_BFu15i_Sf, "Uc_BFu15i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15ll_Sf  {
  unsigned char v1;
  __tsu64 v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu15ll_Sf(Test_Uc_BFu15ll_Sf, "Uc_BFu15ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15s_Sf  {
  unsigned char v1;
  unsigned short v2:15;
  ::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 Uc_BFu15s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu15s_Sf(Test_Uc_BFu15s_Sf, "Uc_BFu15s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16i_Sf  {
  unsigned char v1;
  unsigned int v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu16i_Sf(Test_Uc_BFu16i_Sf, "Uc_BFu16i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16ll_Sf  {
  unsigned char v1;
  __tsu64 v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu16ll_Sf(Test_Uc_BFu16ll_Sf, "Uc_BFu16ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16s_Sf  {
  unsigned char v1;
  unsigned short v2:16;
  ::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 Uc_BFu16s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu16s_Sf(Test_Uc_BFu16s_Sf, "Uc_BFu16s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17i_Sf  {
  unsigned char v1;
  unsigned int v2:17;
  ::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 Uc_BFu17i_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu17i_Sf(Test_Uc_BFu17i_Sf, "Uc_BFu17i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17ll_Sf  {
  unsigned char v1;
  __tsu64 v2:17;
  ::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 Uc_BFu17ll_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu17ll_Sf(Test_Uc_BFu17ll_Sf, "Uc_BFu17ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1c_Sf  {
  unsigned char v1;
  unsigned char v2:1;
  ::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 Uc_BFu1c_Sf lv;
    check2(sizeof(lv), 3, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu1c_Sf(Test_Uc_BFu1c_Sf, "Uc_BFu1c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1i_Sf  {
  unsigned char v1;
  unsigned int v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu1i_Sf(Test_Uc_BFu1i_Sf, "Uc_BFu1i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1ll_Sf  {
  unsigned char v1;
  __tsu64 v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu1ll_Sf(Test_Uc_BFu1ll_Sf, "Uc_BFu1ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1s_Sf  {
  unsigned char v1;
  unsigned short v2:1;
  ::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 Uc_BFu1s_Sf lv;
    check2(sizeof(lv), 4, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu1s_Sf(Test_Uc_BFu1s_Sf, "Uc_BFu1s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31i_Sf  {
  unsigned char v1;
  unsigned int v2:31;
  ::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 Uc_BFu31i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu31i_Sf(Test_Uc_BFu31i_Sf, "Uc_BFu31i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31ll_Sf  {
  unsigned char v1;
  __tsu64 v2:31;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu31ll_Sf(Test_Uc_BFu31ll_Sf, "Uc_BFu31ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32i_Sf  {
  unsigned char v1;
  unsigned int v2:32;
  ::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 Uc_BFu32i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu32i_Sf(Test_Uc_BFu32i_Sf, "Uc_BFu32i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32ll_Sf  {
  unsigned char v1;
  __tsu64 v2:32;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu32ll_Sf(Test_Uc_BFu32ll_Sf, "Uc_BFu32ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu33_Sf  {
  unsigned char v1;
  __tsu64 v2:33;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu33_Sf(Test_Uc_BFu33_Sf, "Uc_BFu33_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7c_Sf  {
  unsigned char v1;
  unsigned char v2:7;
  ::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 Uc_BFu7c_Sf lv;
    check2(sizeof(lv), 3, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu7c_Sf(Test_Uc_BFu7c_Sf, "Uc_BFu7c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7i_Sf  {
  unsigned char v1;
  unsigned int v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu7i_Sf(Test_Uc_BFu7i_Sf, "Uc_BFu7i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7ll_Sf  {
  unsigned char v1;
  __tsu64 v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu7ll_Sf(Test_Uc_BFu7ll_Sf, "Uc_BFu7ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7s_Sf  {
  unsigned char v1;
  unsigned short v2:7;
  ::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 Uc_BFu7s_Sf lv;
    check2(sizeof(lv), 4, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu7s_Sf(Test_Uc_BFu7s_Sf, "Uc_BFu7s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8c_Sf  {
  unsigned char v1;
  unsigned char v2:8;
  ::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 Uc_BFu8c_Sf lv;
    check2(sizeof(lv), 3, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu8c_Sf(Test_Uc_BFu8c_Sf, "Uc_BFu8c_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8i_Sf  {
  unsigned char v1;
  unsigned int v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu8i_Sf(Test_Uc_BFu8i_Sf, "Uc_BFu8i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8ll_Sf  {
  unsigned char v1;
  __tsu64 v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu8ll_Sf(Test_Uc_BFu8ll_Sf, "Uc_BFu8ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8s_Sf  {
  unsigned char v1;
  unsigned short v2:8;
  ::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 Uc_BFu8s_Sf lv;
    check2(sizeof(lv), 4, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu8s_Sf(Test_Uc_BFu8s_Sf, "Uc_BFu8s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9i_Sf  {
  unsigned char v1;
  unsigned int v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu9i_Sf(Test_Uc_BFu9i_Sf, "Uc_BFu9i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9ll_Sf  {
  unsigned char v1;
  __tsu64 v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_BFu9ll_Sf(Test_Uc_BFu9ll_Sf, "Uc_BFu9ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9s_Sf  {
  unsigned char v1;
  unsigned short v2:9;
  ::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 Uc_BFu9s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUc_BFu9s_Sf(Test_Uc_BFu9s_Sf, "Uc_BFu9s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_C_Sf  {
  unsigned char v1;
  char v2;
  ::empty v3;
};
//SIG(1 Uc_C_Sf) C1{ Fc[2] FC2{}}



static void Test_Uc_C_Sf()
{
  {
    init_simple_test("Uc_C_Sf");
    Uc_C_Sf lv;
    check2(sizeof(lv), 3, "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");
  }
}
static Arrange_To_Call_Me vUc_C_Sf(Test_Uc_C_Sf, "Uc_C_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_D_Sf  {
  unsigned char v1;
  double v2;
  ::empty v3;
};
//SIG(1 Uc_D_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_D_Sf()
{
  {
    init_simple_test("Uc_D_Sf");
    Uc_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUc_D_Sf(Test_Uc_D_Sf, "Uc_D_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_F_Sf  {
  unsigned char v1;
  float v2;
  ::empty v3;
};
//SIG(1 Uc_F_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_F_Sf()
{
  {
    init_simple_test("Uc_F_Sf");
    Uc_F_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUc_F_Sf(Test_Uc_F_Sf, "Uc_F_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_I_Sf  {
  unsigned char v1;
  int v2;
  ::empty v3;
};
//SIG(1 Uc_I_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_I_Sf()
{
  {
    init_simple_test("Uc_I_Sf");
    Uc_I_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUc_I_Sf(Test_Uc_I_Sf, "Uc_I_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Uc_Ip_Sf()
{
  {
    init_simple_test("Uc_Ip_Sf");
    Uc_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUc_Ip_Sf(Test_Uc_Ip_Sf, "Uc_Ip_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_L_Sf  {
  unsigned char v1;
  __tsi64 v2;
  ::empty v3;
};
//SIG(1 Uc_L_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_L_Sf()
{
  {
    init_simple_test("Uc_L_Sf");
    Uc_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUc_L_Sf(Test_Uc_L_Sf, "Uc_L_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Uc_S_Sf()
{
  {
    init_simple_test("Uc_S_Sf");
    Uc_S_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUc_S_Sf(Test_Uc_S_Sf, "Uc_S_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf  {
  unsigned char v1;
  ::empty v2;
};
//SIG(1 Uc_Sf) C1{ Fc FC2{}}



static void Test_Uc_Sf()
{
  {
    init_simple_test("Uc_Sf");
    Uc_Sf lv;
    check2(sizeof(lv), 2, "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");
  }
}
static Arrange_To_Call_Me vUc_Sf(Test_Uc_Sf, "Uc_Sf", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu15i  {
  unsigned char v1;
  ::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 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, 2, 0, 15, 1, "Uc_Sf_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Uc_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu15i(Test_Uc_Sf_BFu15i, "Uc_Sf_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu15ll  {
  unsigned char v1;
  ::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 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, 2, 0, 15, 1, "Uc_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Uc_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu15ll(Test_Uc_Sf_BFu15ll, "Uc_Sf_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu15s  {
  unsigned char v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu15s(Test_Uc_Sf_BFu15s, "Uc_Sf_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu16i  {
  unsigned char v1;
  ::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 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, 2, 0, 16, 1, "Uc_Sf_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Uc_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu16i(Test_Uc_Sf_BFu16i, "Uc_Sf_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu16ll  {
  unsigned char v1;
  ::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 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, 2, 0, 16, 1, "Uc_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Uc_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu16ll(Test_Uc_Sf_BFu16ll, "Uc_Sf_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu16s  {
  unsigned char v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu16s(Test_Uc_Sf_BFu16s, "Uc_Sf_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu17i  {
  unsigned char v1;
  ::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 Uc_Sf_BFu17i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 17, 1, "Uc_Sf_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Uc_Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu17i(Test_Uc_Sf_BFu17i, "Uc_Sf_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu17ll  {
  unsigned char v1;
  ::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 Uc_Sf_BFu17ll lv;
    check2(sizeof(lv), 8, "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, 2, 0, 17, 1, "Uc_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Uc_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu17ll(Test_Uc_Sf_BFu17ll, "Uc_Sf_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu1c  {
  unsigned char v1;
  ::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 Uc_Sf_BFu1c lv;
    check2(sizeof(lv), 3, "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, 2, 0, 1, 1, "Uc_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu1c(Test_Uc_Sf_BFu1c, "Uc_Sf_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu1i  {
  unsigned char v1;
  ::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 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, 2, 0, 1, 1, "Uc_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu1i(Test_Uc_Sf_BFu1i, "Uc_Sf_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu1ll  {
  unsigned char v1;
  ::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 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, 2, 0, 1, 1, "Uc_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu1ll(Test_Uc_Sf_BFu1ll, "Uc_Sf_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu1s  {
  unsigned char v1;
  ::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 Uc_Sf_BFu1s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 1, 1, "Uc_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu1s(Test_Uc_Sf_BFu1s, "Uc_Sf_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu31i  {
  unsigned char v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu31i(Test_Uc_Sf_BFu31i, "Uc_Sf_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu31ll  {
  unsigned char v1;
  ::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 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, 2, 0, 31, 1, "Uc_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Uc_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu31ll(Test_Uc_Sf_BFu31ll, "Uc_Sf_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu32i  {
  unsigned char v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu32i(Test_Uc_Sf_BFu32i, "Uc_Sf_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu32ll  {
  unsigned char v1;
  ::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 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, 2, 0, 32, 1, "Uc_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Uc_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu32ll(Test_Uc_Sf_BFu32ll, "Uc_Sf_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu33  {
  unsigned char v1;
  ::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 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, 2, 0, 33, 1, "Uc_Sf_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Uc_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu33(Test_Uc_Sf_BFu33, "Uc_Sf_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu7c  {
  unsigned char v1;
  ::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 Uc_Sf_BFu7c lv;
    check2(sizeof(lv), 3, "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, 2, 0, 7, 1, "Uc_Sf_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu7c(Test_Uc_Sf_BFu7c, "Uc_Sf_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu7i  {
  unsigned char v1;
  ::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 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, 2, 0, 7, 1, "Uc_Sf_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu7i(Test_Uc_Sf_BFu7i, "Uc_Sf_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu7ll  {
  unsigned char v1;
  ::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 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, 2, 0, 7, 1, "Uc_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu7ll(Test_Uc_Sf_BFu7ll, "Uc_Sf_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu7s  {
  unsigned char v1;
  ::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 Uc_Sf_BFu7s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 7, 1, "Uc_Sf_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu7s(Test_Uc_Sf_BFu7s, "Uc_Sf_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu8c  {
  unsigned char v1;
  ::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 Uc_Sf_BFu8c lv;
    check2(sizeof(lv), 3, "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, 2, 0, 8, 1, "Uc_Sf_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu8c(Test_Uc_Sf_BFu8c, "Uc_Sf_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu8i  {
  unsigned char v1;
  ::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 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, 2, 0, 8, 1, "Uc_Sf_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu8i(Test_Uc_Sf_BFu8i, "Uc_Sf_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu8ll  {
  unsigned char v1;
  ::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 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, 2, 0, 8, 1, "Uc_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu8ll(Test_Uc_Sf_BFu8ll, "Uc_Sf_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu8s  {
  unsigned char v1;
  ::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 Uc_Sf_BFu8s lv;
    check2(sizeof(lv), 4, "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, 2, 0, 8, 1, "Uc_Sf_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu8s(Test_Uc_Sf_BFu8s, "Uc_Sf_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu9i  {
  unsigned char v1;
  ::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 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, 2, 0, 9, 1, "Uc_Sf_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Uc_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu9i(Test_Uc_Sf_BFu9i, "Uc_Sf_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu9ll  {
  unsigned char v1;
  ::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 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, 2, 0, 9, 1, "Uc_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Uc_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu9ll(Test_Uc_Sf_BFu9ll, "Uc_Sf_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_BFu9s  {
  unsigned char v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUc_Sf_BFu9s(Test_Uc_Sf_BFu9s, "Uc_Sf_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_C  {
  unsigned char v1;
  ::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");
    Uc_Sf_C lv;
    check2(sizeof(lv), 3, "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, 2, "Uc_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vUc_Sf_C(Test_Uc_Sf_C, "Uc_Sf_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_D  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_D(Test_Uc_Sf_D, "Uc_Sf_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_F  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_F(Test_Uc_Sf_F, "Uc_Sf_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_I  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_I(Test_Uc_Sf_I, "Uc_Sf_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Ip  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_Ip(Test_Uc_Sf_Ip, "Uc_Sf_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_L  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_L(Test_Uc_Sf_L, "Uc_Sf_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_S  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_S(Test_Uc_Sf_S, "Uc_Sf_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Sf  {
  unsigned char v1;
  ::empty v2;
  ::empty v3;
};
//SIG(1 Uc_Sf_Sf) C1{ Fc FC2{} FC2}



static void Test_Uc_Sf_Sf()
{
  {
    init_simple_test("Uc_Sf_Sf");
    Uc_Sf_Sf lv;
    check2(sizeof(lv), 3, "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, 2, "Uc_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vUc_Sf_Sf(Test_Uc_Sf_Sf, "Uc_Sf_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Uc  {
  unsigned char v1;
  ::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");
    Uc_Sf_Uc lv;
    check2(sizeof(lv), 3, "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, 2, "Uc_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vUc_Sf_Uc(Test_Uc_Sf_Uc, "Uc_Sf_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Ui  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_Ui(Test_Uc_Sf_Ui, "Uc_Sf_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Ul  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_Ul(Test_Uc_Sf_Ul, "Uc_Sf_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Us  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_Us(Test_Uc_Sf_Us, "Uc_Sf_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Sf_Vp  {
  unsigned char v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUc_Sf_Vp(Test_Uc_Sf_Vp, "Uc_Sf_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Uc_Sf  {
  unsigned char v1;
  unsigned char v2;
  ::empty v3;
};
//SIG(1 Uc_Uc_Sf) C1{ Fc[2] FC2{}}



static void Test_Uc_Uc_Sf()
{
  {
    init_simple_test("Uc_Uc_Sf");
    Uc_Uc_Sf lv;
    check2(sizeof(lv), 3, "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");
  }
}
static Arrange_To_Call_Me vUc_Uc_Sf(Test_Uc_Uc_Sf, "Uc_Uc_Sf", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ui_Sf  {
  unsigned char v1;
  unsigned int v2;
  ::empty v3;
};
//SIG(1 Uc_Ui_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_Ui_Sf()
{
  {
    init_simple_test("Uc_Ui_Sf");
    Uc_Ui_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUc_Ui_Sf(Test_Uc_Ui_Sf, "Uc_Ui_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ul_Sf  {
  unsigned char v1;
  __tsu64 v2;
  ::empty v3;
};
//SIG(1 Uc_Ul_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_Ul_Sf()
{
  {
    init_simple_test("Uc_Ul_Sf");
    Uc_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUc_Ul_Sf(Test_Uc_Ul_Sf, "Uc_Ul_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Uc_Us_Sf()
{
  {
    init_simple_test("Uc_Us_Sf");
    Uc_Us_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUc_Us_Sf(Test_Uc_Us_Sf, "Uc_Us_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Uc_Vp_Sf()
{
  {
    init_simple_test("Uc_Vp_Sf");
    Uc_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUc_Vp_Sf(Test_Uc_Vp_Sf, "Uc_Vp_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15i_Sf  {
  unsigned int v1;
  unsigned int v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu15i_Sf(Test_Ui_BFu15i_Sf, "Ui_BFu15i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15ll_Sf  {
  unsigned int v1;
  __tsu64 v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu15ll_Sf(Test_Ui_BFu15ll_Sf, "Ui_BFu15ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15s_Sf  {
  unsigned int v1;
  unsigned short v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu15s_Sf(Test_Ui_BFu15s_Sf, "Ui_BFu15s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16i_Sf  {
  unsigned int v1;
  unsigned int v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu16i_Sf(Test_Ui_BFu16i_Sf, "Ui_BFu16i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16ll_Sf  {
  unsigned int v1;
  __tsu64 v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu16ll_Sf(Test_Ui_BFu16ll_Sf, "Ui_BFu16ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16s_Sf  {
  unsigned int v1;
  unsigned short v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu16s_Sf(Test_Ui_BFu16s_Sf, "Ui_BFu16s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17i_Sf  {
  unsigned int v1;
  unsigned int v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu17i_Sf(Test_Ui_BFu17i_Sf, "Ui_BFu17i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17ll_Sf  {
  unsigned int v1;
  __tsu64 v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu17ll_Sf(Test_Ui_BFu17ll_Sf, "Ui_BFu17ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1c_Sf  {
  unsigned int v1;
  unsigned char v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu1c_Sf(Test_Ui_BFu1c_Sf, "Ui_BFu1c_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1i_Sf  {
  unsigned int v1;
  unsigned int v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu1i_Sf(Test_Ui_BFu1i_Sf, "Ui_BFu1i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1ll_Sf  {
  unsigned int v1;
  __tsu64 v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu1ll_Sf(Test_Ui_BFu1ll_Sf, "Ui_BFu1ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1s_Sf  {
  unsigned int v1;
  unsigned short v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu1s_Sf(Test_Ui_BFu1s_Sf, "Ui_BFu1s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31i_Sf  {
  unsigned int v1;
  unsigned int v2:31;
  ::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 Ui_BFu31i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUi_BFu31i_Sf(Test_Ui_BFu31i_Sf, "Ui_BFu31i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31ll_Sf  {
  unsigned int v1;
  __tsu64 v2:31;
  ::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 Ui_BFu31ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vUi_BFu31ll_Sf(Test_Ui_BFu31ll_Sf, "Ui_BFu31ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32i_Sf  {
  unsigned int v1;
  unsigned int v2:32;
  ::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 Ui_BFu32i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUi_BFu32i_Sf(Test_Ui_BFu32i_Sf, "Ui_BFu32i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32ll_Sf  {
  unsigned int v1;
  __tsu64 v2:32;
  ::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 Ui_BFu32ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vUi_BFu32ll_Sf(Test_Ui_BFu32ll_Sf, "Ui_BFu32ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu33_Sf  {
  unsigned int v1;
  __tsu64 v2:33;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu33_Sf(Test_Ui_BFu33_Sf, "Ui_BFu33_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7c_Sf  {
  unsigned int v1;
  unsigned char v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu7c_Sf(Test_Ui_BFu7c_Sf, "Ui_BFu7c_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7i_Sf  {
  unsigned int v1;
  unsigned int v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu7i_Sf(Test_Ui_BFu7i_Sf, "Ui_BFu7i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7ll_Sf  {
  unsigned int v1;
  __tsu64 v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu7ll_Sf(Test_Ui_BFu7ll_Sf, "Ui_BFu7ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7s_Sf  {
  unsigned int v1;
  unsigned short v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu7s_Sf(Test_Ui_BFu7s_Sf, "Ui_BFu7s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8c_Sf  {
  unsigned int v1;
  unsigned char v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu8c_Sf(Test_Ui_BFu8c_Sf, "Ui_BFu8c_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8i_Sf  {
  unsigned int v1;
  unsigned int v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu8i_Sf(Test_Ui_BFu8i_Sf, "Ui_BFu8i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8ll_Sf  {
  unsigned int v1;
  __tsu64 v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu8ll_Sf(Test_Ui_BFu8ll_Sf, "Ui_BFu8ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8s_Sf  {
  unsigned int v1;
  unsigned short v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu8s_Sf(Test_Ui_BFu8s_Sf, "Ui_BFu8s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9i_Sf  {
  unsigned int v1;
  unsigned int v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu9i_Sf(Test_Ui_BFu9i_Sf, "Ui_BFu9i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9ll_Sf  {
  unsigned int v1;
  __tsu64 v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu9ll_Sf(Test_Ui_BFu9ll_Sf, "Ui_BFu9ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9s_Sf  {
  unsigned int v1;
  unsigned short v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUi_BFu9s_Sf(Test_Ui_BFu9s_Sf, "Ui_BFu9s_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_C_Sf  {
  unsigned int v1;
  char v2;
  ::empty v3;
};
//SIG(1 Ui_C_Sf) C1{ Fi Fc FC2{}}



static void Test_Ui_C_Sf()
{
  {
    init_simple_test("Ui_C_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUi_C_Sf(Test_Ui_C_Sf, "Ui_C_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_D_Sf  {
  unsigned int v1;
  double v2;
  ::empty v3;
};
//SIG(1 Ui_D_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_D_Sf()
{
  {
    init_simple_test("Ui_D_Sf");
    Ui_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUi_D_Sf(Test_Ui_D_Sf, "Ui_D_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_F_Sf  {
  unsigned int v1;
  float v2;
  ::empty v3;
};
//SIG(1 Ui_F_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_F_Sf()
{
  {
    init_simple_test("Ui_F_Sf");
    Ui_F_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUi_F_Sf(Test_Ui_F_Sf, "Ui_F_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_I_Sf  {
  unsigned int v1;
  int v2;
  ::empty v3;
};
//SIG(1 Ui_I_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_I_Sf()
{
  {
    init_simple_test("Ui_I_Sf");
    Ui_I_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUi_I_Sf(Test_Ui_I_Sf, "Ui_I_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ui_Ip_Sf()
{
  {
    init_simple_test("Ui_Ip_Sf");
    Ui_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUi_Ip_Sf(Test_Ui_Ip_Sf, "Ui_Ip_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_L_Sf  {
  unsigned int v1;
  __tsi64 v2;
  ::empty v3;
};
//SIG(1 Ui_L_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_L_Sf()
{
  {
    init_simple_test("Ui_L_Sf");
    Ui_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUi_L_Sf(Test_Ui_L_Sf, "Ui_L_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ui_S_Sf()
{
  {
    init_simple_test("Ui_S_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUi_S_Sf(Test_Ui_S_Sf, "Ui_S_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf  {
  unsigned int v1;
  ::empty v2;
};
//SIG(1 Ui_Sf) C1{ Fi FC2{}}



static void Test_Ui_Sf()
{
  {
    init_simple_test("Ui_Sf");
    Ui_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUi_Sf(Test_Ui_Sf, "Ui_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu15i  {
  unsigned int v1;
  ::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 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, 5, 0, 15, 1, "Ui_Sf_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu15i(Test_Ui_Sf_BFu15i, "Ui_Sf_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu15ll  {
  unsigned int v1;
  ::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 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, 5, 0, 15, 1, "Ui_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu15ll(Test_Ui_Sf_BFu15ll, "Ui_Sf_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu15s  {
  unsigned int v1;
  ::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 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, 6, 0, 15, 1, "Ui_Sf_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu15s(Test_Ui_Sf_BFu15s, "Ui_Sf_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu16i  {
  unsigned int v1;
  ::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 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, 5, 0, 16, 1, "Ui_Sf_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu16i(Test_Ui_Sf_BFu16i, "Ui_Sf_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu16ll  {
  unsigned int v1;
  ::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 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, 5, 0, 16, 1, "Ui_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu16ll(Test_Ui_Sf_BFu16ll, "Ui_Sf_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu16s  {
  unsigned int v1;
  ::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 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, 6, 0, 16, 1, "Ui_Sf_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu16s(Test_Ui_Sf_BFu16s, "Ui_Sf_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu17i  {
  unsigned int v1;
  ::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 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, 5, 0, 17, 1, "Ui_Sf_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "Ui_Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu17i(Test_Ui_Sf_BFu17i, "Ui_Sf_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu17ll  {
  unsigned int v1;
  ::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 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, 5, 0, 17, 1, "Ui_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "Ui_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu17ll(Test_Ui_Sf_BFu17ll, "Ui_Sf_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu1c  {
  unsigned int v1;
  ::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 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, 5, 0, 1, 1, "Ui_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu1c(Test_Ui_Sf_BFu1c, "Ui_Sf_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu1i  {
  unsigned int v1;
  ::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 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, 5, 0, 1, 1, "Ui_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu1i(Test_Ui_Sf_BFu1i, "Ui_Sf_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu1ll  {
  unsigned int v1;
  ::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 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, 5, 0, 1, 1, "Ui_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu1ll(Test_Ui_Sf_BFu1ll, "Ui_Sf_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu1s  {
  unsigned int v1;
  ::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 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, 5, 0, 1, 1, "Ui_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu1s(Test_Ui_Sf_BFu1s, "Ui_Sf_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu31i  {
  unsigned int v1;
  ::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 Ui_Sf_BFu31i lv;
    check2(sizeof(lv), 12, "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, 8, 0, 31, 1, "Ui_Sf_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Ui_Sf_BFu31i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu31i(Test_Ui_Sf_BFu31i, "Ui_Sf_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu31ll  {
  unsigned int v1;
  ::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 Ui_Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, ABISELECT(8,5), 0, 31, 1, "Ui_Sf_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "Ui_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu31ll(Test_Ui_Sf_BFu31ll, "Ui_Sf_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu32i  {
  unsigned int v1;
  ::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 Ui_Sf_BFu32i lv;
    check2(sizeof(lv), 12, "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, 8, 0, 32, 1, "Ui_Sf_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Ui_Sf_BFu32i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu32i(Test_Ui_Sf_BFu32i, "Ui_Sf_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu32ll  {
  unsigned int v1;
  ::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 Ui_Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, ABISELECT(8,5), 0, 32, 1, "Ui_Sf_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "Ui_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu32ll(Test_Ui_Sf_BFu32ll, "Ui_Sf_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu33  {
  unsigned int v1;
  ::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 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,5), 0, 33, 1, "Ui_Sf_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "Ui_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu33(Test_Ui_Sf_BFu33, "Ui_Sf_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu7c  {
  unsigned int v1;
  ::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 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, 5, 0, 7, 1, "Ui_Sf_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu7c(Test_Ui_Sf_BFu7c, "Ui_Sf_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu7i  {
  unsigned int v1;
  ::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 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, 5, 0, 7, 1, "Ui_Sf_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu7i(Test_Ui_Sf_BFu7i, "Ui_Sf_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu7ll  {
  unsigned int v1;
  ::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 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, 5, 0, 7, 1, "Ui_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu7ll(Test_Ui_Sf_BFu7ll, "Ui_Sf_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu7s  {
  unsigned int v1;
  ::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 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, 5, 0, 7, 1, "Ui_Sf_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu7s(Test_Ui_Sf_BFu7s, "Ui_Sf_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu8c  {
  unsigned int v1;
  ::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 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, 5, 0, 8, 1, "Ui_Sf_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu8c(Test_Ui_Sf_BFu8c, "Ui_Sf_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu8i  {
  unsigned int v1;
  ::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 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, 5, 0, 8, 1, "Ui_Sf_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu8i(Test_Ui_Sf_BFu8i, "Ui_Sf_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu8ll  {
  unsigned int v1;
  ::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 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, 5, 0, 8, 1, "Ui_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu8ll(Test_Ui_Sf_BFu8ll, "Ui_Sf_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu8s  {
  unsigned int v1;
  ::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 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, 5, 0, 8, 1, "Ui_Sf_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu8s(Test_Ui_Sf_BFu8s, "Ui_Sf_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu9i  {
  unsigned int v1;
  ::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 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, 5, 0, 9, 1, "Ui_Sf_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu9i(Test_Ui_Sf_BFu9i, "Ui_Sf_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu9ll  {
  unsigned int v1;
  ::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 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, 5, 0, 9, 1, "Ui_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu9ll(Test_Ui_Sf_BFu9ll, "Ui_Sf_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_BFu9s  {
  unsigned int v1;
  ::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 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, 6, 0, 9, 1, "Ui_Sf_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vUi_Sf_BFu9s(Test_Ui_Sf_BFu9s, "Ui_Sf_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_C  {
  unsigned int v1;
  ::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");
    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, 5, "Ui_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_C(Test_Ui_Sf_C, "Ui_Sf_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_D  {
  unsigned int v1;
  ::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");
    Ui_Sf_D lv;
    check2(sizeof(lv), 16, "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, 8, "Ui_Sf_D.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_D(Test_Ui_Sf_D, "Ui_Sf_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_F  {
  unsigned int v1;
  ::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");
    Ui_Sf_F lv;
    check2(sizeof(lv), 12, "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, 8, "Ui_Sf_F.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_F(Test_Ui_Sf_F, "Ui_Sf_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_I  {
  unsigned int v1;
  ::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");
    Ui_Sf_I lv;
    check2(sizeof(lv), 12, "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, 8, "Ui_Sf_I.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_I(Test_Ui_Sf_I, "Ui_Sf_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Ip  {
  unsigned int v1;
  ::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");
    Ui_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 8, "Ui_Sf_Ip.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Ip(Test_Ui_Sf_Ip, "Ui_Sf_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_L  {
  unsigned int v1;
  ::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");
    Ui_Sf_L lv;
    check2(sizeof(lv), 16, "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, 8, "Ui_Sf_L.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_L(Test_Ui_Sf_L, "Ui_Sf_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_S  {
  unsigned int v1;
  ::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");
    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, 6, "Ui_Sf_S.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_S(Test_Ui_Sf_S, "Ui_Sf_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Sf  {
  unsigned int v1;
  ::empty v2;
  ::empty v3;
};
//SIG(1 Ui_Sf_Sf) C1{ Fi FC2{} FC2}



static void Test_Ui_Sf_Sf()
{
  {
    init_simple_test("Ui_Sf_Sf");
    Ui_Sf_Sf lv;
    check2(sizeof(lv), 8, "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, 5, "Ui_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Sf(Test_Ui_Sf_Sf, "Ui_Sf_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Uc  {
  unsigned int v1;
  ::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");
    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, 5, "Ui_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Uc(Test_Ui_Sf_Uc, "Ui_Sf_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Ui  {
  unsigned int v1;
  ::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");
    Ui_Sf_Ui lv;
    check2(sizeof(lv), 12, "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, 8, "Ui_Sf_Ui.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Ui(Test_Ui_Sf_Ui, "Ui_Sf_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Ul  {
  unsigned int v1;
  ::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");
    Ui_Sf_Ul lv;
    check2(sizeof(lv), 16, "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, 8, "Ui_Sf_Ul.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Ul(Test_Ui_Sf_Ul, "Ui_Sf_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Us  {
  unsigned int v1;
  ::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");
    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, 6, "Ui_Sf_Us.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Us(Test_Ui_Sf_Us, "Ui_Sf_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Sf_Vp  {
  unsigned int v1;
  ::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");
    Ui_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 8, "Ui_Sf_Vp.v3");
  }
}
static Arrange_To_Call_Me vUi_Sf_Vp(Test_Ui_Sf_Vp, "Ui_Sf_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Uc_Sf  {
  unsigned int v1;
  unsigned char v2;
  ::empty v3;
};
//SIG(1 Ui_Uc_Sf) C1{ Fi Fc FC2{}}



static void Test_Ui_Uc_Sf()
{
  {
    init_simple_test("Ui_Uc_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUi_Uc_Sf(Test_Ui_Uc_Sf, "Ui_Uc_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ui_Sf  {
  unsigned int v1;
  unsigned int v2;
  ::empty v3;
};
//SIG(1 Ui_Ui_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_Ui_Sf()
{
  {
    init_simple_test("Ui_Ui_Sf");
    Ui_Ui_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUi_Ui_Sf(Test_Ui_Ui_Sf, "Ui_Ui_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ul_Sf  {
  unsigned int v1;
  __tsu64 v2;
  ::empty v3;
};
//SIG(1 Ui_Ul_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_Ul_Sf()
{
  {
    init_simple_test("Ui_Ul_Sf");
    Ui_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUi_Ul_Sf(Test_Ui_Ul_Sf, "Ui_Ul_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ui_Us_Sf()
{
  {
    init_simple_test("Ui_Us_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUi_Us_Sf(Test_Ui_Us_Sf, "Ui_Us_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ui_Vp_Sf()
{
  {
    init_simple_test("Ui_Vp_Sf");
    Ui_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUi_Vp_Sf(Test_Ui_Vp_Sf, "Ui_Vp_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15i_Sf  {
  __tsu64 v1;
  unsigned int v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu15i_Sf(Test_Ul_BFu15i_Sf, "Ul_BFu15i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu15ll_Sf(Test_Ul_BFu15ll_Sf, "Ul_BFu15ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15s_Sf  {
  __tsu64 v1;
  unsigned short v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu15s_Sf(Test_Ul_BFu15s_Sf, "Ul_BFu15s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16i_Sf  {
  __tsu64 v1;
  unsigned int v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu16i_Sf(Test_Ul_BFu16i_Sf, "Ul_BFu16i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu16ll_Sf(Test_Ul_BFu16ll_Sf, "Ul_BFu16ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16s_Sf  {
  __tsu64 v1;
  unsigned short v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu16s_Sf(Test_Ul_BFu16s_Sf, "Ul_BFu16s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17i_Sf  {
  __tsu64 v1;
  unsigned int v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu17i_Sf(Test_Ul_BFu17i_Sf, "Ul_BFu17i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu17ll_Sf(Test_Ul_BFu17ll_Sf, "Ul_BFu17ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1c_Sf  {
  __tsu64 v1;
  unsigned char v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu1c_Sf(Test_Ul_BFu1c_Sf, "Ul_BFu1c_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1i_Sf  {
  __tsu64 v1;
  unsigned int v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu1i_Sf(Test_Ul_BFu1i_Sf, "Ul_BFu1i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu1ll_Sf(Test_Ul_BFu1ll_Sf, "Ul_BFu1ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1s_Sf  {
  __tsu64 v1;
  unsigned short v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu1s_Sf(Test_Ul_BFu1s_Sf, "Ul_BFu1s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31i_Sf  {
  __tsu64 v1;
  unsigned int v2:31;
  ::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 Ul_BFu31i_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_BFu31i_Sf(Test_Ul_BFu31i_Sf, "Ul_BFu31i_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:31;
  ::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 Ul_BFu31ll_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_BFu31ll_Sf(Test_Ul_BFu31ll_Sf, "Ul_BFu31ll_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32i_Sf  {
  __tsu64 v1;
  unsigned int v2:32;
  ::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 Ul_BFu32i_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_BFu32i_Sf(Test_Ul_BFu32i_Sf, "Ul_BFu32i_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:32;
  ::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 Ul_BFu32ll_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_BFu32ll_Sf(Test_Ul_BFu32ll_Sf, "Ul_BFu32ll_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu33_Sf  {
  __tsu64 v1;
  __tsu64 v2:33;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu33_Sf(Test_Ul_BFu33_Sf, "Ul_BFu33_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7c_Sf  {
  __tsu64 v1;
  unsigned char v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu7c_Sf(Test_Ul_BFu7c_Sf, "Ul_BFu7c_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7i_Sf  {
  __tsu64 v1;
  unsigned int v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu7i_Sf(Test_Ul_BFu7i_Sf, "Ul_BFu7i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu7ll_Sf(Test_Ul_BFu7ll_Sf, "Ul_BFu7ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7s_Sf  {
  __tsu64 v1;
  unsigned short v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu7s_Sf(Test_Ul_BFu7s_Sf, "Ul_BFu7s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8c_Sf  {
  __tsu64 v1;
  unsigned char v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu8c_Sf(Test_Ul_BFu8c_Sf, "Ul_BFu8c_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8i_Sf  {
  __tsu64 v1;
  unsigned int v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu8i_Sf(Test_Ul_BFu8i_Sf, "Ul_BFu8i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu8ll_Sf(Test_Ul_BFu8ll_Sf, "Ul_BFu8ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8s_Sf  {
  __tsu64 v1;
  unsigned short v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu8s_Sf(Test_Ul_BFu8s_Sf, "Ul_BFu8s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9i_Sf  {
  __tsu64 v1;
  unsigned int v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu9i_Sf(Test_Ul_BFu9i_Sf, "Ul_BFu9i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu9ll_Sf(Test_Ul_BFu9ll_Sf, "Ul_BFu9ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9s_Sf  {
  __tsu64 v1;
  unsigned short v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUl_BFu9s_Sf(Test_Ul_BFu9s_Sf, "Ul_BFu9s_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_C_Sf  {
  __tsu64 v1;
  char v2;
  ::empty v3;
};
//SIG(1 Ul_C_Sf) C1{ FL Fc FC2{}}



static void Test_Ul_C_Sf()
{
  {
    init_simple_test("Ul_C_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUl_C_Sf(Test_Ul_C_Sf, "Ul_C_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ul_D_Sf()
{
  {
    init_simple_test("Ul_D_Sf");
    Ul_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,20), "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");
  }
}
static Arrange_To_Call_Me vUl_D_Sf(Test_Ul_D_Sf, "Ul_D_Sf", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_F_Sf  {
  __tsu64 v1;
  float v2;
  ::empty v3;
};
//SIG(1 Ul_F_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_F_Sf()
{
  {
    init_simple_test("Ul_F_Sf");
    Ul_F_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_F_Sf(Test_Ul_F_Sf, "Ul_F_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_I_Sf  {
  __tsu64 v1;
  int v2;
  ::empty v3;
};
//SIG(1 Ul_I_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_I_Sf()
{
  {
    init_simple_test("Ul_I_Sf");
    Ul_I_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_I_Sf(Test_Ul_I_Sf, "Ul_I_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ul_Ip_Sf()
{
  {
    init_simple_test("Ul_Ip_Sf");
    Ul_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUl_Ip_Sf(Test_Ul_Ip_Sf, "Ul_Ip_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ul_L_Sf()
{
  {
    init_simple_test("Ul_L_Sf");
    Ul_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,20), "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");
  }
}
static Arrange_To_Call_Me vUl_L_Sf(Test_Ul_L_Sf, "Ul_L_Sf", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_S_Sf  {
  __tsu64 v1;
  short v2;
  ::empty v3;
};
//SIG(1 Ul_S_Sf) C1{ FL Fs FC2{}}



static void Test_Ul_S_Sf()
{
  {
    init_simple_test("Ul_S_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUl_S_Sf(Test_Ul_S_Sf, "Ul_S_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf  {
  __tsu64 v1;
  ::empty v2;
};
//SIG(1 Ul_Sf) C1{ FL FC2{}}



static void Test_Ul_Sf()
{
  {
    init_simple_test("Ul_Sf");
    Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vUl_Sf(Test_Ul_Sf, "Ul_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu15i  {
  __tsu64 v1;
  ::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 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, 9, 0, 15, 1, "Ul_Sf_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu15i(Test_Ul_Sf_BFu15i, "Ul_Sf_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu15ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 15, 1, "Ul_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu15ll(Test_Ul_Sf_BFu15ll, "Ul_Sf_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu15s  {
  __tsu64 v1;
  ::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 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, 10, 0, 15, 1, "Ul_Sf_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu15s(Test_Ul_Sf_BFu15s, "Ul_Sf_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu16i  {
  __tsu64 v1;
  ::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 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, 9, 0, 16, 1, "Ul_Sf_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu16i(Test_Ul_Sf_BFu16i, "Ul_Sf_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu16ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 16, 1, "Ul_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu16ll(Test_Ul_Sf_BFu16ll, "Ul_Sf_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu16s  {
  __tsu64 v1;
  ::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 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, 10, 0, 16, 1, "Ul_Sf_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu16s(Test_Ul_Sf_BFu16s, "Ul_Sf_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu17i  {
  __tsu64 v1;
  ::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 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, 9, 0, 17, 1, "Ul_Sf_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "Ul_Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu17i(Test_Ul_Sf_BFu17i, "Ul_Sf_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu17ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 17, 1, "Ul_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "Ul_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu17ll(Test_Ul_Sf_BFu17ll, "Ul_Sf_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu1c  {
  __tsu64 v1;
  ::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 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, 9, 0, 1, 1, "Ul_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu1c(Test_Ul_Sf_BFu1c, "Ul_Sf_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu1i  {
  __tsu64 v1;
  ::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 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, 9, 0, 1, 1, "Ul_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu1i(Test_Ul_Sf_BFu1i, "Ul_Sf_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu1ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 1, 1, "Ul_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu1ll(Test_Ul_Sf_BFu1ll, "Ul_Sf_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu1s  {
  __tsu64 v1;
  ::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 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, 9, 0, 1, 1, "Ul_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu1s(Test_Ul_Sf_BFu1s, "Ul_Sf_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu31i  {
  __tsu64 v1;
  ::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 Ul_Sf_BFu31i lv;
    check2(sizeof(lv), 16, "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, 12, 0, 31, 1, "Ul_Sf_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "Ul_Sf_BFu31i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu31i(Test_Ul_Sf_BFu31i, "Ul_Sf_BFu31i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu31ll  {
  __tsu64 v1;
  ::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 Ul_Sf_BFu31ll lv;
    check2(sizeof(lv), 16, "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, 9, 0, 31, 1, "Ul_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "Ul_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu31ll(Test_Ul_Sf_BFu31ll, "Ul_Sf_BFu31ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu32i  {
  __tsu64 v1;
  ::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 Ul_Sf_BFu32i lv;
    check2(sizeof(lv), 16, "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, 12, 0, 32, 1, "Ul_Sf_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "Ul_Sf_BFu32i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu32i(Test_Ul_Sf_BFu32i, "Ul_Sf_BFu32i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu32ll  {
  __tsu64 v1;
  ::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 Ul_Sf_BFu32ll lv;
    check2(sizeof(lv), 16, "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, 9, 0, 32, 1, "Ul_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "Ul_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu32ll(Test_Ul_Sf_BFu32ll, "Ul_Sf_BFu32ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu33  {
  __tsu64 v1;
  ::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 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, 9, 0, 33, 1, "Ul_Sf_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "Ul_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu33(Test_Ul_Sf_BFu33, "Ul_Sf_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu7c  {
  __tsu64 v1;
  ::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 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, 9, 0, 7, 1, "Ul_Sf_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu7c(Test_Ul_Sf_BFu7c, "Ul_Sf_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu7i  {
  __tsu64 v1;
  ::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 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, 9, 0, 7, 1, "Ul_Sf_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu7i(Test_Ul_Sf_BFu7i, "Ul_Sf_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu7ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 7, 1, "Ul_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu7ll(Test_Ul_Sf_BFu7ll, "Ul_Sf_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu7s  {
  __tsu64 v1;
  ::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 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, 9, 0, 7, 1, "Ul_Sf_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu7s(Test_Ul_Sf_BFu7s, "Ul_Sf_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu8c  {
  __tsu64 v1;
  ::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 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, 9, 0, 8, 1, "Ul_Sf_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu8c(Test_Ul_Sf_BFu8c, "Ul_Sf_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu8i  {
  __tsu64 v1;
  ::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 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, 9, 0, 8, 1, "Ul_Sf_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu8i(Test_Ul_Sf_BFu8i, "Ul_Sf_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu8ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 8, 1, "Ul_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu8ll(Test_Ul_Sf_BFu8ll, "Ul_Sf_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu8s  {
  __tsu64 v1;
  ::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 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, 9, 0, 8, 1, "Ul_Sf_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu8s(Test_Ul_Sf_BFu8s, "Ul_Sf_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu9i  {
  __tsu64 v1;
  ::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 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, 9, 0, 9, 1, "Ul_Sf_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu9i(Test_Ul_Sf_BFu9i, "Ul_Sf_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu9ll  {
  __tsu64 v1;
  ::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 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, 9, 0, 9, 1, "Ul_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu9ll(Test_Ul_Sf_BFu9ll, "Ul_Sf_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_BFu9s  {
  __tsu64 v1;
  ::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 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, 10, 0, 9, 1, "Ul_Sf_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vUl_Sf_BFu9s(Test_Ul_Sf_BFu9s, "Ul_Sf_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_C  {
  __tsu64 v1;
  ::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");
    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, 9, "Ul_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_C(Test_Ul_Sf_C, "Ul_Sf_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_D  {
  __tsu64 v1;
  ::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");
    Ul_Sf_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(16,12), "Ul_Sf_D.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_D(Test_Ul_Sf_D, "Ul_Sf_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_F  {
  __tsu64 v1;
  ::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");
    Ul_Sf_F lv;
    check2(sizeof(lv), 16, "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, 12, "Ul_Sf_F.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_F(Test_Ul_Sf_F, "Ul_Sf_F", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_I  {
  __tsu64 v1;
  ::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");
    Ul_Sf_I lv;
    check2(sizeof(lv), 16, "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, 12, "Ul_Sf_I.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_I(Test_Ul_Sf_I, "Ul_Sf_I", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Ip  {
  __tsu64 v1;
  ::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");
    Ul_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(16,12), "Ul_Sf_Ip.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Ip(Test_Ul_Sf_Ip, "Ul_Sf_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_L  {
  __tsu64 v1;
  ::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");
    Ul_Sf_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(16,12), "Ul_Sf_L.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_L(Test_Ul_Sf_L, "Ul_Sf_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_S  {
  __tsu64 v1;
  ::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");
    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, 10, "Ul_Sf_S.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_S(Test_Ul_Sf_S, "Ul_Sf_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Sf  {
  __tsu64 v1;
  ::empty v2;
  ::empty v3;
};
//SIG(1 Ul_Sf_Sf) C1{ FL FC2{} FC2}



static void Test_Ul_Sf_Sf()
{
  {
    init_simple_test("Ul_Sf_Sf");
    Ul_Sf_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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, 9, "Ul_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Sf(Test_Ul_Sf_Sf, "Ul_Sf_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Uc  {
  __tsu64 v1;
  ::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");
    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, 9, "Ul_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Uc(Test_Ul_Sf_Uc, "Ul_Sf_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Ui  {
  __tsu64 v1;
  ::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");
    Ul_Sf_Ui lv;
    check2(sizeof(lv), 16, "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, 12, "Ul_Sf_Ui.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Ui(Test_Ul_Sf_Ui, "Ul_Sf_Ui", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Ul  {
  __tsu64 v1;
  ::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");
    Ul_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "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, ABISELECT(16,12), "Ul_Sf_Ul.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Ul(Test_Ul_Sf_Ul, "Ul_Sf_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Us  {
  __tsu64 v1;
  ::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");
    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, 10, "Ul_Sf_Us.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Us(Test_Ul_Sf_Us, "Ul_Sf_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Sf_Vp  {
  __tsu64 v1;
  ::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");
    Ul_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "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, ABISELECT(16,12), "Ul_Sf_Vp.v3");
  }
}
static Arrange_To_Call_Me vUl_Sf_Vp(Test_Ul_Sf_Vp, "Ul_Sf_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Uc_Sf  {
  __tsu64 v1;
  unsigned char v2;
  ::empty v3;
};
//SIG(1 Ul_Uc_Sf) C1{ FL Fc FC2{}}



static void Test_Ul_Uc_Sf()
{
  {
    init_simple_test("Ul_Uc_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUl_Uc_Sf(Test_Ul_Uc_Sf, "Ul_Uc_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ui_Sf  {
  __tsu64 v1;
  unsigned int v2;
  ::empty v3;
};
//SIG(1 Ul_Ui_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_Ui_Sf()
{
  {
    init_simple_test("Ul_Ui_Sf");
    Ul_Ui_Sf lv;
    check2(sizeof(lv), 16, "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");
  }
}
static Arrange_To_Call_Me vUl_Ui_Sf(Test_Ul_Ui_Sf, "Ul_Ui_Sf", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ul_Sf  {
  __tsu64 v1;
  __tsu64 v2;
  ::empty v3;
};
//SIG(1 Ul_Ul_Sf) C1{ FL[2] FC2{}}



static void Test_Ul_Ul_Sf()
{
  {
    init_simple_test("Ul_Ul_Sf");
    Ul_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,20), "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");
  }
}
static Arrange_To_Call_Me vUl_Ul_Sf(Test_Ul_Ul_Sf, "Ul_Ul_Sf", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Ul_Us_Sf()
{
  {
    init_simple_test("Ul_Us_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUl_Us_Sf(Test_Ul_Us_Sf, "Ul_Us_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Vp_Sf  {
  __tsu64 v1;
  void *v2;
  ::empty v3;
};
//SIG(1 Ul_Vp_Sf) C1{ FL Fp FC2{}}



static void Test_Ul_Vp_Sf()
{
  {
    init_simple_test("Ul_Vp_Sf");
    Ul_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUl_Vp_Sf(Test_Ul_Vp_Sf, "Ul_Vp_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15i_Sf  {
  unsigned short v1;
  unsigned int v2:15;
  ::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 Us_BFu15i_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu15i_Sf(Test_Us_BFu15i_Sf, "Us_BFu15i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15ll_Sf  {
  unsigned short v1;
  __tsu64 v2:15;
  ::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 Us_BFu15ll_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu15ll_Sf(Test_Us_BFu15ll_Sf, "Us_BFu15ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15s_Sf  {
  unsigned short v1;
  unsigned short v2:15;
  ::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 Us_BFu15s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu15s_Sf(Test_Us_BFu15s_Sf, "Us_BFu15s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16i_Sf  {
  unsigned short v1;
  unsigned int v2:16;
  ::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 Us_BFu16i_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu16i_Sf(Test_Us_BFu16i_Sf, "Us_BFu16i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16ll_Sf  {
  unsigned short v1;
  __tsu64 v2:16;
  ::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 Us_BFu16ll_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu16ll_Sf(Test_Us_BFu16ll_Sf, "Us_BFu16ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16s_Sf  {
  unsigned short v1;
  unsigned short v2:16;
  ::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 Us_BFu16s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu16s_Sf(Test_Us_BFu16s_Sf, "Us_BFu16s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17i_Sf  {
  unsigned short v1;
  unsigned int v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu17i_Sf(Test_Us_BFu17i_Sf, "Us_BFu17i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17ll_Sf  {
  unsigned short v1;
  __tsu64 v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu17ll_Sf(Test_Us_BFu17ll_Sf, "Us_BFu17ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1c_Sf  {
  unsigned short v1;
  unsigned char v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu1c_Sf(Test_Us_BFu1c_Sf, "Us_BFu1c_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1i_Sf  {
  unsigned short v1;
  unsigned int v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu1i_Sf(Test_Us_BFu1i_Sf, "Us_BFu1i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1ll_Sf  {
  unsigned short v1;
  __tsu64 v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu1ll_Sf(Test_Us_BFu1ll_Sf, "Us_BFu1ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1s_Sf  {
  unsigned short v1;
  unsigned short v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu1s_Sf(Test_Us_BFu1s_Sf, "Us_BFu1s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31i_Sf  {
  unsigned short v1;
  unsigned int v2:31;
  ::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 Us_BFu31i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu31i_Sf(Test_Us_BFu31i_Sf, "Us_BFu31i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31ll_Sf  {
  unsigned short v1;
  __tsu64 v2:31;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu31ll_Sf(Test_Us_BFu31ll_Sf, "Us_BFu31ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32i_Sf  {
  unsigned short v1;
  unsigned int v2:32;
  ::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 Us_BFu32i_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu32i_Sf(Test_Us_BFu32i_Sf, "Us_BFu32i_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32ll_Sf  {
  unsigned short v1;
  __tsu64 v2:32;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu32ll_Sf(Test_Us_BFu32ll_Sf, "Us_BFu32ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu33_Sf  {
  unsigned short v1;
  __tsu64 v2:33;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu33_Sf(Test_Us_BFu33_Sf, "Us_BFu33_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7c_Sf  {
  unsigned short v1;
  unsigned char v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu7c_Sf(Test_Us_BFu7c_Sf, "Us_BFu7c_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7i_Sf  {
  unsigned short v1;
  unsigned int v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu7i_Sf(Test_Us_BFu7i_Sf, "Us_BFu7i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7ll_Sf  {
  unsigned short v1;
  __tsu64 v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu7ll_Sf(Test_Us_BFu7ll_Sf, "Us_BFu7ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7s_Sf  {
  unsigned short v1;
  unsigned short v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu7s_Sf(Test_Us_BFu7s_Sf, "Us_BFu7s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8c_Sf  {
  unsigned short v1;
  unsigned char v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu8c_Sf(Test_Us_BFu8c_Sf, "Us_BFu8c_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8i_Sf  {
  unsigned short v1;
  unsigned int v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu8i_Sf(Test_Us_BFu8i_Sf, "Us_BFu8i_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8ll_Sf  {
  unsigned short v1;
  __tsu64 v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu8ll_Sf(Test_Us_BFu8ll_Sf, "Us_BFu8ll_Sf", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8s_Sf  {
  unsigned short v1;
  unsigned short v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_BFu8s_Sf(Test_Us_BFu8s_Sf, "Us_BFu8s_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9i_Sf  {
  unsigned short v1;
  unsigned int v2:9;
  ::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 Us_BFu9i_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu9i_Sf(Test_Us_BFu9i_Sf, "Us_BFu9i_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9ll_Sf  {
  unsigned short v1;
  __tsu64 v2:9;
  ::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 Us_BFu9ll_Sf lv;
    check2(sizeof(lv), 8, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu9ll_Sf(Test_Us_BFu9ll_Sf, "Us_BFu9ll_Sf", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9s_Sf  {
  unsigned short v1;
  unsigned short v2:9;
  ::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 Us_BFu9s_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUs_BFu9s_Sf(Test_Us_BFu9s_Sf, "Us_BFu9s_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_C_Sf()
{
  {
    init_simple_test("Us_C_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUs_C_Sf(Test_Us_C_Sf, "Us_C_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_D_Sf()
{
  {
    init_simple_test("Us_D_Sf");
    Us_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUs_D_Sf(Test_Us_D_Sf, "Us_D_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_F_Sf()
{
  {
    init_simple_test("Us_F_Sf");
    Us_F_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUs_F_Sf(Test_Us_F_Sf, "Us_F_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_I_Sf()
{
  {
    init_simple_test("Us_I_Sf");
    Us_I_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUs_I_Sf(Test_Us_I_Sf, "Us_I_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Ip_Sf()
{
  {
    init_simple_test("Us_Ip_Sf");
    Us_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUs_Ip_Sf(Test_Us_Ip_Sf, "Us_Ip_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_L_Sf()
{
  {
    init_simple_test("Us_L_Sf");
    Us_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUs_L_Sf(Test_Us_L_Sf, "Us_L_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_S_Sf()
{
  {
    init_simple_test("Us_S_Sf");
    Us_S_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUs_S_Sf(Test_Us_S_Sf, "Us_S_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Sf()
{
  {
    init_simple_test("Us_Sf");
    Us_Sf lv;
    check2(sizeof(lv), 4, "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");
  }
}
static Arrange_To_Call_Me vUs_Sf(Test_Us_Sf, "Us_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu15i  {
  unsigned short v1;
  ::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 Us_Sf_BFu15i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 15, 1, "Us_Sf_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu15i(Test_Us_Sf_BFu15i, "Us_Sf_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu15ll  {
  unsigned short v1;
  ::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 Us_Sf_BFu15ll lv;
    check2(sizeof(lv), 8, "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, 3, 0, 15, 1, "Us_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu15ll(Test_Us_Sf_BFu15ll, "Us_Sf_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu15s  {
  unsigned short v1;
  ::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 Us_Sf_BFu15s lv;
    check2(sizeof(lv), 6, "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, 4, 0, 15, 1, "Us_Sf_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu15s(Test_Us_Sf_BFu15s, "Us_Sf_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu16i  {
  unsigned short v1;
  ::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 Us_Sf_BFu16i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 16, 1, "Us_Sf_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu16i(Test_Us_Sf_BFu16i, "Us_Sf_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu16ll  {
  unsigned short v1;
  ::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 Us_Sf_BFu16ll lv;
    check2(sizeof(lv), 8, "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, 3, 0, 16, 1, "Us_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu16ll(Test_Us_Sf_BFu16ll, "Us_Sf_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu16s  {
  unsigned short v1;
  ::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 Us_Sf_BFu16s lv;
    check2(sizeof(lv), 6, "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, 4, 0, 16, 1, "Us_Sf_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu16s(Test_Us_Sf_BFu16s, "Us_Sf_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu17i  {
  unsigned short v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu17i(Test_Us_Sf_BFu17i, "Us_Sf_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu17ll  {
  unsigned short v1;
  ::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 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, 3, 0, 17, 1, "Us_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "Us_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu17ll(Test_Us_Sf_BFu17ll, "Us_Sf_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu1c  {
  unsigned short v1;
  ::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 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, 3, 0, 1, 1, "Us_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu1c(Test_Us_Sf_BFu1c, "Us_Sf_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu1i  {
  unsigned short v1;
  ::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 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, 3, 0, 1, 1, "Us_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu1i(Test_Us_Sf_BFu1i, "Us_Sf_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu1ll  {
  unsigned short v1;
  ::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 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, 3, 0, 1, 1, "Us_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu1ll(Test_Us_Sf_BFu1ll, "Us_Sf_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu1s  {
  unsigned short v1;
  ::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 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, 3, 0, 1, 1, "Us_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu1s(Test_Us_Sf_BFu1s, "Us_Sf_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu31i  {
  unsigned short v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu31i(Test_Us_Sf_BFu31i, "Us_Sf_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu31ll  {
  unsigned short v1;
  ::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 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, 3, 0, 31, 1, "Us_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "Us_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu31ll(Test_Us_Sf_BFu31ll, "Us_Sf_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu32i  {
  unsigned short v1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu32i(Test_Us_Sf_BFu32i, "Us_Sf_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu32ll  {
  unsigned short v1;
  ::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 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, 3, 0, 32, 1, "Us_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "Us_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu32ll(Test_Us_Sf_BFu32ll, "Us_Sf_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu33  {
  unsigned short v1;
  ::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 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, 3, 0, 33, 1, "Us_Sf_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "Us_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu33(Test_Us_Sf_BFu33, "Us_Sf_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu7c  {
  unsigned short v1;
  ::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 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, 3, 0, 7, 1, "Us_Sf_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu7c(Test_Us_Sf_BFu7c, "Us_Sf_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu7i  {
  unsigned short v1;
  ::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 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, 3, 0, 7, 1, "Us_Sf_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu7i(Test_Us_Sf_BFu7i, "Us_Sf_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu7ll  {
  unsigned short v1;
  ::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 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, 3, 0, 7, 1, "Us_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu7ll(Test_Us_Sf_BFu7ll, "Us_Sf_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu7s  {
  unsigned short v1;
  ::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 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, 3, 0, 7, 1, "Us_Sf_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu7s(Test_Us_Sf_BFu7s, "Us_Sf_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu8c  {
  unsigned short v1;
  ::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 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, 3, 0, 8, 1, "Us_Sf_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu8c(Test_Us_Sf_BFu8c, "Us_Sf_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu8i  {
  unsigned short v1;
  ::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 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, 3, 0, 8, 1, "Us_Sf_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu8i(Test_Us_Sf_BFu8i, "Us_Sf_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu8ll  {
  unsigned short v1;
  ::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 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, 3, 0, 8, 1, "Us_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu8ll(Test_Us_Sf_BFu8ll, "Us_Sf_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu8s  {
  unsigned short v1;
  ::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 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, 3, 0, 8, 1, "Us_Sf_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu8s(Test_Us_Sf_BFu8s, "Us_Sf_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu9i  {
  unsigned short v1;
  ::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 Us_Sf_BFu9i lv;
    check2(sizeof(lv), 8, "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, 4, 0, 9, 1, "Us_Sf_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu9i(Test_Us_Sf_BFu9i, "Us_Sf_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu9ll  {
  unsigned short v1;
  ::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 Us_Sf_BFu9ll lv;
    check2(sizeof(lv), 8, "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, 3, 0, 9, 1, "Us_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu9ll(Test_Us_Sf_BFu9ll, "Us_Sf_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_BFu9s  {
  unsigned short v1;
  ::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 Us_Sf_BFu9s lv;
    check2(sizeof(lv), 6, "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, 4, 0, 9, 1, "Us_Sf_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vUs_Sf_BFu9s(Test_Us_Sf_BFu9s, "Us_Sf_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_C  {
  unsigned short v1;
  ::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");
    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, 3, "Us_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vUs_Sf_C(Test_Us_Sf_C, "Us_Sf_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_D  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_D(Test_Us_Sf_D, "Us_Sf_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_F  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_F(Test_Us_Sf_F, "Us_Sf_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_I  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_I(Test_Us_Sf_I, "Us_Sf_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Ip  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_Ip(Test_Us_Sf_Ip, "Us_Sf_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_L  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_L(Test_Us_Sf_L, "Us_Sf_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_S  {
  unsigned short v1;
  ::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");
    Us_Sf_S lv;
    check2(sizeof(lv), 6, "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, 4, "Us_Sf_S.v3");
  }
}
static Arrange_To_Call_Me vUs_Sf_S(Test_Us_Sf_S, "Us_Sf_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Sf_Sf()
{
  {
    init_simple_test("Us_Sf_Sf");
    Us_Sf_Sf lv;
    check2(sizeof(lv), 4, "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, 3, "Us_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vUs_Sf_Sf(Test_Us_Sf_Sf, "Us_Sf_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Uc  {
  unsigned short v1;
  ::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");
    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, 3, "Us_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vUs_Sf_Uc(Test_Us_Sf_Uc, "Us_Sf_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Ui  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_Ui(Test_Us_Sf_Ui, "Us_Sf_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Ul  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_Ul(Test_Us_Sf_Ul, "Us_Sf_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Us  {
  unsigned short v1;
  ::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");
    Us_Sf_Us lv;
    check2(sizeof(lv), 6, "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, 4, "Us_Sf_Us.v3");
  }
}
static Arrange_To_Call_Me vUs_Sf_Us(Test_Us_Sf_Us, "Us_Sf_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Sf_Vp  {
  unsigned short v1;
  ::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");
    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");
  }
}
static Arrange_To_Call_Me vUs_Sf_Vp(Test_Us_Sf_Vp, "Us_Sf_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Uc_Sf()
{
  {
    init_simple_test("Us_Uc_Sf");
    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");
  }
}
static Arrange_To_Call_Me vUs_Uc_Sf(Test_Us_Uc_Sf, "Us_Uc_Sf", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Ui_Sf()
{
  {
    init_simple_test("Us_Ui_Sf");
    Us_Ui_Sf lv;
    check2(sizeof(lv), 12, "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");
  }
}
static Arrange_To_Call_Me vUs_Ui_Sf(Test_Us_Ui_Sf, "Us_Ui_Sf", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Ul_Sf()
{
  {
    init_simple_test("Us_Ul_Sf");
    Us_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vUs_Ul_Sf(Test_Us_Ul_Sf, "Us_Ul_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Us_Sf()
{
  {
    init_simple_test("Us_Us_Sf");
    Us_Us_Sf lv;
    check2(sizeof(lv), 6, "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");
  }
}
static Arrange_To_Call_Me vUs_Us_Sf(Test_Us_Us_Sf, "Us_Us_Sf", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Us_Vp_Sf()
{
  {
    init_simple_test("Us_Vp_Sf");
    Us_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vUs_Vp_Sf(Test_Us_Vp_Sf, "Us_Vp_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15i_Sf  {
  void *v1;
  unsigned int v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu15i_Sf(Test_Vp_BFu15i_Sf, "Vp_BFu15i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15ll_Sf  {
  void *v1;
  __tsu64 v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu15ll_Sf(Test_Vp_BFu15ll_Sf, "Vp_BFu15ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15s_Sf  {
  void *v1;
  unsigned short v2:15;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu15s_Sf(Test_Vp_BFu15s_Sf, "Vp_BFu15s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16i_Sf  {
  void *v1;
  unsigned int v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu16i_Sf(Test_Vp_BFu16i_Sf, "Vp_BFu16i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16ll_Sf  {
  void *v1;
  __tsu64 v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu16ll_Sf(Test_Vp_BFu16ll_Sf, "Vp_BFu16ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16s_Sf  {
  void *v1;
  unsigned short v2:16;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu16s_Sf(Test_Vp_BFu16s_Sf, "Vp_BFu16s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17i_Sf  {
  void *v1;
  unsigned int v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu17i_Sf(Test_Vp_BFu17i_Sf, "Vp_BFu17i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17ll_Sf  {
  void *v1;
  __tsu64 v2:17;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu17ll_Sf(Test_Vp_BFu17ll_Sf, "Vp_BFu17ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1c_Sf  {
  void *v1;
  unsigned char v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu1c_Sf(Test_Vp_BFu1c_Sf, "Vp_BFu1c_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1i_Sf  {
  void *v1;
  unsigned int v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu1i_Sf(Test_Vp_BFu1i_Sf, "Vp_BFu1i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1ll_Sf  {
  void *v1;
  __tsu64 v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu1ll_Sf(Test_Vp_BFu1ll_Sf, "Vp_BFu1ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1s_Sf  {
  void *v1;
  unsigned short v2:1;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu1s_Sf(Test_Vp_BFu1s_Sf, "Vp_BFu1s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31i_Sf  {
  void *v1;
  unsigned int v2:31;
  ::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 Vp_BFu31i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_BFu31i_Sf(Test_Vp_BFu31i_Sf, "Vp_BFu31i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31ll_Sf  {
  void *v1;
  __tsu64 v2:31;
  ::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 Vp_BFu31ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_BFu31ll_Sf(Test_Vp_BFu31ll_Sf, "Vp_BFu31ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32i_Sf  {
  void *v1;
  unsigned int v2:32;
  ::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 Vp_BFu32i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_BFu32i_Sf(Test_Vp_BFu32i_Sf, "Vp_BFu32i_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32ll_Sf  {
  void *v1;
  __tsu64 v2:32;
  ::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 Vp_BFu32ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_BFu32ll_Sf(Test_Vp_BFu32ll_Sf, "Vp_BFu32ll_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu33_Sf  {
  void *v1;
  __tsu64 v2:33;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu33_Sf(Test_Vp_BFu33_Sf, "Vp_BFu33_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7c_Sf  {
  void *v1;
  unsigned char v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu7c_Sf(Test_Vp_BFu7c_Sf, "Vp_BFu7c_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7i_Sf  {
  void *v1;
  unsigned int v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu7i_Sf(Test_Vp_BFu7i_Sf, "Vp_BFu7i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7ll_Sf  {
  void *v1;
  __tsu64 v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu7ll_Sf(Test_Vp_BFu7ll_Sf, "Vp_BFu7ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7s_Sf  {
  void *v1;
  unsigned short v2:7;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu7s_Sf(Test_Vp_BFu7s_Sf, "Vp_BFu7s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8c_Sf  {
  void *v1;
  unsigned char v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu8c_Sf(Test_Vp_BFu8c_Sf, "Vp_BFu8c_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8i_Sf  {
  void *v1;
  unsigned int v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu8i_Sf(Test_Vp_BFu8i_Sf, "Vp_BFu8i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8ll_Sf  {
  void *v1;
  __tsu64 v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu8ll_Sf(Test_Vp_BFu8ll_Sf, "Vp_BFu8ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8s_Sf  {
  void *v1;
  unsigned short v2:8;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu8s_Sf(Test_Vp_BFu8s_Sf, "Vp_BFu8s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9i_Sf  {
  void *v1;
  unsigned int v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu9i_Sf(Test_Vp_BFu9i_Sf, "Vp_BFu9i_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9ll_Sf  {
  void *v1;
  __tsu64 v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu9ll_Sf(Test_Vp_BFu9ll_Sf, "Vp_BFu9ll_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9s_Sf  {
  void *v1;
  unsigned short v2:9;
  ::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 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");
  }
}
static Arrange_To_Call_Me vVp_BFu9s_Sf(Test_Vp_BFu9s_Sf, "Vp_BFu9s_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_C_Sf  {
  void *v1;
  char v2;
  ::empty v3;
};
//SIG(1 Vp_C_Sf) C1{ Fp Fc FC2{}}



static void Test_Vp_C_Sf()
{
  {
    init_simple_test("Vp_C_Sf");
    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");
  }
}
static Arrange_To_Call_Me vVp_C_Sf(Test_Vp_C_Sf, "Vp_C_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_D_Sf  {
  void *v1;
  double v2;
  ::empty v3;
};
//SIG(1 Vp_D_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_D_Sf()
{
  {
    init_simple_test("Vp_D_Sf");
    Vp_D_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vVp_D_Sf(Test_Vp_D_Sf, "Vp_D_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_F_Sf  {
  void *v1;
  float v2;
  ::empty v3;
};
//SIG(1 Vp_F_Sf) C1{ Fp Fi FC2{}}



static void Test_Vp_F_Sf()
{
  {
    init_simple_test("Vp_F_Sf");
    Vp_F_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_F_Sf(Test_Vp_F_Sf, "Vp_F_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_I_Sf  {
  void *v1;
  int v2;
  ::empty v3;
};
//SIG(1 Vp_I_Sf) C1{ Fp Fi FC2{}}



static void Test_Vp_I_Sf()
{
  {
    init_simple_test("Vp_I_Sf");
    Vp_I_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_I_Sf(Test_Vp_I_Sf, "Vp_I_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ip_Sf  {
  void *v1;
  int *v2;
  ::empty v3;
};
//SIG(1 Vp_Ip_Sf) C1{ Fp[2] FC2{}}



static void Test_Vp_Ip_Sf()
{
  {
    init_simple_test("Vp_Ip_Sf");
    Vp_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vVp_Ip_Sf(Test_Vp_Ip_Sf, "Vp_Ip_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_L_Sf  {
  void *v1;
  __tsi64 v2;
  ::empty v3;
};
//SIG(1 Vp_L_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_L_Sf()
{
  {
    init_simple_test("Vp_L_Sf");
    Vp_L_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vVp_L_Sf(Test_Vp_L_Sf, "Vp_L_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_S_Sf  {
  void *v1;
  short v2;
  ::empty v3;
};
//SIG(1 Vp_S_Sf) C1{ Fp Fs FC2{}}



static void Test_Vp_S_Sf()
{
  {
    init_simple_test("Vp_S_Sf");
    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");
  }
}
static Arrange_To_Call_Me vVp_S_Sf(Test_Vp_S_Sf, "Vp_S_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf  {
  void *v1;
  ::empty v2;
};
//SIG(1 Vp_Sf) C1{ Fp FC2{}}



static void Test_Vp_Sf()
{
  {
    init_simple_test("Vp_Sf");
    Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "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");
  }
}
static Arrange_To_Call_Me vVp_Sf(Test_Vp_Sf, "Vp_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu15i  {
  void *v1;
  ::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 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(9,5), 0, 15, 1, "Vp_Sf_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu15i(Test_Vp_Sf_BFu15i, "Vp_Sf_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu15ll  {
  void *v1;
  ::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 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(9,5), 0, 15, 1, "Vp_Sf_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu15ll(Test_Vp_Sf_BFu15ll, "Vp_Sf_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu15s  {
  void *v1;
  ::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 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(10,6), 0, 15, 1, "Vp_Sf_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu15s(Test_Vp_Sf_BFu15s, "Vp_Sf_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu16i  {
  void *v1;
  ::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 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(9,5), 0, 16, 1, "Vp_Sf_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu16i(Test_Vp_Sf_BFu16i, "Vp_Sf_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu16ll  {
  void *v1;
  ::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 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(9,5), 0, 16, 1, "Vp_Sf_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu16ll(Test_Vp_Sf_BFu16ll, "Vp_Sf_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu16s  {
  void *v1;
  ::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 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(10,6), 0, 16, 1, "Vp_Sf_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu16s(Test_Vp_Sf_BFu16s, "Vp_Sf_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu17i  {
  void *v1;
  ::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 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(9,5), 0, 17, 1, "Vp_Sf_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Vp_Sf_BFu17i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu17i(Test_Vp_Sf_BFu17i, "Vp_Sf_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu17ll  {
  void *v1;
  ::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 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(9,5), 0, 17, 1, "Vp_Sf_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Vp_Sf_BFu17ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu17ll(Test_Vp_Sf_BFu17ll, "Vp_Sf_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu1c  {
  void *v1;
  ::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 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(9,5), 0, 1, 1, "Vp_Sf_BFu1c");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu1c(Test_Vp_Sf_BFu1c, "Vp_Sf_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu1i  {
  void *v1;
  ::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 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(9,5), 0, 1, 1, "Vp_Sf_BFu1i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu1i(Test_Vp_Sf_BFu1i, "Vp_Sf_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu1ll  {
  void *v1;
  ::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 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(9,5), 0, 1, 1, "Vp_Sf_BFu1ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu1ll(Test_Vp_Sf_BFu1ll, "Vp_Sf_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu1s  {
  void *v1;
  ::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 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(9,5), 0, 1, 1, "Vp_Sf_BFu1s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu1s(Test_Vp_Sf_BFu1s, "Vp_Sf_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu31i  {
  void *v1;
  ::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 Vp_Sf_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(12,8), 0, 31, 1, "Vp_Sf_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Vp_Sf_BFu31i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu31i(Test_Vp_Sf_BFu31i, "Vp_Sf_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu31ll  {
  void *v1;
  ::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 Vp_Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(9,5), 0, 31, 1, "Vp_Sf_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Vp_Sf_BFu31ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu31ll(Test_Vp_Sf_BFu31ll, "Vp_Sf_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu32i  {
  void *v1;
  ::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 Vp_Sf_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(12,8), 0, 32, 1, "Vp_Sf_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Vp_Sf_BFu32i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu32i(Test_Vp_Sf_BFu32i, "Vp_Sf_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu32ll  {
  void *v1;
  ::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 Vp_Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(9,5), 0, 32, 1, "Vp_Sf_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Vp_Sf_BFu32ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu32ll(Test_Vp_Sf_BFu32ll, "Vp_Sf_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu33  {
  void *v1;
  ::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 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(9,5), 0, 33, 1, "Vp_Sf_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Vp_Sf_BFu33");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu33(Test_Vp_Sf_BFu33, "Vp_Sf_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu7c  {
  void *v1;
  ::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 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(9,5), 0, 7, 1, "Vp_Sf_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7c");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu7c(Test_Vp_Sf_BFu7c, "Vp_Sf_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu7i  {
  void *v1;
  ::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 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(9,5), 0, 7, 1, "Vp_Sf_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu7i(Test_Vp_Sf_BFu7i, "Vp_Sf_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu7ll  {
  void *v1;
  ::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 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(9,5), 0, 7, 1, "Vp_Sf_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu7ll(Test_Vp_Sf_BFu7ll, "Vp_Sf_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu7s  {
  void *v1;
  ::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 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(9,5), 0, 7, 1, "Vp_Sf_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu7s(Test_Vp_Sf_BFu7s, "Vp_Sf_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu8c  {
  void *v1;
  ::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 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(9,5), 0, 8, 1, "Vp_Sf_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8c");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu8c(Test_Vp_Sf_BFu8c, "Vp_Sf_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu8i  {
  void *v1;
  ::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 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(9,5), 0, 8, 1, "Vp_Sf_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu8i(Test_Vp_Sf_BFu8i, "Vp_Sf_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu8ll  {
  void *v1;
  ::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 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(9,5), 0, 8, 1, "Vp_Sf_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu8ll(Test_Vp_Sf_BFu8ll, "Vp_Sf_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu8s  {
  void *v1;
  ::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 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(9,5), 0, 8, 1, "Vp_Sf_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu8s(Test_Vp_Sf_BFu8s, "Vp_Sf_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu9i  {
  void *v1;
  ::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 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(9,5), 0, 9, 1, "Vp_Sf_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9i");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu9i(Test_Vp_Sf_BFu9i, "Vp_Sf_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu9ll  {
  void *v1;
  ::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 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(9,5), 0, 9, 1, "Vp_Sf_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9ll");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu9ll(Test_Vp_Sf_BFu9ll, "Vp_Sf_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_BFu9s  {
  void *v1;
  ::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 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(10,6), 0, 9, 1, "Vp_Sf_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9s");
  }
}
static Arrange_To_Call_Me vVp_Sf_BFu9s(Test_Vp_Sf_BFu9s, "Vp_Sf_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_C  {
  void *v1;
  ::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");
    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(9,5), "Vp_Sf_C.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_C(Test_Vp_Sf_C, "Vp_Sf_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_D  {
  void *v1;
  ::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");
    Vp_Sf_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "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(16,8), "Vp_Sf_D.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_D(Test_Vp_Sf_D, "Vp_Sf_D", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_F  {
  void *v1;
  ::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");
    Vp_Sf_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(12,8), "Vp_Sf_F.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_F(Test_Vp_Sf_F, "Vp_Sf_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_I  {
  void *v1;
  ::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");
    Vp_Sf_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(12,8), "Vp_Sf_I.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_I(Test_Vp_Sf_I, "Vp_Sf_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Ip  {
  void *v1;
  ::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");
    Vp_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "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(16,8), "Vp_Sf_Ip.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Ip(Test_Vp_Sf_Ip, "Vp_Sf_Ip", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_L  {
  void *v1;
  ::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");
    Vp_Sf_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "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(16,8), "Vp_Sf_L.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_L(Test_Vp_Sf_L, "Vp_Sf_L", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_S  {
  void *v1;
  ::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");
    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(10,6), "Vp_Sf_S.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_S(Test_Vp_Sf_S, "Vp_Sf_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Sf  {
  void *v1;
  ::empty v2;
  ::empty v3;
};
//SIG(1 Vp_Sf_Sf) C1{ Fp FC2{} FC2}



static void Test_Vp_Sf_Sf()
{
  {
    init_simple_test("Vp_Sf_Sf");
    Vp_Sf_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "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(9,5), "Vp_Sf_Sf.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Sf(Test_Vp_Sf_Sf, "Vp_Sf_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Uc  {
  void *v1;
  ::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");
    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(9,5), "Vp_Sf_Uc.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Uc(Test_Vp_Sf_Uc, "Vp_Sf_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Ui  {
  void *v1;
  ::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");
    Vp_Sf_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "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(12,8), "Vp_Sf_Ui.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Ui(Test_Vp_Sf_Ui, "Vp_Sf_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Ul  {
  void *v1;
  ::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");
    Vp_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "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(16,8), "Vp_Sf_Ul.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Ul(Test_Vp_Sf_Ul, "Vp_Sf_Ul", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Us  {
  void *v1;
  ::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");
    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(10,6), "Vp_Sf_Us.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Us(Test_Vp_Sf_Us, "Vp_Sf_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Sf_Vp  {
  void *v1;
  ::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");
    Vp_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "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(16,8), "Vp_Sf_Vp.v3");
  }
}
static Arrange_To_Call_Me vVp_Sf_Vp(Test_Vp_Sf_Vp, "Vp_Sf_Vp", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Vp_Uc_Sf()
{
  {
    init_simple_test("Vp_Uc_Sf");
    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");
  }
}
static Arrange_To_Call_Me vVp_Uc_Sf(Test_Vp_Uc_Sf, "Vp_Uc_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Vp_Ui_Sf()
{
  {
    init_simple_test("Vp_Ui_Sf");
    Vp_Ui_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "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");
  }
}
static Arrange_To_Call_Me vVp_Ui_Sf(Test_Vp_Ui_Sf, "Vp_Ui_Sf", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ul_Sf  {
  void *v1;
  __tsu64 v2;
  ::empty v3;
};
//SIG(1 Vp_Ul_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_Ul_Sf()
{
  {
    init_simple_test("Vp_Ul_Sf");
    Vp_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(24,16), "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");
  }
}
static Arrange_To_Call_Me vVp_Ul_Sf(Test_Vp_Ul_Sf, "Vp_Ul_Sf", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

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



static void Test_Vp_Us_Sf()
{
  {
    init_simple_test("Vp_Us_Sf");
    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");
  }
}
static Arrange_To_Call_Me vVp_Us_Sf(Test_Vp_Us_Sf, "Vp_Us_Sf", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Vp_Sf  {
  void *v1;
  void *v2;
  ::empty v3;
};
//SIG(1 Vp_Vp_Sf) C1{ Fp[2] FC2{}}



static void Test_Vp_Vp_Sf()
{
  {
    init_simple_test("Vp_Vp_Sf");
    Vp_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(24,12), "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");
  }
}
static Arrange_To_Call_Me vVp_Vp_Sf(Test_Vp_Vp_Sf, "Vp_Vp_Sf", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

