// 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  BFu0c_BFu0s_BFs0s_BFs0s  {
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0c_BFu0s_BFs0s_BFs0s) C1{ Fc:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0c_BFu0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFs0s_BFs0s");
    static BFu0c_BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFs0s_BFs0s(Test_BFu0c_BFu0s_BFs0s_BFs0s, "BFu0c_BFu0s_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFs0s_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFs0s_BFu0c) C1{ Fc:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0c_BFu0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFs0s_BFu0c");
    static BFu0c_BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFs0s_BFu0c(Test_BFu0c_BFu0s_BFs0s_BFu0c, "BFu0c_BFu0s_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFs0s_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFs0s_BFu0i) C1{ Fc:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0c_BFu0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFs0s_BFu0i");
    static BFu0c_BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFs0s_BFu0i(Test_BFu0c_BFu0s_BFs0s_BFu0i, "BFu0c_BFu0s_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFs0s_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFs0s_BFu0ll) C1{ Fc:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0c_BFu0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFs0s_BFu0ll");
    static BFu0c_BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFs0s_BFu0ll(Test_BFu0c_BFu0s_BFs0s_BFu0ll, "BFu0c_BFu0s_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFs0s_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFs0s_BFu0s) C1{ Fc:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0c_BFu0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFs0s_BFu0s");
    static BFu0c_BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFs0s_BFu0s(Test_BFu0c_BFu0s_BFs0s_BFu0s, "BFu0c_BFu0s_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c) C1{ Fc:0 Fs:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c");
    static BFu0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c(Test_BFu0c_BFu0s_BFu0c, "BFu0c_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFs0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFs0c) C1{ Fc:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFs0c");
    static BFu0c_BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFs0c(Test_BFu0c_BFu0s_BFu0c_BFs0c, "BFu0c_BFu0s_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFs0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFs0i) C1{ Fc:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFs0i");
    static BFu0c_BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFs0i(Test_BFu0c_BFu0s_BFu0c_BFs0i, "BFu0c_BFu0s_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFs0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFs0ll) C1{ Fc:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFs0ll");
    static BFu0c_BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFs0ll(Test_BFu0c_BFu0s_BFu0c_BFs0ll, "BFu0c_BFu0s_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFs0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFs0s) C1{ Fc:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFs0s");
    static BFu0c_BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFs0s(Test_BFu0c_BFu0s_BFu0c_BFs0s, "BFu0c_BFu0s_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFu0c) C1{ Fc:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFu0c");
    static BFu0c_BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFu0c(Test_BFu0c_BFu0s_BFu0c_BFu0c, "BFu0c_BFu0s_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFu0i) C1{ Fc:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFu0i");
    static BFu0c_BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFu0i(Test_BFu0c_BFu0s_BFu0c_BFu0i, "BFu0c_BFu0s_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFu0ll) C1{ Fc:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFu0ll");
    static BFu0c_BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFu0ll(Test_BFu0c_BFu0s_BFu0c_BFu0ll, "BFu0c_BFu0s_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0c_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0c_BFu0s) C1{ Fc:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0c_BFu0s");
    static BFu0c_BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0c_BFu0s(Test_BFu0c_BFu0s_BFu0c_BFu0s, "BFu0c_BFu0s_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i) C1{ Fc:0 Fs:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i");
    static BFu0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i(Test_BFu0c_BFu0s_BFu0i, "BFu0c_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFs0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFs0c) C1{ Fc:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFs0c");
    static BFu0c_BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFs0c(Test_BFu0c_BFu0s_BFu0i_BFs0c, "BFu0c_BFu0s_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFs0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFs0i) C1{ Fc:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFs0i");
    static BFu0c_BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFs0i(Test_BFu0c_BFu0s_BFu0i_BFs0i, "BFu0c_BFu0s_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFs0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFs0ll) C1{ Fc:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFs0ll");
    static BFu0c_BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFs0ll(Test_BFu0c_BFu0s_BFu0i_BFs0ll, "BFu0c_BFu0s_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFs0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFs0s) C1{ Fc:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFs0s");
    static BFu0c_BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFs0s(Test_BFu0c_BFu0s_BFu0i_BFs0s, "BFu0c_BFu0s_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFu0c) C1{ Fc:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFu0c");
    static BFu0c_BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFu0c(Test_BFu0c_BFu0s_BFu0i_BFu0c, "BFu0c_BFu0s_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFu0i) C1{ Fc:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFu0i");
    static BFu0c_BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFu0i(Test_BFu0c_BFu0s_BFu0i_BFu0i, "BFu0c_BFu0s_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFu0ll) C1{ Fc:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFu0ll");
    static BFu0c_BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFu0ll(Test_BFu0c_BFu0s_BFu0i_BFu0ll, "BFu0c_BFu0s_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0i_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0i_BFu0s) C1{ Fc:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0i_BFu0s");
    static BFu0c_BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0i_BFu0s(Test_BFu0c_BFu0s_BFu0i_BFu0s, "BFu0c_BFu0s_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll) C1{ Fc:0 Fs:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll");
    static BFu0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll(Test_BFu0c_BFu0s_BFu0ll, "BFu0c_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFs0c  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFs0c) C1{ Fc:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFs0c");
    static BFu0c_BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFs0c(Test_BFu0c_BFu0s_BFu0ll_BFs0c, "BFu0c_BFu0s_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFs0i  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFs0i) C1{ Fc:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFs0i");
    static BFu0c_BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFs0i(Test_BFu0c_BFu0s_BFu0ll_BFs0i, "BFu0c_BFu0s_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFs0ll  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFs0ll) C1{ Fc:0 Fs:0 FL:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFs0ll");
    static BFu0c_BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFs0ll(Test_BFu0c_BFu0s_BFu0ll_BFs0ll, "BFu0c_BFu0s_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFs0s  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFs0s) C1{ Fc:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFs0s");
    static BFu0c_BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFs0s(Test_BFu0c_BFu0s_BFu0ll_BFs0s, "BFu0c_BFu0s_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFu0c) C1{ Fc:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFu0c");
    static BFu0c_BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFu0c(Test_BFu0c_BFu0s_BFu0ll_BFu0c, "BFu0c_BFu0s_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFu0i) C1{ Fc:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFu0i");
    static BFu0c_BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFu0i(Test_BFu0c_BFu0s_BFu0ll_BFu0i, "BFu0c_BFu0s_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFu0ll) C1{ Fc:0 Fs:0 FL:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFu0ll");
    static BFu0c_BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFu0ll(Test_BFu0c_BFu0s_BFu0ll_BFu0ll, "BFu0c_BFu0s_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0ll_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0ll_BFu0s) C1{ Fc:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0ll_BFu0s");
    static BFu0c_BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0ll_BFu0s(Test_BFu0c_BFu0s_BFu0ll_BFu0s, "BFu0c_BFu0s_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s) C1{ Fc:0 Fs:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s");
    static BFu0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s(Test_BFu0c_BFu0s_BFu0s, "BFu0c_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFs0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFs0c) C1{ Fc:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFs0c");
    static BFu0c_BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFs0c(Test_BFu0c_BFu0s_BFu0s_BFs0c, "BFu0c_BFu0s_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFs0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFs0i) C1{ Fc:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFs0i");
    static BFu0c_BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFs0i(Test_BFu0c_BFu0s_BFu0s_BFs0i, "BFu0c_BFu0s_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFs0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFs0ll) C1{ Fc:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFs0ll");
    static BFu0c_BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFs0ll(Test_BFu0c_BFu0s_BFu0s_BFs0ll, "BFu0c_BFu0s_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFs0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFs0s) C1{ Fc:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFs0s");
    static BFu0c_BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFs0s(Test_BFu0c_BFu0s_BFu0s_BFs0s, "BFu0c_BFu0s_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFu0c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFu0c) C1{ Fc:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0c_BFu0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFu0c");
    static BFu0c_BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFu0c(Test_BFu0c_BFu0s_BFu0s_BFu0c, "BFu0c_BFu0s_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFu0i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFu0i) C1{ Fc:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0c_BFu0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFu0i");
    static BFu0c_BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFu0i(Test_BFu0c_BFu0s_BFu0s_BFu0i, "BFu0c_BFu0s_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFu0ll  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFu0ll) C1{ Fc:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0c_BFu0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFu0ll");
    static BFu0c_BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFu0ll(Test_BFu0c_BFu0s_BFu0s_BFu0ll, "BFu0c_BFu0s_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu0s_BFu0s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu0s_BFu0s_BFu0s) C1{ Fc:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0c_BFu0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu0s_BFu0s");
    static BFu0c_BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu0s_BFu0s(Test_BFu0c_BFu0s_BFu0s_BFu0s, "BFu0c_BFu0s_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu15i");
    static BFu0c_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu15i(Test_BFu0c_BFu0s_BFu15i, "BFu0c_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu15ll");
    static BFu0c_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu15ll(Test_BFu0c_BFu0s_BFu15ll, "BFu0c_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu15s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0c_BFu0s_BFu15s) C1{ Fc:0 Fs:0 Fs:15}



static void Test_BFu0c_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu15s");
    static BFu0c_BFu0s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu15s(Test_BFu0c_BFu0s_BFu15s, "BFu0c_BFu0s_BFu15s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu16i");
    static BFu0c_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu16i(Test_BFu0c_BFu0s_BFu16i, "BFu0c_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu16ll");
    static BFu0c_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu16ll(Test_BFu0c_BFu0s_BFu16ll, "BFu0c_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu16s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0c_BFu0s_BFu16s) C1{ Fc:0 Fs:0 Fs:16}



static void Test_BFu0c_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu16s");
    static BFu0c_BFu0s_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu16s(Test_BFu0c_BFu0s_BFu16s, "BFu0c_BFu0s_BFu16s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu17i");
    static BFu0c_BFu0s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu17i(Test_BFu0c_BFu0s_BFu17i, "BFu0c_BFu0s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu17ll");
    static BFu0c_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu17ll(Test_BFu0c_BFu0s_BFu17ll, "BFu0c_BFu0s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu1c");
    static BFu0c_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu1c(Test_BFu0c_BFu0s_BFu1c, "BFu0c_BFu0s_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu1i  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0c_BFu0s_BFu1i) C1{ Fc:0 Fs:0 Fi:1}



static void Test_BFu0c_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu1i");
    static BFu0c_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu1i(Test_BFu0c_BFu0s_BFu1i, "BFu0c_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu1ll  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0c_BFu0s_BFu1ll) C1{ Fc:0 Fs:0 FL:1}



static void Test_BFu0c_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu1ll");
    static BFu0c_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu1ll(Test_BFu0c_BFu0s_BFu1ll, "BFu0c_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu1s");
    static BFu0c_BFu0s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu1s(Test_BFu0c_BFu0s_BFu1s, "BFu0c_BFu0s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu31i");
    static BFu0c_BFu0s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu31i(Test_BFu0c_BFu0s_BFu31i, "BFu0c_BFu0s_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu31ll");
    static BFu0c_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu31ll(Test_BFu0c_BFu0s_BFu31ll, "BFu0c_BFu0s_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu32i");
    static BFu0c_BFu0s_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu32i(Test_BFu0c_BFu0s_BFu32i, "BFu0c_BFu0s_BFu32i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu32ll");
    static BFu0c_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu32ll(Test_BFu0c_BFu0s_BFu32ll, "BFu0c_BFu0s_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu33");
    static BFu0c_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu33(Test_BFu0c_BFu0s_BFu33, "BFu0c_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu7c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0c_BFu0s_BFu7c) C1{ Fc:0 Fs:0 Fc:7}



static void Test_BFu0c_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu7c");
    static BFu0c_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu7c(Test_BFu0c_BFu0s_BFu7c, "BFu0c_BFu0s_BFu7c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu7i");
    static BFu0c_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu7i(Test_BFu0c_BFu0s_BFu7i, "BFu0c_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu7ll");
    static BFu0c_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu7ll(Test_BFu0c_BFu0s_BFu7ll, "BFu0c_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu7s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0c_BFu0s_BFu7s) C1{ Fc:0 Fs:0 Fs:7}



static void Test_BFu0c_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu7s");
    static BFu0c_BFu0s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu7s(Test_BFu0c_BFu0s_BFu7s, "BFu0c_BFu0s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu8c  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0c_BFu0s_BFu8c) C1{ Fc:0 Fs:0 Fc:8}



static void Test_BFu0c_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu8c");
    static BFu0c_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu8c(Test_BFu0c_BFu0s_BFu8c, "BFu0c_BFu0s_BFu8c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu8i");
    static BFu0c_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu8i(Test_BFu0c_BFu0s_BFu8i, "BFu0c_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu8ll");
    static BFu0c_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu8ll(Test_BFu0c_BFu0s_BFu8ll, "BFu0c_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu8s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0c_BFu0s_BFu8s) C1{ Fc:0 Fs:0 Fs:8}



static void Test_BFu0c_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu8s");
    static BFu0c_BFu0s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu8s(Test_BFu0c_BFu0s_BFu8s, "BFu0c_BFu0s_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu9i");
    static BFu0c_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu9i(Test_BFu0c_BFu0s_BFu9i, "BFu0c_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu9ll");
    static BFu0c_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu9ll(Test_BFu0c_BFu0s_BFu9ll, "BFu0c_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_BFu9s  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0c_BFu0s_BFu9s) C1{ Fc:0 Fs:0 Fs:9}



static void Test_BFu0c_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu0s_BFu9s");
    static BFu0c_BFu0s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_BFu9s(Test_BFu0c_BFu0s_BFu9s, "BFu0c_BFu0s_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_C()
{
  {
    init_simple_test("BFu0c_BFu0s_C");
    static BFu0c_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_C)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_C(Test_BFu0c_BFu0s_C, "BFu0c_BFu0s_C", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_D  {
  unsigned char  :0;
  unsigned short  :0;
  double v1;
};
//SIG(1 BFu0c_BFu0s_D) C1{ Fc:0 Fs:0 FL}



static void Test_BFu0c_BFu0s_D()
{
  {
    init_simple_test("BFu0c_BFu0s_D");
    static BFu0c_BFu0s_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_D)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_D(Test_BFu0c_BFu0s_D, "BFu0c_BFu0s_D", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_F  {
  unsigned char  :0;
  unsigned short  :0;
  float v1;
};
//SIG(1 BFu0c_BFu0s_F) C1{ Fc:0 Fs:0 Fi}



static void Test_BFu0c_BFu0s_F()
{
  {
    init_simple_test("BFu0c_BFu0s_F");
    static BFu0c_BFu0s_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_F)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_F(Test_BFu0c_BFu0s_F, "BFu0c_BFu0s_F", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_I  {
  unsigned char  :0;
  unsigned short  :0;
  int v1;
};
//SIG(1 BFu0c_BFu0s_I) C1{ Fc:0 Fs:0 Fi}



static void Test_BFu0c_BFu0s_I()
{
  {
    init_simple_test("BFu0c_BFu0s_I");
    static BFu0c_BFu0s_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_I)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_I(Test_BFu0c_BFu0s_I, "BFu0c_BFu0s_I", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_Ip()
{
  {
    init_simple_test("BFu0c_BFu0s_Ip");
    static BFu0c_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Ip(Test_BFu0c_BFu0s_Ip, "BFu0c_BFu0s_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_L  {
  unsigned char  :0;
  unsigned short  :0;
  __tsi64 v1;
};
//SIG(1 BFu0c_BFu0s_L) C1{ Fc:0 Fs:0 FL}



static void Test_BFu0c_BFu0s_L()
{
  {
    init_simple_test("BFu0c_BFu0s_L");
    static BFu0c_BFu0s_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_L)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_L(Test_BFu0c_BFu0s_L, "BFu0c_BFu0s_L", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_S()
{
  {
    init_simple_test("BFu0c_BFu0s_S");
    static BFu0c_BFu0s_S lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_S)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_S(Test_BFu0c_BFu0s_S, "BFu0c_BFu0s_S", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_Uc()
{
  {
    init_simple_test("BFu0c_BFu0s_Uc");
    static BFu0c_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0c_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Uc(Test_BFu0c_BFu0s_Uc, "BFu0c_BFu0s_Uc", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_Ui  {
  unsigned char  :0;
  unsigned short  :0;
  unsigned int v1;
};
//SIG(1 BFu0c_BFu0s_Ui) C1{ Fc:0 Fs:0 Fi}



static void Test_BFu0c_BFu0s_Ui()
{
  {
    init_simple_test("BFu0c_BFu0s_Ui");
    static BFu0c_BFu0s_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Ui(Test_BFu0c_BFu0s_Ui, "BFu0c_BFu0s_Ui", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu0s_Ul  {
  unsigned char  :0;
  unsigned short  :0;
  __tsu64 v1;
};
//SIG(1 BFu0c_BFu0s_Ul) C1{ Fc:0 Fs:0 FL}



static void Test_BFu0c_BFu0s_Ul()
{
  {
    init_simple_test("BFu0c_BFu0s_Ul");
    static BFu0c_BFu0s_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Ul(Test_BFu0c_BFu0s_Ul, "BFu0c_BFu0s_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_Us()
{
  {
    init_simple_test("BFu0c_BFu0s_Us");
    static BFu0c_BFu0s_Us lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Us(Test_BFu0c_BFu0s_Us, "BFu0c_BFu0s_Us", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu0s_Vp()
{
  {
    init_simple_test("BFu0c_BFu0s_Vp");
    static BFu0c_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_BFu0s_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu0s_Vp(Test_BFu0c_BFu0s_Vp, "BFu0c_BFu0s_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i  {
  unsigned char  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0c_BFu15i) C1{ Fc:0 Fi:15}



static void Test_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu15i");
    static BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i(Test_BFu0c_BFu15i, "BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu15i_BFu0c) C1{ Fc:0 Fi:15 Fc:0}



static void Test_BFu0c_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu0c");
    static BFu0c_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu0c(Test_BFu0c_BFu15i_BFu0c, "BFu0c_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu15i_BFu0i) C1{ Fc:0 Fi:15 Fi:0}



static void Test_BFu0c_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu0i");
    static BFu0c_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu0i(Test_BFu0c_BFu15i_BFu0i, "BFu0c_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu15i_BFu0ll) C1{ Fc:0 Fi:15 FL:0}



static void Test_BFu0c_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu0ll");
    static BFu0c_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu0ll(Test_BFu0c_BFu15i_BFu0ll, "BFu0c_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu0s");
    static BFu0c_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu0s(Test_BFu0c_BFu15i_BFu0s, "BFu0c_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu15i_BFu15i) C1{ Fc:0 Fi:15 Fi:15}



static void Test_BFu0c_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu15i");
    static BFu0c_BFu15i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu15i(Test_BFu0c_BFu15i_BFu15i, "BFu0c_BFu15i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu15i_BFu15ll) C1{ Fc:0 Fi:15 FL:15}



static void Test_BFu0c_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu15ll");
    static BFu0c_BFu15i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu15ll(Test_BFu0c_BFu15i_BFu15ll, "BFu0c_BFu15i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu15s");
    static BFu0c_BFu15i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu15s(Test_BFu0c_BFu15i_BFu15s, "BFu0c_BFu15i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu15i_BFu16i) C1{ Fc:0 Fi:15 Fi:16}



static void Test_BFu0c_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu16i");
    static BFu0c_BFu15i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu16i(Test_BFu0c_BFu15i_BFu16i, "BFu0c_BFu15i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu15i_BFu16ll) C1{ Fc:0 Fi:15 FL:16}



static void Test_BFu0c_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu16ll");
    static BFu0c_BFu15i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu16ll(Test_BFu0c_BFu15i_BFu16ll, "BFu0c_BFu15i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu16s");
    static BFu0c_BFu15i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu15i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu16s(Test_BFu0c_BFu15i_BFu16s, "BFu0c_BFu15i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu15i_BFu17i) C1{ Fc:0 Fi:15 Fi:17}



static void Test_BFu0c_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu17i");
    static BFu0c_BFu15i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu17i(Test_BFu0c_BFu15i_BFu17i, "BFu0c_BFu15i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu15i_BFu17ll) C1{ Fc:0 Fi:15 FL:17}



static void Test_BFu0c_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu17ll");
    static BFu0c_BFu15i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu17ll(Test_BFu0c_BFu15i_BFu17ll, "BFu0c_BFu15i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu15i_BFu1c) C1{ Fc:0 Fi:15 Fc:1}



static void Test_BFu0c_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu1c");
    static BFu0c_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu1c(Test_BFu0c_BFu15i_BFu1c, "BFu0c_BFu15i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu15i_BFu1i) C1{ Fc:0 Fi:15 Fi:1}



static void Test_BFu0c_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu1i");
    static BFu0c_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu1i(Test_BFu0c_BFu15i_BFu1i, "BFu0c_BFu15i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu15i_BFu1ll) C1{ Fc:0 Fi:15 FL:1}



static void Test_BFu0c_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu1ll");
    static BFu0c_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu1ll(Test_BFu0c_BFu15i_BFu1ll, "BFu0c_BFu15i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu1s");
    static BFu0c_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu1s(Test_BFu0c_BFu15i_BFu1s, "BFu0c_BFu15i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu15i_BFu31i) C1{ Fc:0 Fi:15 Fi:31}



static void Test_BFu0c_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu31i");
    static BFu0c_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu15i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu31i(Test_BFu0c_BFu15i_BFu31i, "BFu0c_BFu15i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu15i_BFu31ll) C1{ Fc:0 Fi:15 FL:31}



static void Test_BFu0c_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu31ll");
    static BFu0c_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu15i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu31ll(Test_BFu0c_BFu15i_BFu31ll, "BFu0c_BFu15i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu15i_BFu32i) C1{ Fc:0 Fi:15 Fi:32}



static void Test_BFu0c_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu32i");
    static BFu0c_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu15i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu32i(Test_BFu0c_BFu15i_BFu32i, "BFu0c_BFu15i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu15i_BFu32ll) C1{ Fc:0 Fi:15 FL:32}



static void Test_BFu0c_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu32ll");
    static BFu0c_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu15i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu32ll(Test_BFu0c_BFu15i_BFu32ll, "BFu0c_BFu15i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu33  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu15i_BFu33) C1{ Fc:0 Fi:15 FL:33}



static void Test_BFu0c_BFu15i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu33");
    static BFu0c_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0c_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu15i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu33(Test_BFu0c_BFu15i_BFu33, "BFu0c_BFu15i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu15i_BFu7c) C1{ Fc:0 Fi:15 Fc:7}



static void Test_BFu0c_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu7c");
    static BFu0c_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu7c(Test_BFu0c_BFu15i_BFu7c, "BFu0c_BFu15i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu15i_BFu7i) C1{ Fc:0 Fi:15 Fi:7}



static void Test_BFu0c_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu7i");
    static BFu0c_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu7i(Test_BFu0c_BFu15i_BFu7i, "BFu0c_BFu15i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu15i_BFu7ll) C1{ Fc:0 Fi:15 FL:7}



static void Test_BFu0c_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu7ll");
    static BFu0c_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu7ll(Test_BFu0c_BFu15i_BFu7ll, "BFu0c_BFu15i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu7s");
    static BFu0c_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu7s(Test_BFu0c_BFu15i_BFu7s, "BFu0c_BFu15i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu15i_BFu8c) C1{ Fc:0 Fi:15 Fc:8}



static void Test_BFu0c_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu8c");
    static BFu0c_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu8c(Test_BFu0c_BFu15i_BFu8c, "BFu0c_BFu15i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu15i_BFu8i) C1{ Fc:0 Fi:15 Fi:8}



static void Test_BFu0c_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu8i");
    static BFu0c_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu8i(Test_BFu0c_BFu15i_BFu8i, "BFu0c_BFu15i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu15i_BFu8ll) C1{ Fc:0 Fi:15 FL:8}



static void Test_BFu0c_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu8ll");
    static BFu0c_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu8ll(Test_BFu0c_BFu15i_BFu8ll, "BFu0c_BFu15i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu8s");
    static BFu0c_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu8s(Test_BFu0c_BFu15i_BFu8s, "BFu0c_BFu15i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu15i_BFu9i) C1{ Fc:0 Fi:15 Fi:9}



static void Test_BFu0c_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu9i");
    static BFu0c_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu9i(Test_BFu0c_BFu15i_BFu9i, "BFu0c_BFu15i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu15i_BFu9ll) C1{ Fc:0 Fi:15 FL:9}



static void Test_BFu0c_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu9ll");
    static BFu0c_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu9ll(Test_BFu0c_BFu15i_BFu9ll, "BFu0c_BFu15i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu15i_BFu9s");
    static BFu0c_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu15i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_BFu9s(Test_BFu0c_BFu15i_BFu9s, "BFu0c_BFu15i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_C  {
  unsigned char  :0;
  unsigned int v1:15;
  char v2;
};
//SIG(1 BFu0c_BFu15i_C) C1{ Fc:0 Fi:15 Fc}



static void Test_BFu0c_BFu15i_C()
{
  {
    init_simple_test("BFu0c_BFu15i_C");
    static BFu0c_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_C(Test_BFu0c_BFu15i_C, "BFu0c_BFu15i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_D  {
  unsigned char  :0;
  unsigned int v1:15;
  double v2;
};
//SIG(1 BFu0c_BFu15i_D) C1{ Fc:0 Fi:15 FL}



static void Test_BFu0c_BFu15i_D()
{
  {
    init_simple_test("BFu0c_BFu15i_D");
    static BFu0c_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_D(Test_BFu0c_BFu15i_D, "BFu0c_BFu15i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_F  {
  unsigned char  :0;
  unsigned int v1:15;
  float v2;
};
//SIG(1 BFu0c_BFu15i_F) C1{ Fc:0 Fi:15 Fi}



static void Test_BFu0c_BFu15i_F()
{
  {
    init_simple_test("BFu0c_BFu15i_F");
    static BFu0c_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_F(Test_BFu0c_BFu15i_F, "BFu0c_BFu15i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_I  {
  unsigned char  :0;
  unsigned int v1:15;
  int v2;
};
//SIG(1 BFu0c_BFu15i_I) C1{ Fc:0 Fi:15 Fi}



static void Test_BFu0c_BFu15i_I()
{
  {
    init_simple_test("BFu0c_BFu15i_I");
    static BFu0c_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_I(Test_BFu0c_BFu15i_I, "BFu0c_BFu15i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_Ip()
{
  {
    init_simple_test("BFu0c_BFu15i_Ip");
    static BFu0c_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Ip(Test_BFu0c_BFu15i_Ip, "BFu0c_BFu15i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_L  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu15i_L) C1{ Fc:0 Fi:15 FL}



static void Test_BFu0c_BFu15i_L()
{
  {
    init_simple_test("BFu0c_BFu15i_L");
    static BFu0c_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_L(Test_BFu0c_BFu15i_L, "BFu0c_BFu15i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_S()
{
  {
    init_simple_test("BFu0c_BFu15i_S");
    static BFu0c_BFu15i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_S(Test_BFu0c_BFu15i_S, "BFu0c_BFu15i_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_Uc  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu15i_Uc) C1{ Fc:0 Fi:15 Fc}



static void Test_BFu0c_BFu15i_Uc()
{
  {
    init_simple_test("BFu0c_BFu15i_Uc");
    static BFu0c_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Uc(Test_BFu0c_BFu15i_Uc, "BFu0c_BFu15i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_Ui  {
  unsigned char  :0;
  unsigned int v1:15;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu15i_Ui) C1{ Fc:0 Fi:15 Fi}



static void Test_BFu0c_BFu15i_Ui()
{
  {
    init_simple_test("BFu0c_BFu15i_Ui");
    static BFu0c_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Ui(Test_BFu0c_BFu15i_Ui, "BFu0c_BFu15i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15i_Ul  {
  unsigned char  :0;
  unsigned int v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu15i_Ul) C1{ Fc:0 Fi:15 FL}



static void Test_BFu0c_BFu15i_Ul()
{
  {
    init_simple_test("BFu0c_BFu15i_Ul");
    static BFu0c_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Ul(Test_BFu0c_BFu15i_Ul, "BFu0c_BFu15i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_Us()
{
  {
    init_simple_test("BFu0c_BFu15i_Us");
    static BFu0c_BFu15i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Us(Test_BFu0c_BFu15i_Us, "BFu0c_BFu15i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15i_Vp()
{
  {
    init_simple_test("BFu0c_BFu15i_Vp");
    static BFu0c_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15i_Vp(Test_BFu0c_BFu15i_Vp, "BFu0c_BFu15i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0c_BFu15ll) C1{ Fc:0 FL:15}



static void Test_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu15ll");
    static BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll(Test_BFu0c_BFu15ll, "BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu15ll_BFu0c) C1{ Fc:0 FL:15 Fc:0}



static void Test_BFu0c_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu0c");
    static BFu0c_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu0c(Test_BFu0c_BFu15ll_BFu0c, "BFu0c_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu15ll_BFu0i) C1{ Fc:0 FL:15 Fi:0}



static void Test_BFu0c_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu0i");
    static BFu0c_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu0i(Test_BFu0c_BFu15ll_BFu0i, "BFu0c_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu15ll_BFu0ll) C1{ Fc:0 FL:15 FL:0}



static void Test_BFu0c_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu0ll");
    static BFu0c_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu0ll(Test_BFu0c_BFu15ll_BFu0ll, "BFu0c_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu0s");
    static BFu0c_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu0s(Test_BFu0c_BFu15ll_BFu0s, "BFu0c_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu15ll_BFu15i) C1{ Fc:0 FL:15 Fi:15}



static void Test_BFu0c_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu15i");
    static BFu0c_BFu15ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu15i(Test_BFu0c_BFu15ll_BFu15i, "BFu0c_BFu15ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu15ll_BFu15ll) C1{ Fc:0 FL:15 FL:15}



static void Test_BFu0c_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu15ll");
    static BFu0c_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu15ll(Test_BFu0c_BFu15ll_BFu15ll, "BFu0c_BFu15ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu15s");
    static BFu0c_BFu15ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu15s(Test_BFu0c_BFu15ll_BFu15s, "BFu0c_BFu15ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu15ll_BFu16i) C1{ Fc:0 FL:15 Fi:16}



static void Test_BFu0c_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu16i");
    static BFu0c_BFu15ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu16i(Test_BFu0c_BFu15ll_BFu16i, "BFu0c_BFu15ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu15ll_BFu16ll) C1{ Fc:0 FL:15 FL:16}



static void Test_BFu0c_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu16ll");
    static BFu0c_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu16ll(Test_BFu0c_BFu15ll_BFu16ll, "BFu0c_BFu15ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu16s");
    static BFu0c_BFu15ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu15ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu16s(Test_BFu0c_BFu15ll_BFu16s, "BFu0c_BFu15ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu15ll_BFu17i) C1{ Fc:0 FL:15 Fi:17}



static void Test_BFu0c_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu17i");
    static BFu0c_BFu15ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu17i(Test_BFu0c_BFu15ll_BFu17i, "BFu0c_BFu15ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu15ll_BFu17ll) C1{ Fc:0 FL:15 FL:17}



static void Test_BFu0c_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu17ll");
    static BFu0c_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu17ll(Test_BFu0c_BFu15ll_BFu17ll, "BFu0c_BFu15ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu15ll_BFu1c) C1{ Fc:0 FL:15 Fc:1}



static void Test_BFu0c_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu1c");
    static BFu0c_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu1c(Test_BFu0c_BFu15ll_BFu1c, "BFu0c_BFu15ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu15ll_BFu1i) C1{ Fc:0 FL:15 Fi:1}



static void Test_BFu0c_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu1i");
    static BFu0c_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu1i(Test_BFu0c_BFu15ll_BFu1i, "BFu0c_BFu15ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu15ll_BFu1ll) C1{ Fc:0 FL:15 FL:1}



static void Test_BFu0c_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu1ll");
    static BFu0c_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu1ll(Test_BFu0c_BFu15ll_BFu1ll, "BFu0c_BFu15ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu1s");
    static BFu0c_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu1s(Test_BFu0c_BFu15ll_BFu1s, "BFu0c_BFu15ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu15ll_BFu31i) C1{ Fc:0 FL:15 Fi:31}



static void Test_BFu0c_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu31i");
    static BFu0c_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu15ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu31i(Test_BFu0c_BFu15ll_BFu31i, "BFu0c_BFu15ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu15ll_BFu31ll) C1{ Fc:0 FL:15 FL:31}



static void Test_BFu0c_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu31ll");
    static BFu0c_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu15ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu31ll(Test_BFu0c_BFu15ll_BFu31ll, "BFu0c_BFu15ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu15ll_BFu32i) C1{ Fc:0 FL:15 Fi:32}



static void Test_BFu0c_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu32i");
    static BFu0c_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu15ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu32i(Test_BFu0c_BFu15ll_BFu32i, "BFu0c_BFu15ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu15ll_BFu32ll) C1{ Fc:0 FL:15 FL:32}



static void Test_BFu0c_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu32ll");
    static BFu0c_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu15ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu32ll(Test_BFu0c_BFu15ll_BFu32ll, "BFu0c_BFu15ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu15ll_BFu33) C1{ Fc:0 FL:15 FL:33}



static void Test_BFu0c_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu33");
    static BFu0c_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0c_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu15ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu33(Test_BFu0c_BFu15ll_BFu33, "BFu0c_BFu15ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu15ll_BFu7c) C1{ Fc:0 FL:15 Fc:7}



static void Test_BFu0c_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu7c");
    static BFu0c_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu7c(Test_BFu0c_BFu15ll_BFu7c, "BFu0c_BFu15ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu15ll_BFu7i) C1{ Fc:0 FL:15 Fi:7}



static void Test_BFu0c_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu7i");
    static BFu0c_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu7i(Test_BFu0c_BFu15ll_BFu7i, "BFu0c_BFu15ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu15ll_BFu7ll) C1{ Fc:0 FL:15 FL:7}



static void Test_BFu0c_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu7ll");
    static BFu0c_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu7ll(Test_BFu0c_BFu15ll_BFu7ll, "BFu0c_BFu15ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu7s");
    static BFu0c_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu7s(Test_BFu0c_BFu15ll_BFu7s, "BFu0c_BFu15ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu15ll_BFu8c) C1{ Fc:0 FL:15 Fc:8}



static void Test_BFu0c_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu8c");
    static BFu0c_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu8c(Test_BFu0c_BFu15ll_BFu8c, "BFu0c_BFu15ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu15ll_BFu8i) C1{ Fc:0 FL:15 Fi:8}



static void Test_BFu0c_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu8i");
    static BFu0c_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu8i(Test_BFu0c_BFu15ll_BFu8i, "BFu0c_BFu15ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu15ll_BFu8ll) C1{ Fc:0 FL:15 FL:8}



static void Test_BFu0c_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu8ll");
    static BFu0c_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu8ll(Test_BFu0c_BFu15ll_BFu8ll, "BFu0c_BFu15ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu8s");
    static BFu0c_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu8s(Test_BFu0c_BFu15ll_BFu8s, "BFu0c_BFu15ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu15ll_BFu9i) C1{ Fc:0 FL:15 Fi:9}



static void Test_BFu0c_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu9i");
    static BFu0c_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu9i(Test_BFu0c_BFu15ll_BFu9i, "BFu0c_BFu15ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu15ll_BFu9ll) C1{ Fc:0 FL:15 FL:9}



static void Test_BFu0c_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu9ll");
    static BFu0c_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu9ll(Test_BFu0c_BFu15ll_BFu9ll, "BFu0c_BFu15ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu15ll_BFu9s");
    static BFu0c_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu15ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_BFu9s(Test_BFu0c_BFu15ll_BFu9s, "BFu0c_BFu15ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_C  {
  unsigned char  :0;
  __tsu64 v1:15;
  char v2;
};
//SIG(1 BFu0c_BFu15ll_C) C1{ Fc:0 FL:15 Fc}



static void Test_BFu0c_BFu15ll_C()
{
  {
    init_simple_test("BFu0c_BFu15ll_C");
    static BFu0c_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_C(Test_BFu0c_BFu15ll_C, "BFu0c_BFu15ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_D  {
  unsigned char  :0;
  __tsu64 v1:15;
  double v2;
};
//SIG(1 BFu0c_BFu15ll_D) C1{ Fc:0 FL:15 FL}



static void Test_BFu0c_BFu15ll_D()
{
  {
    init_simple_test("BFu0c_BFu15ll_D");
    static BFu0c_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_D(Test_BFu0c_BFu15ll_D, "BFu0c_BFu15ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_F  {
  unsigned char  :0;
  __tsu64 v1:15;
  float v2;
};
//SIG(1 BFu0c_BFu15ll_F) C1{ Fc:0 FL:15 Fi}



static void Test_BFu0c_BFu15ll_F()
{
  {
    init_simple_test("BFu0c_BFu15ll_F");
    static BFu0c_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_F(Test_BFu0c_BFu15ll_F, "BFu0c_BFu15ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_I  {
  unsigned char  :0;
  __tsu64 v1:15;
  int v2;
};
//SIG(1 BFu0c_BFu15ll_I) C1{ Fc:0 FL:15 Fi}



static void Test_BFu0c_BFu15ll_I()
{
  {
    init_simple_test("BFu0c_BFu15ll_I");
    static BFu0c_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_I(Test_BFu0c_BFu15ll_I, "BFu0c_BFu15ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu15ll_Ip");
    static BFu0c_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Ip(Test_BFu0c_BFu15ll_Ip, "BFu0c_BFu15ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_L  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu15ll_L) C1{ Fc:0 FL:15 FL}



static void Test_BFu0c_BFu15ll_L()
{
  {
    init_simple_test("BFu0c_BFu15ll_L");
    static BFu0c_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_L(Test_BFu0c_BFu15ll_L, "BFu0c_BFu15ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_S()
{
  {
    init_simple_test("BFu0c_BFu15ll_S");
    static BFu0c_BFu15ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_S(Test_BFu0c_BFu15ll_S, "BFu0c_BFu15ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu15ll_Uc) C1{ Fc:0 FL:15 Fc}



static void Test_BFu0c_BFu15ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu15ll_Uc");
    static BFu0c_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Uc(Test_BFu0c_BFu15ll_Uc, "BFu0c_BFu15ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:15;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu15ll_Ui) C1{ Fc:0 FL:15 Fi}



static void Test_BFu0c_BFu15ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu15ll_Ui");
    static BFu0c_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Ui(Test_BFu0c_BFu15ll_Ui, "BFu0c_BFu15ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu15ll_Ul) C1{ Fc:0 FL:15 FL}



static void Test_BFu0c_BFu15ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu15ll_Ul");
    static BFu0c_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Ul(Test_BFu0c_BFu15ll_Ul, "BFu0c_BFu15ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15ll_Us()
{
  {
    init_simple_test("BFu0c_BFu15ll_Us");
    static BFu0c_BFu15ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Us(Test_BFu0c_BFu15ll_Us, "BFu0c_BFu15ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:15;
  void *v2;
};
//SIG(1 BFu0c_BFu15ll_Vp) C1{ Fc:0 FL:15 Fp}



static void Test_BFu0c_BFu15ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu15ll_Vp");
    static BFu0c_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15ll_Vp(Test_BFu0c_BFu15ll_Vp, "BFu0c_BFu15ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s  {
  unsigned char  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0c_BFu15s) C1{ Fc:0 Fs:15}



static void Test_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu15s");
    static BFu0c_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s(Test_BFu0c_BFu15s, "BFu0c_BFu15s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu0c  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu15s_BFu0c) C1{ Fc:0 Fs:15 Fc:0}



static void Test_BFu0c_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu0c");
    static BFu0c_BFu15s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu0c(Test_BFu0c_BFu15s_BFu0c, "BFu0c_BFu15s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu0i");
    static BFu0c_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu0i(Test_BFu0c_BFu15s_BFu0i, "BFu0c_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu0ll");
    static BFu0c_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu0ll(Test_BFu0c_BFu15s_BFu0ll, "BFu0c_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu0s  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu15s_BFu0s) C1{ Fc:0 Fs:15 Fs:0}



static void Test_BFu0c_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu0s");
    static BFu0c_BFu15s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu0s(Test_BFu0c_BFu15s_BFu0s, "BFu0c_BFu15s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu15i");
    static BFu0c_BFu15s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu15i(Test_BFu0c_BFu15s_BFu15i, "BFu0c_BFu15s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu15ll");
    static BFu0c_BFu15s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu15ll(Test_BFu0c_BFu15s_BFu15ll, "BFu0c_BFu15s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu15s");
    static BFu0c_BFu15s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu15s(Test_BFu0c_BFu15s_BFu15s, "BFu0c_BFu15s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu16i");
    static BFu0c_BFu15s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu16i(Test_BFu0c_BFu15s_BFu16i, "BFu0c_BFu15s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu16ll");
    static BFu0c_BFu15s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu15s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu16ll(Test_BFu0c_BFu15s_BFu16ll, "BFu0c_BFu15s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu16s  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu15s_BFu16s) C1{ Fc:0 Fs:15 Fs:16}



static void Test_BFu0c_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu16s");
    static BFu0c_BFu15s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu15s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu16s(Test_BFu0c_BFu15s_BFu16s, "BFu0c_BFu15s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu17i");
    static BFu0c_BFu15s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu17i(Test_BFu0c_BFu15s_BFu17i, "BFu0c_BFu15s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu17ll");
    static BFu0c_BFu15s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu15s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu17ll(Test_BFu0c_BFu15s_BFu17ll, "BFu0c_BFu15s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu1c");
    static BFu0c_BFu15s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu1c(Test_BFu0c_BFu15s_BFu1c, "BFu0c_BFu15s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu1i");
    static BFu0c_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu1i(Test_BFu0c_BFu15s_BFu1i, "BFu0c_BFu15s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu1ll");
    static BFu0c_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu1ll(Test_BFu0c_BFu15s_BFu1ll, "BFu0c_BFu15s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu1s");
    static BFu0c_BFu15s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0c_BFu15s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu1s(Test_BFu0c_BFu15s_BFu1s, "BFu0c_BFu15s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu31i");
    static BFu0c_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu15s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu31i(Test_BFu0c_BFu15s_BFu31i, "BFu0c_BFu15s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu31ll");
    static BFu0c_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu15s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu31ll(Test_BFu0c_BFu15s_BFu31ll, "BFu0c_BFu15s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu32i");
    static BFu0c_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu15s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu32i(Test_BFu0c_BFu15s_BFu32i, "BFu0c_BFu15s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu32ll");
    static BFu0c_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu15s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu32ll(Test_BFu0c_BFu15s_BFu32ll, "BFu0c_BFu15s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu33");
    static BFu0c_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0c_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu15s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu33(Test_BFu0c_BFu15s_BFu33, "BFu0c_BFu15s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu15s_BFu7c) C1{ Fc:0 Fs:15 Fc:7}



static void Test_BFu0c_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu7c");
    static BFu0c_BFu15s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu7c(Test_BFu0c_BFu15s_BFu7c, "BFu0c_BFu15s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu7i");
    static BFu0c_BFu15s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu7i(Test_BFu0c_BFu15s_BFu7i, "BFu0c_BFu15s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu7ll");
    static BFu0c_BFu15s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu15s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu7ll(Test_BFu0c_BFu15s_BFu7ll, "BFu0c_BFu15s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu15s_BFu7s) C1{ Fc:0 Fs:15 Fs:7}



static void Test_BFu0c_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu7s");
    static BFu0c_BFu15s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu15s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu7s(Test_BFu0c_BFu15s_BFu7s, "BFu0c_BFu15s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu15s_BFu8c) C1{ Fc:0 Fs:15 Fc:8}



static void Test_BFu0c_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu8c");
    static BFu0c_BFu15s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu8c(Test_BFu0c_BFu15s_BFu8c, "BFu0c_BFu15s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu8i");
    static BFu0c_BFu15s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu8i(Test_BFu0c_BFu15s_BFu8i, "BFu0c_BFu15s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu8ll");
    static BFu0c_BFu15s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu15s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu8ll(Test_BFu0c_BFu15s_BFu8ll, "BFu0c_BFu15s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu15s_BFu8s) C1{ Fc:0 Fs:15 Fs:8}



static void Test_BFu0c_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu8s");
    static BFu0c_BFu15s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu15s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu8s(Test_BFu0c_BFu15s_BFu8s, "BFu0c_BFu15s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu9i");
    static BFu0c_BFu15s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu9i(Test_BFu0c_BFu15s_BFu9i, "BFu0c_BFu15s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu9ll");
    static BFu0c_BFu15s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu15s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu9ll(Test_BFu0c_BFu15s_BFu9ll, "BFu0c_BFu15s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu15s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu15s_BFu9s) C1{ Fc:0 Fs:15 Fs:9}



static void Test_BFu0c_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu15s_BFu9s");
    static BFu0c_BFu15s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu15s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_BFu9s(Test_BFu0c_BFu15s_BFu9s, "BFu0c_BFu15s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_C()
{
  {
    init_simple_test("BFu0c_BFu15s_C");
    static BFu0c_BFu15s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_C(Test_BFu0c_BFu15s_C, "BFu0c_BFu15s_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_D()
{
  {
    init_simple_test("BFu0c_BFu15s_D");
    static BFu0c_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_D(Test_BFu0c_BFu15s_D, "BFu0c_BFu15s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_F()
{
  {
    init_simple_test("BFu0c_BFu15s_F");
    static BFu0c_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_F(Test_BFu0c_BFu15s_F, "BFu0c_BFu15s_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_I()
{
  {
    init_simple_test("BFu0c_BFu15s_I");
    static BFu0c_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_I(Test_BFu0c_BFu15s_I, "BFu0c_BFu15s_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Ip()
{
  {
    init_simple_test("BFu0c_BFu15s_Ip");
    static BFu0c_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Ip(Test_BFu0c_BFu15s_Ip, "BFu0c_BFu15s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_L()
{
  {
    init_simple_test("BFu0c_BFu15s_L");
    static BFu0c_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_L(Test_BFu0c_BFu15s_L, "BFu0c_BFu15s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_S()
{
  {
    init_simple_test("BFu0c_BFu15s_S");
    static BFu0c_BFu15s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_S(Test_BFu0c_BFu15s_S, "BFu0c_BFu15s_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Uc()
{
  {
    init_simple_test("BFu0c_BFu15s_Uc");
    static BFu0c_BFu15s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Uc(Test_BFu0c_BFu15s_Uc, "BFu0c_BFu15s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Ui()
{
  {
    init_simple_test("BFu0c_BFu15s_Ui");
    static BFu0c_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu15s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Ui(Test_BFu0c_BFu15s_Ui, "BFu0c_BFu15s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Ul()
{
  {
    init_simple_test("BFu0c_BFu15s_Ul");
    static BFu0c_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Ul(Test_BFu0c_BFu15s_Ul, "BFu0c_BFu15s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Us()
{
  {
    init_simple_test("BFu0c_BFu15s_Us");
    static BFu0c_BFu15s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu15s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Us(Test_BFu0c_BFu15s_Us, "BFu0c_BFu15s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu15s_Vp()
{
  {
    init_simple_test("BFu0c_BFu15s_Vp");
    static BFu0c_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0c_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu15s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu15s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu15s_Vp(Test_BFu0c_BFu15s_Vp, "BFu0c_BFu15s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i  {
  unsigned char  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0c_BFu16i) C1{ Fc:0 Fi:16}



static void Test_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu16i");
    static BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i(Test_BFu0c_BFu16i, "BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu16i_BFu0c) C1{ Fc:0 Fi:16 Fc:0}



static void Test_BFu0c_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu0c");
    static BFu0c_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu0c(Test_BFu0c_BFu16i_BFu0c, "BFu0c_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu16i_BFu0i) C1{ Fc:0 Fi:16 Fi:0}



static void Test_BFu0c_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu0i");
    static BFu0c_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu0i(Test_BFu0c_BFu16i_BFu0i, "BFu0c_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu16i_BFu0ll) C1{ Fc:0 Fi:16 FL:0}



static void Test_BFu0c_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu0ll");
    static BFu0c_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu0ll(Test_BFu0c_BFu16i_BFu0ll, "BFu0c_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu0s");
    static BFu0c_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu0s(Test_BFu0c_BFu16i_BFu0s, "BFu0c_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu16i_BFu15i) C1{ Fc:0 Fi:16 Fi:15}



static void Test_BFu0c_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu15i");
    static BFu0c_BFu16i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu15i(Test_BFu0c_BFu16i_BFu15i, "BFu0c_BFu16i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu16i_BFu15ll) C1{ Fc:0 Fi:16 FL:15}



static void Test_BFu0c_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu15ll");
    static BFu0c_BFu16i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu15ll(Test_BFu0c_BFu16i_BFu15ll, "BFu0c_BFu16i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu15s");
    static BFu0c_BFu16i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu15s(Test_BFu0c_BFu16i_BFu15s, "BFu0c_BFu16i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu16i_BFu16i) C1{ Fc:0 Fi:16 Fi:16}



static void Test_BFu0c_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu16i");
    static BFu0c_BFu16i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu16i(Test_BFu0c_BFu16i_BFu16i, "BFu0c_BFu16i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu16i_BFu16ll) C1{ Fc:0 Fi:16 FL:16}



static void Test_BFu0c_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu16ll");
    static BFu0c_BFu16i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu16ll(Test_BFu0c_BFu16i_BFu16ll, "BFu0c_BFu16i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu16s");
    static BFu0c_BFu16i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu16s(Test_BFu0c_BFu16i_BFu16s, "BFu0c_BFu16i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu16i_BFu17i) C1{ Fc:0 Fi:16 Fi:17}



static void Test_BFu0c_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu17i");
    static BFu0c_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu17i(Test_BFu0c_BFu16i_BFu17i, "BFu0c_BFu16i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu16i_BFu17ll) C1{ Fc:0 Fi:16 FL:17}



static void Test_BFu0c_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu17ll");
    static BFu0c_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu17ll(Test_BFu0c_BFu16i_BFu17ll, "BFu0c_BFu16i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu16i_BFu1c) C1{ Fc:0 Fi:16 Fc:1}



static void Test_BFu0c_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu1c");
    static BFu0c_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu1c(Test_BFu0c_BFu16i_BFu1c, "BFu0c_BFu16i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu16i_BFu1i) C1{ Fc:0 Fi:16 Fi:1}



static void Test_BFu0c_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu1i");
    static BFu0c_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu1i(Test_BFu0c_BFu16i_BFu1i, "BFu0c_BFu16i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu16i_BFu1ll) C1{ Fc:0 Fi:16 FL:1}



static void Test_BFu0c_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu1ll");
    static BFu0c_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu1ll(Test_BFu0c_BFu16i_BFu1ll, "BFu0c_BFu16i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu1s");
    static BFu0c_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu1s(Test_BFu0c_BFu16i_BFu1s, "BFu0c_BFu16i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu16i_BFu31i) C1{ Fc:0 Fi:16 Fi:31}



static void Test_BFu0c_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu31i");
    static BFu0c_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu31i(Test_BFu0c_BFu16i_BFu31i, "BFu0c_BFu16i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu16i_BFu31ll) C1{ Fc:0 Fi:16 FL:31}



static void Test_BFu0c_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu31ll");
    static BFu0c_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu31ll(Test_BFu0c_BFu16i_BFu31ll, "BFu0c_BFu16i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu16i_BFu32i) C1{ Fc:0 Fi:16 Fi:32}



static void Test_BFu0c_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu32i");
    static BFu0c_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu32i(Test_BFu0c_BFu16i_BFu32i, "BFu0c_BFu16i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu16i_BFu32ll) C1{ Fc:0 Fi:16 FL:32}



static void Test_BFu0c_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu32ll");
    static BFu0c_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu32ll(Test_BFu0c_BFu16i_BFu32ll, "BFu0c_BFu16i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu33  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu16i_BFu33) C1{ Fc:0 Fi:16 FL:33}



static void Test_BFu0c_BFu16i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu33");
    static BFu0c_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0c_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu16i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu33(Test_BFu0c_BFu16i_BFu33, "BFu0c_BFu16i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu16i_BFu7c) C1{ Fc:0 Fi:16 Fc:7}



static void Test_BFu0c_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu7c");
    static BFu0c_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu7c(Test_BFu0c_BFu16i_BFu7c, "BFu0c_BFu16i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu16i_BFu7i) C1{ Fc:0 Fi:16 Fi:7}



static void Test_BFu0c_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu7i");
    static BFu0c_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu7i(Test_BFu0c_BFu16i_BFu7i, "BFu0c_BFu16i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu16i_BFu7ll) C1{ Fc:0 Fi:16 FL:7}



static void Test_BFu0c_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu7ll");
    static BFu0c_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu7ll(Test_BFu0c_BFu16i_BFu7ll, "BFu0c_BFu16i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu7s");
    static BFu0c_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu7s(Test_BFu0c_BFu16i_BFu7s, "BFu0c_BFu16i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu16i_BFu8c) C1{ Fc:0 Fi:16 Fc:8}



static void Test_BFu0c_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu8c");
    static BFu0c_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu8c(Test_BFu0c_BFu16i_BFu8c, "BFu0c_BFu16i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu16i_BFu8i) C1{ Fc:0 Fi:16 Fi:8}



static void Test_BFu0c_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu8i");
    static BFu0c_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu8i(Test_BFu0c_BFu16i_BFu8i, "BFu0c_BFu16i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu16i_BFu8ll) C1{ Fc:0 Fi:16 FL:8}



static void Test_BFu0c_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu8ll");
    static BFu0c_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu8ll(Test_BFu0c_BFu16i_BFu8ll, "BFu0c_BFu16i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu8s");
    static BFu0c_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu8s(Test_BFu0c_BFu16i_BFu8s, "BFu0c_BFu16i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu16i_BFu9i) C1{ Fc:0 Fi:16 Fi:9}



static void Test_BFu0c_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu9i");
    static BFu0c_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu9i(Test_BFu0c_BFu16i_BFu9i, "BFu0c_BFu16i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu16i_BFu9ll) C1{ Fc:0 Fi:16 FL:9}



static void Test_BFu0c_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu9ll");
    static BFu0c_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu9ll(Test_BFu0c_BFu16i_BFu9ll, "BFu0c_BFu16i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu16i_BFu9s");
    static BFu0c_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_BFu9s(Test_BFu0c_BFu16i_BFu9s, "BFu0c_BFu16i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_C  {
  unsigned char  :0;
  unsigned int v1:16;
  char v2;
};
//SIG(1 BFu0c_BFu16i_C) C1{ Fc:0 Fi:16 Fc}



static void Test_BFu0c_BFu16i_C()
{
  {
    init_simple_test("BFu0c_BFu16i_C");
    static BFu0c_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_C(Test_BFu0c_BFu16i_C, "BFu0c_BFu16i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_D  {
  unsigned char  :0;
  unsigned int v1:16;
  double v2;
};
//SIG(1 BFu0c_BFu16i_D) C1{ Fc:0 Fi:16 FL}



static void Test_BFu0c_BFu16i_D()
{
  {
    init_simple_test("BFu0c_BFu16i_D");
    static BFu0c_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_D(Test_BFu0c_BFu16i_D, "BFu0c_BFu16i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_F  {
  unsigned char  :0;
  unsigned int v1:16;
  float v2;
};
//SIG(1 BFu0c_BFu16i_F) C1{ Fc:0 Fi:16 Fi}



static void Test_BFu0c_BFu16i_F()
{
  {
    init_simple_test("BFu0c_BFu16i_F");
    static BFu0c_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_F(Test_BFu0c_BFu16i_F, "BFu0c_BFu16i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_I  {
  unsigned char  :0;
  unsigned int v1:16;
  int v2;
};
//SIG(1 BFu0c_BFu16i_I) C1{ Fc:0 Fi:16 Fi}



static void Test_BFu0c_BFu16i_I()
{
  {
    init_simple_test("BFu0c_BFu16i_I");
    static BFu0c_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_I(Test_BFu0c_BFu16i_I, "BFu0c_BFu16i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_Ip()
{
  {
    init_simple_test("BFu0c_BFu16i_Ip");
    static BFu0c_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Ip(Test_BFu0c_BFu16i_Ip, "BFu0c_BFu16i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_L  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu16i_L) C1{ Fc:0 Fi:16 FL}



static void Test_BFu0c_BFu16i_L()
{
  {
    init_simple_test("BFu0c_BFu16i_L");
    static BFu0c_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_L(Test_BFu0c_BFu16i_L, "BFu0c_BFu16i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_S()
{
  {
    init_simple_test("BFu0c_BFu16i_S");
    static BFu0c_BFu16i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_S(Test_BFu0c_BFu16i_S, "BFu0c_BFu16i_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_Uc  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu16i_Uc) C1{ Fc:0 Fi:16 Fc}



static void Test_BFu0c_BFu16i_Uc()
{
  {
    init_simple_test("BFu0c_BFu16i_Uc");
    static BFu0c_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Uc(Test_BFu0c_BFu16i_Uc, "BFu0c_BFu16i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_Ui  {
  unsigned char  :0;
  unsigned int v1:16;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu16i_Ui) C1{ Fc:0 Fi:16 Fi}



static void Test_BFu0c_BFu16i_Ui()
{
  {
    init_simple_test("BFu0c_BFu16i_Ui");
    static BFu0c_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Ui(Test_BFu0c_BFu16i_Ui, "BFu0c_BFu16i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16i_Ul  {
  unsigned char  :0;
  unsigned int v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu16i_Ul) C1{ Fc:0 Fi:16 FL}



static void Test_BFu0c_BFu16i_Ul()
{
  {
    init_simple_test("BFu0c_BFu16i_Ul");
    static BFu0c_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Ul(Test_BFu0c_BFu16i_Ul, "BFu0c_BFu16i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_Us()
{
  {
    init_simple_test("BFu0c_BFu16i_Us");
    static BFu0c_BFu16i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Us(Test_BFu0c_BFu16i_Us, "BFu0c_BFu16i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16i_Vp()
{
  {
    init_simple_test("BFu0c_BFu16i_Vp");
    static BFu0c_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16i_Vp(Test_BFu0c_BFu16i_Vp, "BFu0c_BFu16i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0c_BFu16ll) C1{ Fc:0 FL:16}



static void Test_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu16ll");
    static BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll(Test_BFu0c_BFu16ll, "BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu16ll_BFu0c) C1{ Fc:0 FL:16 Fc:0}



static void Test_BFu0c_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu0c");
    static BFu0c_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu0c(Test_BFu0c_BFu16ll_BFu0c, "BFu0c_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu16ll_BFu0i) C1{ Fc:0 FL:16 Fi:0}



static void Test_BFu0c_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu0i");
    static BFu0c_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu0i(Test_BFu0c_BFu16ll_BFu0i, "BFu0c_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu16ll_BFu0ll) C1{ Fc:0 FL:16 FL:0}



static void Test_BFu0c_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu0ll");
    static BFu0c_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu0ll(Test_BFu0c_BFu16ll_BFu0ll, "BFu0c_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu0s");
    static BFu0c_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu0s(Test_BFu0c_BFu16ll_BFu0s, "BFu0c_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu16ll_BFu15i) C1{ Fc:0 FL:16 Fi:15}



static void Test_BFu0c_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu15i");
    static BFu0c_BFu16ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu15i(Test_BFu0c_BFu16ll_BFu15i, "BFu0c_BFu16ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu16ll_BFu15ll) C1{ Fc:0 FL:16 FL:15}



static void Test_BFu0c_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu15ll");
    static BFu0c_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu15ll(Test_BFu0c_BFu16ll_BFu15ll, "BFu0c_BFu16ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu15s");
    static BFu0c_BFu16ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu15s(Test_BFu0c_BFu16ll_BFu15s, "BFu0c_BFu16ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu16ll_BFu16i) C1{ Fc:0 FL:16 Fi:16}



static void Test_BFu0c_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu16i");
    static BFu0c_BFu16ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu16i(Test_BFu0c_BFu16ll_BFu16i, "BFu0c_BFu16ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu16ll_BFu16ll) C1{ Fc:0 FL:16 FL:16}



static void Test_BFu0c_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu16ll");
    static BFu0c_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu16ll(Test_BFu0c_BFu16ll_BFu16ll, "BFu0c_BFu16ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu16s");
    static BFu0c_BFu16ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu16s(Test_BFu0c_BFu16ll_BFu16s, "BFu0c_BFu16ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu16ll_BFu17i) C1{ Fc:0 FL:16 Fi:17}



static void Test_BFu0c_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu17i");
    static BFu0c_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu17i(Test_BFu0c_BFu16ll_BFu17i, "BFu0c_BFu16ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu16ll_BFu17ll) C1{ Fc:0 FL:16 FL:17}



static void Test_BFu0c_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu17ll");
    static BFu0c_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu17ll(Test_BFu0c_BFu16ll_BFu17ll, "BFu0c_BFu16ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu16ll_BFu1c) C1{ Fc:0 FL:16 Fc:1}



static void Test_BFu0c_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu1c");
    static BFu0c_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu1c(Test_BFu0c_BFu16ll_BFu1c, "BFu0c_BFu16ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu16ll_BFu1i) C1{ Fc:0 FL:16 Fi:1}



static void Test_BFu0c_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu1i");
    static BFu0c_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu1i(Test_BFu0c_BFu16ll_BFu1i, "BFu0c_BFu16ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu16ll_BFu1ll) C1{ Fc:0 FL:16 FL:1}



static void Test_BFu0c_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu1ll");
    static BFu0c_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu1ll(Test_BFu0c_BFu16ll_BFu1ll, "BFu0c_BFu16ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu1s");
    static BFu0c_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu1s(Test_BFu0c_BFu16ll_BFu1s, "BFu0c_BFu16ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu16ll_BFu31i) C1{ Fc:0 FL:16 Fi:31}



static void Test_BFu0c_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu31i");
    static BFu0c_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu31i(Test_BFu0c_BFu16ll_BFu31i, "BFu0c_BFu16ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu16ll_BFu31ll) C1{ Fc:0 FL:16 FL:31}



static void Test_BFu0c_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu31ll");
    static BFu0c_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu31ll(Test_BFu0c_BFu16ll_BFu31ll, "BFu0c_BFu16ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu16ll_BFu32i) C1{ Fc:0 FL:16 Fi:32}



static void Test_BFu0c_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu32i");
    static BFu0c_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu32i(Test_BFu0c_BFu16ll_BFu32i, "BFu0c_BFu16ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu16ll_BFu32ll) C1{ Fc:0 FL:16 FL:32}



static void Test_BFu0c_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu32ll");
    static BFu0c_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu32ll(Test_BFu0c_BFu16ll_BFu32ll, "BFu0c_BFu16ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu16ll_BFu33) C1{ Fc:0 FL:16 FL:33}



static void Test_BFu0c_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu33");
    static BFu0c_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0c_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu16ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu33(Test_BFu0c_BFu16ll_BFu33, "BFu0c_BFu16ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu16ll_BFu7c) C1{ Fc:0 FL:16 Fc:7}



static void Test_BFu0c_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu7c");
    static BFu0c_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu7c(Test_BFu0c_BFu16ll_BFu7c, "BFu0c_BFu16ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu16ll_BFu7i) C1{ Fc:0 FL:16 Fi:7}



static void Test_BFu0c_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu7i");
    static BFu0c_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu7i(Test_BFu0c_BFu16ll_BFu7i, "BFu0c_BFu16ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu16ll_BFu7ll) C1{ Fc:0 FL:16 FL:7}



static void Test_BFu0c_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu7ll");
    static BFu0c_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu7ll(Test_BFu0c_BFu16ll_BFu7ll, "BFu0c_BFu16ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu7s");
    static BFu0c_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu7s(Test_BFu0c_BFu16ll_BFu7s, "BFu0c_BFu16ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu16ll_BFu8c) C1{ Fc:0 FL:16 Fc:8}



static void Test_BFu0c_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu8c");
    static BFu0c_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu8c(Test_BFu0c_BFu16ll_BFu8c, "BFu0c_BFu16ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu16ll_BFu8i) C1{ Fc:0 FL:16 Fi:8}



static void Test_BFu0c_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu8i");
    static BFu0c_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu8i(Test_BFu0c_BFu16ll_BFu8i, "BFu0c_BFu16ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu16ll_BFu8ll) C1{ Fc:0 FL:16 FL:8}



static void Test_BFu0c_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu8ll");
    static BFu0c_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu8ll(Test_BFu0c_BFu16ll_BFu8ll, "BFu0c_BFu16ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu8s");
    static BFu0c_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu8s(Test_BFu0c_BFu16ll_BFu8s, "BFu0c_BFu16ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu16ll_BFu9i) C1{ Fc:0 FL:16 Fi:9}



static void Test_BFu0c_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu9i");
    static BFu0c_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu9i(Test_BFu0c_BFu16ll_BFu9i, "BFu0c_BFu16ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu16ll_BFu9ll) C1{ Fc:0 FL:16 FL:9}



static void Test_BFu0c_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu9ll");
    static BFu0c_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu9ll(Test_BFu0c_BFu16ll_BFu9ll, "BFu0c_BFu16ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu16ll_BFu9s");
    static BFu0c_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_BFu9s(Test_BFu0c_BFu16ll_BFu9s, "BFu0c_BFu16ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_C  {
  unsigned char  :0;
  __tsu64 v1:16;
  char v2;
};
//SIG(1 BFu0c_BFu16ll_C) C1{ Fc:0 FL:16 Fc}



static void Test_BFu0c_BFu16ll_C()
{
  {
    init_simple_test("BFu0c_BFu16ll_C");
    static BFu0c_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_C(Test_BFu0c_BFu16ll_C, "BFu0c_BFu16ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_D  {
  unsigned char  :0;
  __tsu64 v1:16;
  double v2;
};
//SIG(1 BFu0c_BFu16ll_D) C1{ Fc:0 FL:16 FL}



static void Test_BFu0c_BFu16ll_D()
{
  {
    init_simple_test("BFu0c_BFu16ll_D");
    static BFu0c_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_D(Test_BFu0c_BFu16ll_D, "BFu0c_BFu16ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_F  {
  unsigned char  :0;
  __tsu64 v1:16;
  float v2;
};
//SIG(1 BFu0c_BFu16ll_F) C1{ Fc:0 FL:16 Fi}



static void Test_BFu0c_BFu16ll_F()
{
  {
    init_simple_test("BFu0c_BFu16ll_F");
    static BFu0c_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_F(Test_BFu0c_BFu16ll_F, "BFu0c_BFu16ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_I  {
  unsigned char  :0;
  __tsu64 v1:16;
  int v2;
};
//SIG(1 BFu0c_BFu16ll_I) C1{ Fc:0 FL:16 Fi}



static void Test_BFu0c_BFu16ll_I()
{
  {
    init_simple_test("BFu0c_BFu16ll_I");
    static BFu0c_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_I(Test_BFu0c_BFu16ll_I, "BFu0c_BFu16ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu16ll_Ip");
    static BFu0c_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Ip(Test_BFu0c_BFu16ll_Ip, "BFu0c_BFu16ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_L  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu16ll_L) C1{ Fc:0 FL:16 FL}



static void Test_BFu0c_BFu16ll_L()
{
  {
    init_simple_test("BFu0c_BFu16ll_L");
    static BFu0c_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_L(Test_BFu0c_BFu16ll_L, "BFu0c_BFu16ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_S()
{
  {
    init_simple_test("BFu0c_BFu16ll_S");
    static BFu0c_BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_S(Test_BFu0c_BFu16ll_S, "BFu0c_BFu16ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu16ll_Uc) C1{ Fc:0 FL:16 Fc}



static void Test_BFu0c_BFu16ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu16ll_Uc");
    static BFu0c_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Uc(Test_BFu0c_BFu16ll_Uc, "BFu0c_BFu16ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:16;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu16ll_Ui) C1{ Fc:0 FL:16 Fi}



static void Test_BFu0c_BFu16ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu16ll_Ui");
    static BFu0c_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Ui(Test_BFu0c_BFu16ll_Ui, "BFu0c_BFu16ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu16ll_Ul) C1{ Fc:0 FL:16 FL}



static void Test_BFu0c_BFu16ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu16ll_Ul");
    static BFu0c_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Ul(Test_BFu0c_BFu16ll_Ul, "BFu0c_BFu16ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16ll_Us()
{
  {
    init_simple_test("BFu0c_BFu16ll_Us");
    static BFu0c_BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Us(Test_BFu0c_BFu16ll_Us, "BFu0c_BFu16ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:16;
  void *v2;
};
//SIG(1 BFu0c_BFu16ll_Vp) C1{ Fc:0 FL:16 Fp}



static void Test_BFu0c_BFu16ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu16ll_Vp");
    static BFu0c_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16ll_Vp(Test_BFu0c_BFu16ll_Vp, "BFu0c_BFu16ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s  {
  unsigned char  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0c_BFu16s) C1{ Fc:0 Fs:16}



static void Test_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu16s");
    static BFu0c_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s(Test_BFu0c_BFu16s, "BFu0c_BFu16s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu0c  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu16s_BFu0c) C1{ Fc:0 Fs:16 Fc:0}



static void Test_BFu0c_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu0c");
    static BFu0c_BFu16s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu0c(Test_BFu0c_BFu16s_BFu0c, "BFu0c_BFu16s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu0i");
    static BFu0c_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu0i(Test_BFu0c_BFu16s_BFu0i, "BFu0c_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu0ll");
    static BFu0c_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu0ll(Test_BFu0c_BFu16s_BFu0ll, "BFu0c_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu0s  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu16s_BFu0s) C1{ Fc:0 Fs:16 Fs:0}



static void Test_BFu0c_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu0s");
    static BFu0c_BFu16s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu0s(Test_BFu0c_BFu16s_BFu0s, "BFu0c_BFu16s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu15i");
    static BFu0c_BFu16s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu15i(Test_BFu0c_BFu16s_BFu15i, "BFu0c_BFu16s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu15ll");
    static BFu0c_BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu15ll(Test_BFu0c_BFu16s_BFu15ll, "BFu0c_BFu16s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu15s  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu16s_BFu15s) C1{ Fc:0 Fs:16 Fs:15}



static void Test_BFu0c_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu15s");
    static BFu0c_BFu16s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu16s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu15s(Test_BFu0c_BFu16s_BFu15s, "BFu0c_BFu16s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu16i");
    static BFu0c_BFu16s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu16i(Test_BFu0c_BFu16s_BFu16i, "BFu0c_BFu16s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu16ll");
    static BFu0c_BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu16ll(Test_BFu0c_BFu16s_BFu16ll, "BFu0c_BFu16s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu16s");
    static BFu0c_BFu16s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu16s(Test_BFu0c_BFu16s_BFu16s, "BFu0c_BFu16s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu17i");
    static BFu0c_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu17i(Test_BFu0c_BFu16s_BFu17i, "BFu0c_BFu16s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu17ll");
    static BFu0c_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu16s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu17ll(Test_BFu0c_BFu16s_BFu17ll, "BFu0c_BFu16s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu1c");
    static BFu0c_BFu16s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu1c(Test_BFu0c_BFu16s_BFu1c, "BFu0c_BFu16s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu1i");
    static BFu0c_BFu16s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu1i(Test_BFu0c_BFu16s_BFu1i, "BFu0c_BFu16s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu1ll");
    static BFu0c_BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu1ll(Test_BFu0c_BFu16s_BFu1ll, "BFu0c_BFu16s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu1s");
    static BFu0c_BFu16s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_BFu16s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu1s(Test_BFu0c_BFu16s_BFu1s, "BFu0c_BFu16s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu31i");
    static BFu0c_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu31i(Test_BFu0c_BFu16s_BFu31i, "BFu0c_BFu16s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu31ll");
    static BFu0c_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu16s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu31ll(Test_BFu0c_BFu16s_BFu31ll, "BFu0c_BFu16s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu32i");
    static BFu0c_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu32i(Test_BFu0c_BFu16s_BFu32i, "BFu0c_BFu16s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu32ll");
    static BFu0c_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu16s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu32ll(Test_BFu0c_BFu16s_BFu32ll, "BFu0c_BFu16s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu33");
    static BFu0c_BFu16s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0c_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu16s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu33(Test_BFu0c_BFu16s_BFu33, "BFu0c_BFu16s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu16s_BFu7c) C1{ Fc:0 Fs:16 Fc:7}



static void Test_BFu0c_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu7c");
    static BFu0c_BFu16s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu7c(Test_BFu0c_BFu16s_BFu7c, "BFu0c_BFu16s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu7i");
    static BFu0c_BFu16s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu7i(Test_BFu0c_BFu16s_BFu7i, "BFu0c_BFu16s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu7ll");
    static BFu0c_BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu7ll(Test_BFu0c_BFu16s_BFu7ll, "BFu0c_BFu16s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu16s_BFu7s) C1{ Fc:0 Fs:16 Fs:7}



static void Test_BFu0c_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu7s");
    static BFu0c_BFu16s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu16s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu7s(Test_BFu0c_BFu16s_BFu7s, "BFu0c_BFu16s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu16s_BFu8c) C1{ Fc:0 Fs:16 Fc:8}



static void Test_BFu0c_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu8c");
    static BFu0c_BFu16s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu8c(Test_BFu0c_BFu16s_BFu8c, "BFu0c_BFu16s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu8i");
    static BFu0c_BFu16s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu8i(Test_BFu0c_BFu16s_BFu8i, "BFu0c_BFu16s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu8ll");
    static BFu0c_BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu8ll(Test_BFu0c_BFu16s_BFu8ll, "BFu0c_BFu16s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu16s_BFu8s) C1{ Fc:0 Fs:16 Fs:8}



static void Test_BFu0c_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu8s");
    static BFu0c_BFu16s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu16s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu8s(Test_BFu0c_BFu16s_BFu8s, "BFu0c_BFu16s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu9i");
    static BFu0c_BFu16s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu9i(Test_BFu0c_BFu16s_BFu9i, "BFu0c_BFu16s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu9ll");
    static BFu0c_BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu9ll(Test_BFu0c_BFu16s_BFu9ll, "BFu0c_BFu16s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu16s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu16s_BFu9s) C1{ Fc:0 Fs:16 Fs:9}



static void Test_BFu0c_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu16s_BFu9s");
    static BFu0c_BFu16s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu16s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_BFu9s(Test_BFu0c_BFu16s_BFu9s, "BFu0c_BFu16s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_C()
{
  {
    init_simple_test("BFu0c_BFu16s_C");
    static BFu0c_BFu16s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_C(Test_BFu0c_BFu16s_C, "BFu0c_BFu16s_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_D()
{
  {
    init_simple_test("BFu0c_BFu16s_D");
    static BFu0c_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_D(Test_BFu0c_BFu16s_D, "BFu0c_BFu16s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_F()
{
  {
    init_simple_test("BFu0c_BFu16s_F");
    static BFu0c_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_F(Test_BFu0c_BFu16s_F, "BFu0c_BFu16s_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_I()
{
  {
    init_simple_test("BFu0c_BFu16s_I");
    static BFu0c_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_I(Test_BFu0c_BFu16s_I, "BFu0c_BFu16s_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Ip()
{
  {
    init_simple_test("BFu0c_BFu16s_Ip");
    static BFu0c_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Ip(Test_BFu0c_BFu16s_Ip, "BFu0c_BFu16s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_L()
{
  {
    init_simple_test("BFu0c_BFu16s_L");
    static BFu0c_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_L(Test_BFu0c_BFu16s_L, "BFu0c_BFu16s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_S()
{
  {
    init_simple_test("BFu0c_BFu16s_S");
    static BFu0c_BFu16s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_S(Test_BFu0c_BFu16s_S, "BFu0c_BFu16s_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Uc()
{
  {
    init_simple_test("BFu0c_BFu16s_Uc");
    static BFu0c_BFu16s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Uc(Test_BFu0c_BFu16s_Uc, "BFu0c_BFu16s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Ui()
{
  {
    init_simple_test("BFu0c_BFu16s_Ui");
    static BFu0c_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu16s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Ui(Test_BFu0c_BFu16s_Ui, "BFu0c_BFu16s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Ul()
{
  {
    init_simple_test("BFu0c_BFu16s_Ul");
    static BFu0c_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Ul(Test_BFu0c_BFu16s_Ul, "BFu0c_BFu16s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Us()
{
  {
    init_simple_test("BFu0c_BFu16s_Us");
    static BFu0c_BFu16s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu16s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Us(Test_BFu0c_BFu16s_Us, "BFu0c_BFu16s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu16s_Vp()
{
  {
    init_simple_test("BFu0c_BFu16s_Vp");
    static BFu0c_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0c_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu16s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu16s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu16s_Vp(Test_BFu0c_BFu16s_Vp, "BFu0c_BFu16s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i  {
  unsigned char  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0c_BFu17i) C1{ Fc:0 Fi:17}



static void Test_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu17i");
    static BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i(Test_BFu0c_BFu17i, "BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu17i_BFu0c) C1{ Fc:0 Fi:17 Fc:0}



static void Test_BFu0c_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu0c");
    static BFu0c_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu0c(Test_BFu0c_BFu17i_BFu0c, "BFu0c_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu17i_BFu0i) C1{ Fc:0 Fi:17 Fi:0}



static void Test_BFu0c_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu0i");
    static BFu0c_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu0i(Test_BFu0c_BFu17i_BFu0i, "BFu0c_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu17i_BFu0ll) C1{ Fc:0 Fi:17 FL:0}



static void Test_BFu0c_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu0ll");
    static BFu0c_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu0ll(Test_BFu0c_BFu17i_BFu0ll, "BFu0c_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu0s");
    static BFu0c_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu0s(Test_BFu0c_BFu17i_BFu0s, "BFu0c_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu17i_BFu15i) C1{ Fc:0 Fi:17 Fi:15}



static void Test_BFu0c_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu15i");
    static BFu0c_BFu17i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu15i(Test_BFu0c_BFu17i_BFu15i, "BFu0c_BFu17i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu17i_BFu15ll) C1{ Fc:0 Fi:17 FL:15}



static void Test_BFu0c_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu15ll");
    static BFu0c_BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu15ll(Test_BFu0c_BFu17i_BFu15ll, "BFu0c_BFu17i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu15s");
    static BFu0c_BFu17i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu15s(Test_BFu0c_BFu17i_BFu15s, "BFu0c_BFu17i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu17i_BFu16i) C1{ Fc:0 Fi:17 Fi:16}



static void Test_BFu0c_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu16i");
    static BFu0c_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu17i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu16i(Test_BFu0c_BFu17i_BFu16i, "BFu0c_BFu17i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu17i_BFu16ll) C1{ Fc:0 Fi:17 FL:16}



static void Test_BFu0c_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu16ll");
    static BFu0c_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu17i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu16ll(Test_BFu0c_BFu17i_BFu16ll, "BFu0c_BFu17i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu16s");
    static BFu0c_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu17i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu16s(Test_BFu0c_BFu17i_BFu16s, "BFu0c_BFu17i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu17i_BFu17i) C1{ Fc:0 Fi:17 Fi:17}



static void Test_BFu0c_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu17i");
    static BFu0c_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu17i(Test_BFu0c_BFu17i_BFu17i, "BFu0c_BFu17i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu17i_BFu17ll) C1{ Fc:0 Fi:17 FL:17}



static void Test_BFu0c_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu17ll");
    static BFu0c_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu17ll(Test_BFu0c_BFu17i_BFu17ll, "BFu0c_BFu17i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu17i_BFu1c) C1{ Fc:0 Fi:17 Fc:1}



static void Test_BFu0c_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu1c");
    static BFu0c_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu1c(Test_BFu0c_BFu17i_BFu1c, "BFu0c_BFu17i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu17i_BFu1i) C1{ Fc:0 Fi:17 Fi:1}



static void Test_BFu0c_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu1i");
    static BFu0c_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu1i(Test_BFu0c_BFu17i_BFu1i, "BFu0c_BFu17i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu17i_BFu1ll) C1{ Fc:0 Fi:17 FL:1}



static void Test_BFu0c_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu1ll");
    static BFu0c_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu1ll(Test_BFu0c_BFu17i_BFu1ll, "BFu0c_BFu17i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu1s");
    static BFu0c_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu1s(Test_BFu0c_BFu17i_BFu1s, "BFu0c_BFu17i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu17i_BFu31i) C1{ Fc:0 Fi:17 Fi:31}



static void Test_BFu0c_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu31i");
    static BFu0c_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu17i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu31i(Test_BFu0c_BFu17i_BFu31i, "BFu0c_BFu17i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu17i_BFu31ll) C1{ Fc:0 Fi:17 FL:31}



static void Test_BFu0c_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu31ll");
    static BFu0c_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu17i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu31ll(Test_BFu0c_BFu17i_BFu31ll, "BFu0c_BFu17i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu17i_BFu32i) C1{ Fc:0 Fi:17 Fi:32}



static void Test_BFu0c_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu32i");
    static BFu0c_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu17i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu32i(Test_BFu0c_BFu17i_BFu32i, "BFu0c_BFu17i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu17i_BFu32ll) C1{ Fc:0 Fi:17 FL:32}



static void Test_BFu0c_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu32ll");
    static BFu0c_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu17i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu32ll(Test_BFu0c_BFu17i_BFu32ll, "BFu0c_BFu17i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu33  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu17i_BFu33) C1{ Fc:0 Fi:17 FL:33}



static void Test_BFu0c_BFu17i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu33");
    static BFu0c_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0c_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu17i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu33(Test_BFu0c_BFu17i_BFu33, "BFu0c_BFu17i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu17i_BFu7c) C1{ Fc:0 Fi:17 Fc:7}



static void Test_BFu0c_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu7c");
    static BFu0c_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu7c(Test_BFu0c_BFu17i_BFu7c, "BFu0c_BFu17i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu17i_BFu7i) C1{ Fc:0 Fi:17 Fi:7}



static void Test_BFu0c_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu7i");
    static BFu0c_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu7i(Test_BFu0c_BFu17i_BFu7i, "BFu0c_BFu17i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu17i_BFu7ll) C1{ Fc:0 Fi:17 FL:7}



static void Test_BFu0c_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu7ll");
    static BFu0c_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu7ll(Test_BFu0c_BFu17i_BFu7ll, "BFu0c_BFu17i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu7s");
    static BFu0c_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu7s(Test_BFu0c_BFu17i_BFu7s, "BFu0c_BFu17i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu17i_BFu8c) C1{ Fc:0 Fi:17 Fc:8}



static void Test_BFu0c_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu8c");
    static BFu0c_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0c_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu17i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu8c(Test_BFu0c_BFu17i_BFu8c, "BFu0c_BFu17i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu17i_BFu8i) C1{ Fc:0 Fi:17 Fi:8}



static void Test_BFu0c_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu8i");
    static BFu0c_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu8i(Test_BFu0c_BFu17i_BFu8i, "BFu0c_BFu17i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu17i_BFu8ll) C1{ Fc:0 Fi:17 FL:8}



static void Test_BFu0c_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu8ll");
    static BFu0c_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu8ll(Test_BFu0c_BFu17i_BFu8ll, "BFu0c_BFu17i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu8s");
    static BFu0c_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu8s(Test_BFu0c_BFu17i_BFu8s, "BFu0c_BFu17i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu17i_BFu9i) C1{ Fc:0 Fi:17 Fi:9}



static void Test_BFu0c_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu9i");
    static BFu0c_BFu17i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu9i(Test_BFu0c_BFu17i_BFu9i, "BFu0c_BFu17i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu17i_BFu9ll) C1{ Fc:0 Fi:17 FL:9}



static void Test_BFu0c_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu9ll");
    static BFu0c_BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu9ll(Test_BFu0c_BFu17i_BFu9ll, "BFu0c_BFu17i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu17i_BFu9s");
    static BFu0c_BFu17i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_BFu9s(Test_BFu0c_BFu17i_BFu9s, "BFu0c_BFu17i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_C  {
  unsigned char  :0;
  unsigned int v1:17;
  char v2;
};
//SIG(1 BFu0c_BFu17i_C) C1{ Fc:0 Fi:17 Fc}



static void Test_BFu0c_BFu17i_C()
{
  {
    init_simple_test("BFu0c_BFu17i_C");
    static BFu0c_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_C");
    check_field_offset(lv, v2, 3, "BFu0c_BFu17i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_C(Test_BFu0c_BFu17i_C, "BFu0c_BFu17i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_D  {
  unsigned char  :0;
  unsigned int v1:17;
  double v2;
};
//SIG(1 BFu0c_BFu17i_D) C1{ Fc:0 Fi:17 FL}



static void Test_BFu0c_BFu17i_D()
{
  {
    init_simple_test("BFu0c_BFu17i_D");
    static BFu0c_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_D(Test_BFu0c_BFu17i_D, "BFu0c_BFu17i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_F  {
  unsigned char  :0;
  unsigned int v1:17;
  float v2;
};
//SIG(1 BFu0c_BFu17i_F) C1{ Fc:0 Fi:17 Fi}



static void Test_BFu0c_BFu17i_F()
{
  {
    init_simple_test("BFu0c_BFu17i_F");
    static BFu0c_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_F(Test_BFu0c_BFu17i_F, "BFu0c_BFu17i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_I  {
  unsigned char  :0;
  unsigned int v1:17;
  int v2;
};
//SIG(1 BFu0c_BFu17i_I) C1{ Fc:0 Fi:17 Fi}



static void Test_BFu0c_BFu17i_I()
{
  {
    init_simple_test("BFu0c_BFu17i_I");
    static BFu0c_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_I(Test_BFu0c_BFu17i_I, "BFu0c_BFu17i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_Ip()
{
  {
    init_simple_test("BFu0c_BFu17i_Ip");
    static BFu0c_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Ip(Test_BFu0c_BFu17i_Ip, "BFu0c_BFu17i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_L  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu17i_L) C1{ Fc:0 Fi:17 FL}



static void Test_BFu0c_BFu17i_L()
{
  {
    init_simple_test("BFu0c_BFu17i_L");
    static BFu0c_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_L(Test_BFu0c_BFu17i_L, "BFu0c_BFu17i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_S()
{
  {
    init_simple_test("BFu0c_BFu17i_S");
    static BFu0c_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_S(Test_BFu0c_BFu17i_S, "BFu0c_BFu17i_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_Uc  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu17i_Uc) C1{ Fc:0 Fi:17 Fc}



static void Test_BFu0c_BFu17i_Uc()
{
  {
    init_simple_test("BFu0c_BFu17i_Uc");
    static BFu0c_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Uc");
    check_field_offset(lv, v2, 3, "BFu0c_BFu17i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Uc(Test_BFu0c_BFu17i_Uc, "BFu0c_BFu17i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_Ui  {
  unsigned char  :0;
  unsigned int v1:17;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu17i_Ui) C1{ Fc:0 Fi:17 Fi}



static void Test_BFu0c_BFu17i_Ui()
{
  {
    init_simple_test("BFu0c_BFu17i_Ui");
    static BFu0c_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Ui(Test_BFu0c_BFu17i_Ui, "BFu0c_BFu17i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17i_Ul  {
  unsigned char  :0;
  unsigned int v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu17i_Ul) C1{ Fc:0 Fi:17 FL}



static void Test_BFu0c_BFu17i_Ul()
{
  {
    init_simple_test("BFu0c_BFu17i_Ul");
    static BFu0c_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Ul(Test_BFu0c_BFu17i_Ul, "BFu0c_BFu17i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_Us()
{
  {
    init_simple_test("BFu0c_BFu17i_Us");
    static BFu0c_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Us(Test_BFu0c_BFu17i_Us, "BFu0c_BFu17i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17i_Vp()
{
  {
    init_simple_test("BFu0c_BFu17i_Vp");
    static BFu0c_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17i_Vp(Test_BFu0c_BFu17i_Vp, "BFu0c_BFu17i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0c_BFu17ll) C1{ Fc:0 FL:17}



static void Test_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu17ll");
    static BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll(Test_BFu0c_BFu17ll, "BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu17ll_BFu0c) C1{ Fc:0 FL:17 Fc:0}



static void Test_BFu0c_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu0c");
    static BFu0c_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu0c(Test_BFu0c_BFu17ll_BFu0c, "BFu0c_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu17ll_BFu0i) C1{ Fc:0 FL:17 Fi:0}



static void Test_BFu0c_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu0i");
    static BFu0c_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu0i(Test_BFu0c_BFu17ll_BFu0i, "BFu0c_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu17ll_BFu0ll) C1{ Fc:0 FL:17 FL:0}



static void Test_BFu0c_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu0ll");
    static BFu0c_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu0ll(Test_BFu0c_BFu17ll_BFu0ll, "BFu0c_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu0s");
    static BFu0c_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu0s(Test_BFu0c_BFu17ll_BFu0s, "BFu0c_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu17ll_BFu15i) C1{ Fc:0 FL:17 Fi:15}



static void Test_BFu0c_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu15i");
    static BFu0c_BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu15i(Test_BFu0c_BFu17ll_BFu15i, "BFu0c_BFu17ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu17ll_BFu15ll) C1{ Fc:0 FL:17 FL:15}



static void Test_BFu0c_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu15ll");
    static BFu0c_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu15ll(Test_BFu0c_BFu17ll_BFu15ll, "BFu0c_BFu17ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu15s");
    static BFu0c_BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu17ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu15s(Test_BFu0c_BFu17ll_BFu15s, "BFu0c_BFu17ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu17ll_BFu16i) C1{ Fc:0 FL:17 Fi:16}



static void Test_BFu0c_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu16i");
    static BFu0c_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu17ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu16i(Test_BFu0c_BFu17ll_BFu16i, "BFu0c_BFu17ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu17ll_BFu16ll) C1{ Fc:0 FL:17 FL:16}



static void Test_BFu0c_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu16ll");
    static BFu0c_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu17ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu16ll(Test_BFu0c_BFu17ll_BFu16ll, "BFu0c_BFu17ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu16s");
    static BFu0c_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu17ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu16s(Test_BFu0c_BFu17ll_BFu16s, "BFu0c_BFu17ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu17ll_BFu17i) C1{ Fc:0 FL:17 Fi:17}



static void Test_BFu0c_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu17i");
    static BFu0c_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu17i(Test_BFu0c_BFu17ll_BFu17i, "BFu0c_BFu17ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu17ll_BFu17ll) C1{ Fc:0 FL:17 FL:17}



static void Test_BFu0c_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu17ll");
    static BFu0c_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu17ll(Test_BFu0c_BFu17ll_BFu17ll, "BFu0c_BFu17ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu17ll_BFu1c) C1{ Fc:0 FL:17 Fc:1}



static void Test_BFu0c_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu1c");
    static BFu0c_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu1c(Test_BFu0c_BFu17ll_BFu1c, "BFu0c_BFu17ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu17ll_BFu1i) C1{ Fc:0 FL:17 Fi:1}



static void Test_BFu0c_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu1i");
    static BFu0c_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu1i(Test_BFu0c_BFu17ll_BFu1i, "BFu0c_BFu17ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu17ll_BFu1ll) C1{ Fc:0 FL:17 FL:1}



static void Test_BFu0c_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu1ll");
    static BFu0c_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu1ll(Test_BFu0c_BFu17ll_BFu1ll, "BFu0c_BFu17ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu1s");
    static BFu0c_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0c_BFu17ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu1s(Test_BFu0c_BFu17ll_BFu1s, "BFu0c_BFu17ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu17ll_BFu31i) C1{ Fc:0 FL:17 Fi:31}



static void Test_BFu0c_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu31i");
    static BFu0c_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu17ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu31i(Test_BFu0c_BFu17ll_BFu31i, "BFu0c_BFu17ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu17ll_BFu31ll) C1{ Fc:0 FL:17 FL:31}



static void Test_BFu0c_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu31ll");
    static BFu0c_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu17ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu31ll(Test_BFu0c_BFu17ll_BFu31ll, "BFu0c_BFu17ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu17ll_BFu32i) C1{ Fc:0 FL:17 Fi:32}



static void Test_BFu0c_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu32i");
    static BFu0c_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu17ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu32i(Test_BFu0c_BFu17ll_BFu32i, "BFu0c_BFu17ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu17ll_BFu32ll) C1{ Fc:0 FL:17 FL:32}



static void Test_BFu0c_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu32ll");
    static BFu0c_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu17ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu32ll(Test_BFu0c_BFu17ll_BFu32ll, "BFu0c_BFu17ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu17ll_BFu33) C1{ Fc:0 FL:17 FL:33}



static void Test_BFu0c_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu33");
    static BFu0c_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0c_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu17ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu33(Test_BFu0c_BFu17ll_BFu33, "BFu0c_BFu17ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu17ll_BFu7c) C1{ Fc:0 FL:17 Fc:7}



static void Test_BFu0c_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu7c");
    static BFu0c_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu7c(Test_BFu0c_BFu17ll_BFu7c, "BFu0c_BFu17ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu17ll_BFu7i) C1{ Fc:0 FL:17 Fi:7}



static void Test_BFu0c_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu7i");
    static BFu0c_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu7i(Test_BFu0c_BFu17ll_BFu7i, "BFu0c_BFu17ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu17ll_BFu7ll) C1{ Fc:0 FL:17 FL:7}



static void Test_BFu0c_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu7ll");
    static BFu0c_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu7ll(Test_BFu0c_BFu17ll_BFu7ll, "BFu0c_BFu17ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu7s");
    static BFu0c_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu17ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu7s(Test_BFu0c_BFu17ll_BFu7s, "BFu0c_BFu17ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu17ll_BFu8c) C1{ Fc:0 FL:17 Fc:8}



static void Test_BFu0c_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu8c");
    static BFu0c_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu17ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu8c(Test_BFu0c_BFu17ll_BFu8c, "BFu0c_BFu17ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu17ll_BFu8i) C1{ Fc:0 FL:17 Fi:8}



static void Test_BFu0c_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu8i");
    static BFu0c_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu8i(Test_BFu0c_BFu17ll_BFu8i, "BFu0c_BFu17ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu17ll_BFu8ll) C1{ Fc:0 FL:17 FL:8}



static void Test_BFu0c_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu8ll");
    static BFu0c_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu8ll(Test_BFu0c_BFu17ll_BFu8ll, "BFu0c_BFu17ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu8s");
    static BFu0c_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu17ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu8s(Test_BFu0c_BFu17ll_BFu8s, "BFu0c_BFu17ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu17ll_BFu9i) C1{ Fc:0 FL:17 Fi:9}



static void Test_BFu0c_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu9i");
    static BFu0c_BFu17ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu9i(Test_BFu0c_BFu17ll_BFu9i, "BFu0c_BFu17ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu17ll_BFu9ll) C1{ Fc:0 FL:17 FL:9}



static void Test_BFu0c_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu9ll");
    static BFu0c_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu9ll(Test_BFu0c_BFu17ll_BFu9ll, "BFu0c_BFu17ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu17ll_BFu9s");
    static BFu0c_BFu17ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu17ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_BFu9s(Test_BFu0c_BFu17ll_BFu9s, "BFu0c_BFu17ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_C  {
  unsigned char  :0;
  __tsu64 v1:17;
  char v2;
};
//SIG(1 BFu0c_BFu17ll_C) C1{ Fc:0 FL:17 Fc}



static void Test_BFu0c_BFu17ll_C()
{
  {
    init_simple_test("BFu0c_BFu17ll_C");
    static BFu0c_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_C");
    check_field_offset(lv, v2, 3, "BFu0c_BFu17ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_C(Test_BFu0c_BFu17ll_C, "BFu0c_BFu17ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_D  {
  unsigned char  :0;
  __tsu64 v1:17;
  double v2;
};
//SIG(1 BFu0c_BFu17ll_D) C1{ Fc:0 FL:17 FL}



static void Test_BFu0c_BFu17ll_D()
{
  {
    init_simple_test("BFu0c_BFu17ll_D");
    static BFu0c_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_D(Test_BFu0c_BFu17ll_D, "BFu0c_BFu17ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_F  {
  unsigned char  :0;
  __tsu64 v1:17;
  float v2;
};
//SIG(1 BFu0c_BFu17ll_F) C1{ Fc:0 FL:17 Fi}



static void Test_BFu0c_BFu17ll_F()
{
  {
    init_simple_test("BFu0c_BFu17ll_F");
    static BFu0c_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_F(Test_BFu0c_BFu17ll_F, "BFu0c_BFu17ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_I  {
  unsigned char  :0;
  __tsu64 v1:17;
  int v2;
};
//SIG(1 BFu0c_BFu17ll_I) C1{ Fc:0 FL:17 Fi}



static void Test_BFu0c_BFu17ll_I()
{
  {
    init_simple_test("BFu0c_BFu17ll_I");
    static BFu0c_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_I(Test_BFu0c_BFu17ll_I, "BFu0c_BFu17ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu17ll_Ip");
    static BFu0c_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Ip(Test_BFu0c_BFu17ll_Ip, "BFu0c_BFu17ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_L  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu17ll_L) C1{ Fc:0 FL:17 FL}



static void Test_BFu0c_BFu17ll_L()
{
  {
    init_simple_test("BFu0c_BFu17ll_L");
    static BFu0c_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_L(Test_BFu0c_BFu17ll_L, "BFu0c_BFu17ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_S()
{
  {
    init_simple_test("BFu0c_BFu17ll_S");
    static BFu0c_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_S(Test_BFu0c_BFu17ll_S, "BFu0c_BFu17ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu17ll_Uc) C1{ Fc:0 FL:17 Fc}



static void Test_BFu0c_BFu17ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu17ll_Uc");
    static BFu0c_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Uc");
    check_field_offset(lv, v2, 3, "BFu0c_BFu17ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Uc(Test_BFu0c_BFu17ll_Uc, "BFu0c_BFu17ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:17;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu17ll_Ui) C1{ Fc:0 FL:17 Fi}



static void Test_BFu0c_BFu17ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu17ll_Ui");
    static BFu0c_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Ui(Test_BFu0c_BFu17ll_Ui, "BFu0c_BFu17ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu17ll_Ul) C1{ Fc:0 FL:17 FL}



static void Test_BFu0c_BFu17ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu17ll_Ul");
    static BFu0c_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Ul(Test_BFu0c_BFu17ll_Ul, "BFu0c_BFu17ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu17ll_Us()
{
  {
    init_simple_test("BFu0c_BFu17ll_Us");
    static BFu0c_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu17ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Us(Test_BFu0c_BFu17ll_Us, "BFu0c_BFu17ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu17ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:17;
  void *v2;
};
//SIG(1 BFu0c_BFu17ll_Vp) C1{ Fc:0 FL:17 Fp}



static void Test_BFu0c_BFu17ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu17ll_Vp");
    static BFu0c_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0c_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu17ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu17ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu17ll_Vp(Test_BFu0c_BFu17ll_Vp, "BFu0c_BFu17ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c  {
  unsigned char  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0c_BFu1c) C1{ Fc:0 Fc:1}



static void Test_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu1c");
    static BFu0c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c(Test_BFu0c_BFu1c, "BFu0c_BFu1c", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu0c  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu1c_BFu0c) C1{ Fc:0 Fc:1 Fc:0}



static void Test_BFu0c_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu0c");
    static BFu0c_BFu1c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu0c(Test_BFu0c_BFu1c_BFu0c, "BFu0c_BFu1c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu0i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu1c_BFu0i) C1{ Fc:0 Fc:1 Fi:0}



static void Test_BFu0c_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu0i");
    static BFu0c_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu0i(Test_BFu0c_BFu1c_BFu0i, "BFu0c_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu0ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu1c_BFu0ll) C1{ Fc:0 Fc:1 FL:0}



static void Test_BFu0c_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu0ll");
    static BFu0c_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu0ll(Test_BFu0c_BFu1c_BFu0ll, "BFu0c_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu0s");
    static BFu0c_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu0s(Test_BFu0c_BFu1c_BFu0s, "BFu0c_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu15i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu1c_BFu15i) C1{ Fc:0 Fc:1 Fi:15}



static void Test_BFu0c_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu15i");
    static BFu0c_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu15i(Test_BFu0c_BFu1c_BFu15i, "BFu0c_BFu1c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu15ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu1c_BFu15ll) C1{ Fc:0 Fc:1 FL:15}



static void Test_BFu0c_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu15ll");
    static BFu0c_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu15ll(Test_BFu0c_BFu1c_BFu15ll, "BFu0c_BFu1c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu15s");
    static BFu0c_BFu1c_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu15s(Test_BFu0c_BFu1c_BFu15s, "BFu0c_BFu1c_BFu15s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu16i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu1c_BFu16i) C1{ Fc:0 Fc:1 Fi:16}



static void Test_BFu0c_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu16i");
    static BFu0c_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu16i(Test_BFu0c_BFu1c_BFu16i, "BFu0c_BFu1c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu16ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu1c_BFu16ll) C1{ Fc:0 Fc:1 FL:16}



static void Test_BFu0c_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu16ll");
    static BFu0c_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu16ll(Test_BFu0c_BFu1c_BFu16ll, "BFu0c_BFu1c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu16s");
    static BFu0c_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu1c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu16s(Test_BFu0c_BFu1c_BFu16s, "BFu0c_BFu1c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu17i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu1c_BFu17i) C1{ Fc:0 Fc:1 Fi:17}



static void Test_BFu0c_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu17i");
    static BFu0c_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu17i(Test_BFu0c_BFu1c_BFu17i, "BFu0c_BFu1c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu17ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu1c_BFu17ll) C1{ Fc:0 Fc:1 FL:17}



static void Test_BFu0c_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu17ll");
    static BFu0c_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu17ll(Test_BFu0c_BFu1c_BFu17ll, "BFu0c_BFu1c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu1c  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu1c_BFu1c) C1{ Fc:0 Fc:1 Fc:1}



static void Test_BFu0c_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu1c");
    static BFu0c_BFu1c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu1c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu1c(Test_BFu0c_BFu1c_BFu1c, "BFu0c_BFu1c_BFu1c", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu1i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu1c_BFu1i) C1{ Fc:0 Fc:1 Fi:1}



static void Test_BFu0c_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu1i");
    static BFu0c_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu1i(Test_BFu0c_BFu1c_BFu1i, "BFu0c_BFu1c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu1ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu1c_BFu1ll) C1{ Fc:0 Fc:1 FL:1}



static void Test_BFu0c_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu1ll");
    static BFu0c_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu1ll(Test_BFu0c_BFu1c_BFu1ll, "BFu0c_BFu1c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu1s");
    static BFu0c_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu1s(Test_BFu0c_BFu1c_BFu1s, "BFu0c_BFu1c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu31i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu1c_BFu31i) C1{ Fc:0 Fc:1 Fi:31}



static void Test_BFu0c_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu31i");
    static BFu0c_BFu1c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu31i(Test_BFu0c_BFu1c_BFu31i, "BFu0c_BFu1c_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu31ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu1c_BFu31ll) C1{ Fc:0 Fc:1 FL:31}



static void Test_BFu0c_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu31ll");
    static BFu0c_BFu1c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu31ll(Test_BFu0c_BFu1c_BFu31ll, "BFu0c_BFu1c_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu32i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu1c_BFu32i) C1{ Fc:0 Fc:1 Fi:32}



static void Test_BFu0c_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu32i");
    static BFu0c_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu1c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu32i(Test_BFu0c_BFu1c_BFu32i, "BFu0c_BFu1c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu32ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu1c_BFu32ll) C1{ Fc:0 Fc:1 FL:32}



static void Test_BFu0c_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu32ll");
    static BFu0c_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu1c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu32ll(Test_BFu0c_BFu1c_BFu32ll, "BFu0c_BFu1c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu33  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu1c_BFu33) C1{ Fc:0 Fc:1 FL:33}



static void Test_BFu0c_BFu1c_BFu33()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu33");
    static BFu0c_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0c_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu1c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu33(Test_BFu0c_BFu1c_BFu33, "BFu0c_BFu1c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu7c  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu1c_BFu7c) C1{ Fc:0 Fc:1 Fc:7}



static void Test_BFu0c_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu7c");
    static BFu0c_BFu1c_BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu1c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu7c(Test_BFu0c_BFu1c_BFu7c, "BFu0c_BFu1c_BFu7c", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu7i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu1c_BFu7i) C1{ Fc:0 Fc:1 Fi:7}



static void Test_BFu0c_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu7i");
    static BFu0c_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu7i(Test_BFu0c_BFu1c_BFu7i, "BFu0c_BFu1c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu7ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu1c_BFu7ll) C1{ Fc:0 Fc:1 FL:7}



static void Test_BFu0c_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu7ll");
    static BFu0c_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu7ll(Test_BFu0c_BFu1c_BFu7ll, "BFu0c_BFu1c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu7s");
    static BFu0c_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu7s(Test_BFu0c_BFu1c_BFu7s, "BFu0c_BFu1c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu8c  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu1c_BFu8c) C1{ Fc:0 Fc:1 Fc:8}



static void Test_BFu0c_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu8c");
    static BFu0c_BFu1c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu1c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu8c(Test_BFu0c_BFu1c_BFu8c, "BFu0c_BFu1c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu8i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu1c_BFu8i) C1{ Fc:0 Fc:1 Fi:8}



static void Test_BFu0c_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu8i");
    static BFu0c_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu8i(Test_BFu0c_BFu1c_BFu8i, "BFu0c_BFu1c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu8ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu1c_BFu8ll) C1{ Fc:0 Fc:1 FL:8}



static void Test_BFu0c_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu8ll");
    static BFu0c_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu8ll(Test_BFu0c_BFu1c_BFu8ll, "BFu0c_BFu1c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu8s");
    static BFu0c_BFu1c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu8s(Test_BFu0c_BFu1c_BFu8s, "BFu0c_BFu1c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu9i  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu1c_BFu9i) C1{ Fc:0 Fc:1 Fi:9}



static void Test_BFu0c_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu9i");
    static BFu0c_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu9i(Test_BFu0c_BFu1c_BFu9i, "BFu0c_BFu1c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_BFu9ll  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu1c_BFu9ll) C1{ Fc:0 Fc:1 FL:9}



static void Test_BFu0c_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu9ll");
    static BFu0c_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu9ll(Test_BFu0c_BFu1c_BFu9ll, "BFu0c_BFu1c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu1c_BFu9s");
    static BFu0c_BFu1c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_BFu9s(Test_BFu0c_BFu1c_BFu9s, "BFu0c_BFu1c_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_C  {
  unsigned char  :0;
  unsigned char v1:1;
  char v2;
};
//SIG(1 BFu0c_BFu1c_C) C1{ Fc:0 Fc:1 Fc}



static void Test_BFu0c_BFu1c_C()
{
  {
    init_simple_test("BFu0c_BFu1c_C");
    static BFu0c_BFu1c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_C(Test_BFu0c_BFu1c_C, "BFu0c_BFu1c_C", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_D  {
  unsigned char  :0;
  unsigned char v1:1;
  double v2;
};
//SIG(1 BFu0c_BFu1c_D) C1{ Fc:0 Fc:1 FL}



static void Test_BFu0c_BFu1c_D()
{
  {
    init_simple_test("BFu0c_BFu1c_D");
    static BFu0c_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_D(Test_BFu0c_BFu1c_D, "BFu0c_BFu1c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_F  {
  unsigned char  :0;
  unsigned char v1:1;
  float v2;
};
//SIG(1 BFu0c_BFu1c_F) C1{ Fc:0 Fc:1 Fi}



static void Test_BFu0c_BFu1c_F()
{
  {
    init_simple_test("BFu0c_BFu1c_F");
    static BFu0c_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_F(Test_BFu0c_BFu1c_F, "BFu0c_BFu1c_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_I  {
  unsigned char  :0;
  unsigned char v1:1;
  int v2;
};
//SIG(1 BFu0c_BFu1c_I) C1{ Fc:0 Fc:1 Fi}



static void Test_BFu0c_BFu1c_I()
{
  {
    init_simple_test("BFu0c_BFu1c_I");
    static BFu0c_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_I(Test_BFu0c_BFu1c_I, "BFu0c_BFu1c_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_Ip()
{
  {
    init_simple_test("BFu0c_BFu1c_Ip");
    static BFu0c_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Ip(Test_BFu0c_BFu1c_Ip, "BFu0c_BFu1c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_L  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu1c_L) C1{ Fc:0 Fc:1 FL}



static void Test_BFu0c_BFu1c_L()
{
  {
    init_simple_test("BFu0c_BFu1c_L");
    static BFu0c_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_L(Test_BFu0c_BFu1c_L, "BFu0c_BFu1c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_S()
{
  {
    init_simple_test("BFu0c_BFu1c_S");
    static BFu0c_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_S(Test_BFu0c_BFu1c_S, "BFu0c_BFu1c_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_Uc  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu1c_Uc) C1{ Fc:0 Fc:1 Fc}



static void Test_BFu0c_BFu1c_Uc()
{
  {
    init_simple_test("BFu0c_BFu1c_Uc");
    static BFu0c_BFu1c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Uc(Test_BFu0c_BFu1c_Uc, "BFu0c_BFu1c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_Ui  {
  unsigned char  :0;
  unsigned char v1:1;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu1c_Ui) C1{ Fc:0 Fc:1 Fi}



static void Test_BFu0c_BFu1c_Ui()
{
  {
    init_simple_test("BFu0c_BFu1c_Ui");
    static BFu0c_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Ui(Test_BFu0c_BFu1c_Ui, "BFu0c_BFu1c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_Ul  {
  unsigned char  :0;
  unsigned char v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu1c_Ul) C1{ Fc:0 Fc:1 FL}



static void Test_BFu0c_BFu1c_Ul()
{
  {
    init_simple_test("BFu0c_BFu1c_Ul");
    static BFu0c_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Ul(Test_BFu0c_BFu1c_Ul, "BFu0c_BFu1c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1c_Us()
{
  {
    init_simple_test("BFu0c_BFu1c_Us");
    static BFu0c_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Us(Test_BFu0c_BFu1c_Us, "BFu0c_BFu1c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1c_Vp  {
  unsigned char  :0;
  unsigned char v1:1;
  void *v2;
};
//SIG(1 BFu0c_BFu1c_Vp) C1{ Fc:0 Fc:1 Fp}



static void Test_BFu0c_BFu1c_Vp()
{
  {
    init_simple_test("BFu0c_BFu1c_Vp");
    static BFu0c_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1c_Vp(Test_BFu0c_BFu1c_Vp, "BFu0c_BFu1c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i  {
  unsigned char  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0c_BFu1i) C1{ Fc:0 Fi:1}



static void Test_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu1i");
    static BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i(Test_BFu0c_BFu1i, "BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu1i_BFu0c) C1{ Fc:0 Fi:1 Fc:0}



static void Test_BFu0c_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu0c");
    static BFu0c_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu0c(Test_BFu0c_BFu1i_BFu0c, "BFu0c_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu1i_BFu0i) C1{ Fc:0 Fi:1 Fi:0}



static void Test_BFu0c_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu0i");
    static BFu0c_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu0i(Test_BFu0c_BFu1i_BFu0i, "BFu0c_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu1i_BFu0ll) C1{ Fc:0 Fi:1 FL:0}



static void Test_BFu0c_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu0ll");
    static BFu0c_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu0ll(Test_BFu0c_BFu1i_BFu0ll, "BFu0c_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu1i_BFu0s) C1{ Fc:0 Fi:1 Fs:0}



static void Test_BFu0c_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu0s");
    static BFu0c_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu0s(Test_BFu0c_BFu1i_BFu0s, "BFu0c_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu1i_BFu15i) C1{ Fc:0 Fi:1 Fi:15}



static void Test_BFu0c_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu15i");
    static BFu0c_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu15i(Test_BFu0c_BFu1i_BFu15i, "BFu0c_BFu1i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu1i_BFu15ll) C1{ Fc:0 Fi:1 FL:15}



static void Test_BFu0c_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu15ll");
    static BFu0c_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu15ll(Test_BFu0c_BFu1i_BFu15ll, "BFu0c_BFu1i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu15s");
    static BFu0c_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu15s(Test_BFu0c_BFu1i_BFu15s, "BFu0c_BFu1i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu1i_BFu16i) C1{ Fc:0 Fi:1 Fi:16}



static void Test_BFu0c_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu16i");
    static BFu0c_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu16i(Test_BFu0c_BFu1i_BFu16i, "BFu0c_BFu1i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu1i_BFu16ll) C1{ Fc:0 Fi:1 FL:16}



static void Test_BFu0c_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu16ll");
    static BFu0c_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu16ll(Test_BFu0c_BFu1i_BFu16ll, "BFu0c_BFu1i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu16s");
    static BFu0c_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu1i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu16s(Test_BFu0c_BFu1i_BFu16s, "BFu0c_BFu1i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu1i_BFu17i) C1{ Fc:0 Fi:1 Fi:17}



static void Test_BFu0c_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu17i");
    static BFu0c_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu17i(Test_BFu0c_BFu1i_BFu17i, "BFu0c_BFu1i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu1i_BFu17ll) C1{ Fc:0 Fi:1 FL:17}



static void Test_BFu0c_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu17ll");
    static BFu0c_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu17ll(Test_BFu0c_BFu1i_BFu17ll, "BFu0c_BFu1i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu1i_BFu1c) C1{ Fc:0 Fi:1 Fc:1}



static void Test_BFu0c_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu1c");
    static BFu0c_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu1c(Test_BFu0c_BFu1i_BFu1c, "BFu0c_BFu1i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu1i_BFu1i) C1{ Fc:0 Fi:1 Fi:1}



static void Test_BFu0c_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu1i");
    static BFu0c_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu1i(Test_BFu0c_BFu1i_BFu1i, "BFu0c_BFu1i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu1i_BFu1ll) C1{ Fc:0 Fi:1 FL:1}



static void Test_BFu0c_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu1ll");
    static BFu0c_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu1ll(Test_BFu0c_BFu1i_BFu1ll, "BFu0c_BFu1i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu1s");
    static BFu0c_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu1s(Test_BFu0c_BFu1i_BFu1s, "BFu0c_BFu1i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu1i_BFu31i) C1{ Fc:0 Fi:1 Fi:31}



static void Test_BFu0c_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu31i");
    static BFu0c_BFu1i_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu31i(Test_BFu0c_BFu1i_BFu31i, "BFu0c_BFu1i_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu1i_BFu31ll) C1{ Fc:0 Fi:1 FL:31}



static void Test_BFu0c_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu31ll");
    static BFu0c_BFu1i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu31ll(Test_BFu0c_BFu1i_BFu31ll, "BFu0c_BFu1i_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu1i_BFu32i) C1{ Fc:0 Fi:1 Fi:32}



static void Test_BFu0c_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu32i");
    static BFu0c_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu1i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu32i(Test_BFu0c_BFu1i_BFu32i, "BFu0c_BFu1i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu1i_BFu32ll) C1{ Fc:0 Fi:1 FL:32}



static void Test_BFu0c_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu32ll");
    static BFu0c_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu1i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu32ll(Test_BFu0c_BFu1i_BFu32ll, "BFu0c_BFu1i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu33  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu1i_BFu33) C1{ Fc:0 Fi:1 FL:33}



static void Test_BFu0c_BFu1i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu33");
    static BFu0c_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0c_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu1i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu33(Test_BFu0c_BFu1i_BFu33, "BFu0c_BFu1i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu1i_BFu7c) C1{ Fc:0 Fi:1 Fc:7}



static void Test_BFu0c_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu7c");
    static BFu0c_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu7c(Test_BFu0c_BFu1i_BFu7c, "BFu0c_BFu1i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu1i_BFu7i) C1{ Fc:0 Fi:1 Fi:7}



static void Test_BFu0c_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu7i");
    static BFu0c_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu7i(Test_BFu0c_BFu1i_BFu7i, "BFu0c_BFu1i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu1i_BFu7ll) C1{ Fc:0 Fi:1 FL:7}



static void Test_BFu0c_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu7ll");
    static BFu0c_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu7ll(Test_BFu0c_BFu1i_BFu7ll, "BFu0c_BFu1i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu7s");
    static BFu0c_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu7s(Test_BFu0c_BFu1i_BFu7s, "BFu0c_BFu1i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu1i_BFu8c) C1{ Fc:0 Fi:1 Fc:8}



static void Test_BFu0c_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu8c");
    static BFu0c_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu1i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu8c(Test_BFu0c_BFu1i_BFu8c, "BFu0c_BFu1i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu1i_BFu8i) C1{ Fc:0 Fi:1 Fi:8}



static void Test_BFu0c_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu8i");
    static BFu0c_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu8i(Test_BFu0c_BFu1i_BFu8i, "BFu0c_BFu1i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu1i_BFu8ll) C1{ Fc:0 Fi:1 FL:8}



static void Test_BFu0c_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu8ll");
    static BFu0c_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu8ll(Test_BFu0c_BFu1i_BFu8ll, "BFu0c_BFu1i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu8s");
    static BFu0c_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu8s(Test_BFu0c_BFu1i_BFu8s, "BFu0c_BFu1i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu1i_BFu9i) C1{ Fc:0 Fi:1 Fi:9}



static void Test_BFu0c_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu9i");
    static BFu0c_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu9i(Test_BFu0c_BFu1i_BFu9i, "BFu0c_BFu1i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu1i_BFu9ll) C1{ Fc:0 Fi:1 FL:9}



static void Test_BFu0c_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu9ll");
    static BFu0c_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu9ll(Test_BFu0c_BFu1i_BFu9ll, "BFu0c_BFu1i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu1i_BFu9s");
    static BFu0c_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_BFu9s(Test_BFu0c_BFu1i_BFu9s, "BFu0c_BFu1i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_C  {
  unsigned char  :0;
  unsigned int v1:1;
  char v2;
};
//SIG(1 BFu0c_BFu1i_C) C1{ Fc:0 Fi:1 Fc}



static void Test_BFu0c_BFu1i_C()
{
  {
    init_simple_test("BFu0c_BFu1i_C");
    static BFu0c_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_C(Test_BFu0c_BFu1i_C, "BFu0c_BFu1i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_D  {
  unsigned char  :0;
  unsigned int v1:1;
  double v2;
};
//SIG(1 BFu0c_BFu1i_D) C1{ Fc:0 Fi:1 FL}



static void Test_BFu0c_BFu1i_D()
{
  {
    init_simple_test("BFu0c_BFu1i_D");
    static BFu0c_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_D(Test_BFu0c_BFu1i_D, "BFu0c_BFu1i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_F  {
  unsigned char  :0;
  unsigned int v1:1;
  float v2;
};
//SIG(1 BFu0c_BFu1i_F) C1{ Fc:0 Fi:1 Fi}



static void Test_BFu0c_BFu1i_F()
{
  {
    init_simple_test("BFu0c_BFu1i_F");
    static BFu0c_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_F(Test_BFu0c_BFu1i_F, "BFu0c_BFu1i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_I  {
  unsigned char  :0;
  unsigned int v1:1;
  int v2;
};
//SIG(1 BFu0c_BFu1i_I) C1{ Fc:0 Fi:1 Fi}



static void Test_BFu0c_BFu1i_I()
{
  {
    init_simple_test("BFu0c_BFu1i_I");
    static BFu0c_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_I(Test_BFu0c_BFu1i_I, "BFu0c_BFu1i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_Ip()
{
  {
    init_simple_test("BFu0c_BFu1i_Ip");
    static BFu0c_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Ip(Test_BFu0c_BFu1i_Ip, "BFu0c_BFu1i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_L  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu1i_L) C1{ Fc:0 Fi:1 FL}



static void Test_BFu0c_BFu1i_L()
{
  {
    init_simple_test("BFu0c_BFu1i_L");
    static BFu0c_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_L(Test_BFu0c_BFu1i_L, "BFu0c_BFu1i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_S()
{
  {
    init_simple_test("BFu0c_BFu1i_S");
    static BFu0c_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_S(Test_BFu0c_BFu1i_S, "BFu0c_BFu1i_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_Uc  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu1i_Uc) C1{ Fc:0 Fi:1 Fc}



static void Test_BFu0c_BFu1i_Uc()
{
  {
    init_simple_test("BFu0c_BFu1i_Uc");
    static BFu0c_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Uc(Test_BFu0c_BFu1i_Uc, "BFu0c_BFu1i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_Ui  {
  unsigned char  :0;
  unsigned int v1:1;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu1i_Ui) C1{ Fc:0 Fi:1 Fi}



static void Test_BFu0c_BFu1i_Ui()
{
  {
    init_simple_test("BFu0c_BFu1i_Ui");
    static BFu0c_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Ui(Test_BFu0c_BFu1i_Ui, "BFu0c_BFu1i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1i_Ul  {
  unsigned char  :0;
  unsigned int v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu1i_Ul) C1{ Fc:0 Fi:1 FL}



static void Test_BFu0c_BFu1i_Ul()
{
  {
    init_simple_test("BFu0c_BFu1i_Ul");
    static BFu0c_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Ul(Test_BFu0c_BFu1i_Ul, "BFu0c_BFu1i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_Us()
{
  {
    init_simple_test("BFu0c_BFu1i_Us");
    static BFu0c_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Us(Test_BFu0c_BFu1i_Us, "BFu0c_BFu1i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1i_Vp()
{
  {
    init_simple_test("BFu0c_BFu1i_Vp");
    static BFu0c_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1i_Vp(Test_BFu0c_BFu1i_Vp, "BFu0c_BFu1i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0c_BFu1ll) C1{ Fc:0 FL:1}



static void Test_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu1ll");
    static BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll(Test_BFu0c_BFu1ll, "BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu1ll_BFu0c) C1{ Fc:0 FL:1 Fc:0}



static void Test_BFu0c_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu0c");
    static BFu0c_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu0c(Test_BFu0c_BFu1ll_BFu0c, "BFu0c_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu1ll_BFu0i) C1{ Fc:0 FL:1 Fi:0}



static void Test_BFu0c_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu0i");
    static BFu0c_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu0i(Test_BFu0c_BFu1ll_BFu0i, "BFu0c_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu1ll_BFu0ll) C1{ Fc:0 FL:1 FL:0}



static void Test_BFu0c_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu0ll");
    static BFu0c_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu0ll(Test_BFu0c_BFu1ll_BFu0ll, "BFu0c_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu1ll_BFu0s) C1{ Fc:0 FL:1 Fs:0}



static void Test_BFu0c_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu0s");
    static BFu0c_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu0s(Test_BFu0c_BFu1ll_BFu0s, "BFu0c_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu1ll_BFu15i) C1{ Fc:0 FL:1 Fi:15}



static void Test_BFu0c_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu15i");
    static BFu0c_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu15i(Test_BFu0c_BFu1ll_BFu15i, "BFu0c_BFu1ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu1ll_BFu15ll) C1{ Fc:0 FL:1 FL:15}



static void Test_BFu0c_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu15ll");
    static BFu0c_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu15ll(Test_BFu0c_BFu1ll_BFu15ll, "BFu0c_BFu1ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu15s");
    static BFu0c_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu15s(Test_BFu0c_BFu1ll_BFu15s, "BFu0c_BFu1ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu1ll_BFu16i) C1{ Fc:0 FL:1 Fi:16}



static void Test_BFu0c_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu16i");
    static BFu0c_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu16i(Test_BFu0c_BFu1ll_BFu16i, "BFu0c_BFu1ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu1ll_BFu16ll) C1{ Fc:0 FL:1 FL:16}



static void Test_BFu0c_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu16ll");
    static BFu0c_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu16ll(Test_BFu0c_BFu1ll_BFu16ll, "BFu0c_BFu1ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu16s");
    static BFu0c_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu1ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu16s(Test_BFu0c_BFu1ll_BFu16s, "BFu0c_BFu1ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu1ll_BFu17i) C1{ Fc:0 FL:1 Fi:17}



static void Test_BFu0c_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu17i");
    static BFu0c_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu17i(Test_BFu0c_BFu1ll_BFu17i, "BFu0c_BFu1ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu1ll_BFu17ll) C1{ Fc:0 FL:1 FL:17}



static void Test_BFu0c_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu17ll");
    static BFu0c_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu17ll(Test_BFu0c_BFu1ll_BFu17ll, "BFu0c_BFu1ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu1ll_BFu1c) C1{ Fc:0 FL:1 Fc:1}



static void Test_BFu0c_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu1c");
    static BFu0c_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu1c(Test_BFu0c_BFu1ll_BFu1c, "BFu0c_BFu1ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu1ll_BFu1i) C1{ Fc:0 FL:1 Fi:1}



static void Test_BFu0c_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu1i");
    static BFu0c_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu1i(Test_BFu0c_BFu1ll_BFu1i, "BFu0c_BFu1ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu1ll_BFu1ll) C1{ Fc:0 FL:1 FL:1}



static void Test_BFu0c_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu1ll");
    static BFu0c_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu1ll(Test_BFu0c_BFu1ll_BFu1ll, "BFu0c_BFu1ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu1s");
    static BFu0c_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu1s(Test_BFu0c_BFu1ll_BFu1s, "BFu0c_BFu1ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu1ll_BFu31i) C1{ Fc:0 FL:1 Fi:31}



static void Test_BFu0c_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu31i");
    static BFu0c_BFu1ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu31i(Test_BFu0c_BFu1ll_BFu31i, "BFu0c_BFu1ll_BFu31i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu1ll_BFu31ll) C1{ Fc:0 FL:1 FL:31}



static void Test_BFu0c_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu31ll");
    static BFu0c_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu31ll(Test_BFu0c_BFu1ll_BFu31ll, "BFu0c_BFu1ll_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu1ll_BFu32i) C1{ Fc:0 FL:1 Fi:32}



static void Test_BFu0c_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu32i");
    static BFu0c_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu1ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu32i(Test_BFu0c_BFu1ll_BFu32i, "BFu0c_BFu1ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu1ll_BFu32ll) C1{ Fc:0 FL:1 FL:32}



static void Test_BFu0c_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu32ll");
    static BFu0c_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu1ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu32ll(Test_BFu0c_BFu1ll_BFu32ll, "BFu0c_BFu1ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu1ll_BFu33) C1{ Fc:0 FL:1 FL:33}



static void Test_BFu0c_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu33");
    static BFu0c_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0c_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu1ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu33(Test_BFu0c_BFu1ll_BFu33, "BFu0c_BFu1ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu1ll_BFu7c) C1{ Fc:0 FL:1 Fc:7}



static void Test_BFu0c_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu7c");
    static BFu0c_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu7c(Test_BFu0c_BFu1ll_BFu7c, "BFu0c_BFu1ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu1ll_BFu7i) C1{ Fc:0 FL:1 Fi:7}



static void Test_BFu0c_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu7i");
    static BFu0c_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu7i(Test_BFu0c_BFu1ll_BFu7i, "BFu0c_BFu1ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu1ll_BFu7ll) C1{ Fc:0 FL:1 FL:7}



static void Test_BFu0c_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu7ll");
    static BFu0c_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu7ll(Test_BFu0c_BFu1ll_BFu7ll, "BFu0c_BFu1ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu7s");
    static BFu0c_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu7s(Test_BFu0c_BFu1ll_BFu7s, "BFu0c_BFu1ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu1ll_BFu8c) C1{ Fc:0 FL:1 Fc:8}



static void Test_BFu0c_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu8c");
    static BFu0c_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu1ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu8c(Test_BFu0c_BFu1ll_BFu8c, "BFu0c_BFu1ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu1ll_BFu8i) C1{ Fc:0 FL:1 Fi:8}



static void Test_BFu0c_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu8i");
    static BFu0c_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu8i(Test_BFu0c_BFu1ll_BFu8i, "BFu0c_BFu1ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu1ll_BFu8ll) C1{ Fc:0 FL:1 FL:8}



static void Test_BFu0c_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu8ll");
    static BFu0c_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu8ll(Test_BFu0c_BFu1ll_BFu8ll, "BFu0c_BFu1ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu8s");
    static BFu0c_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu8s(Test_BFu0c_BFu1ll_BFu8s, "BFu0c_BFu1ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu1ll_BFu9i) C1{ Fc:0 FL:1 Fi:9}



static void Test_BFu0c_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu9i");
    static BFu0c_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu9i(Test_BFu0c_BFu1ll_BFu9i, "BFu0c_BFu1ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu1ll_BFu9ll) C1{ Fc:0 FL:1 FL:9}



static void Test_BFu0c_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu9ll");
    static BFu0c_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu9ll(Test_BFu0c_BFu1ll_BFu9ll, "BFu0c_BFu1ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu1ll_BFu9s");
    static BFu0c_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_BFu9s(Test_BFu0c_BFu1ll_BFu9s, "BFu0c_BFu1ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_C  {
  unsigned char  :0;
  __tsu64 v1:1;
  char v2;
};
//SIG(1 BFu0c_BFu1ll_C) C1{ Fc:0 FL:1 Fc}



static void Test_BFu0c_BFu1ll_C()
{
  {
    init_simple_test("BFu0c_BFu1ll_C");
    static BFu0c_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_C(Test_BFu0c_BFu1ll_C, "BFu0c_BFu1ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_D  {
  unsigned char  :0;
  __tsu64 v1:1;
  double v2;
};
//SIG(1 BFu0c_BFu1ll_D) C1{ Fc:0 FL:1 FL}



static void Test_BFu0c_BFu1ll_D()
{
  {
    init_simple_test("BFu0c_BFu1ll_D");
    static BFu0c_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_D(Test_BFu0c_BFu1ll_D, "BFu0c_BFu1ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_F  {
  unsigned char  :0;
  __tsu64 v1:1;
  float v2;
};
//SIG(1 BFu0c_BFu1ll_F) C1{ Fc:0 FL:1 Fi}



static void Test_BFu0c_BFu1ll_F()
{
  {
    init_simple_test("BFu0c_BFu1ll_F");
    static BFu0c_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_F(Test_BFu0c_BFu1ll_F, "BFu0c_BFu1ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_I  {
  unsigned char  :0;
  __tsu64 v1:1;
  int v2;
};
//SIG(1 BFu0c_BFu1ll_I) C1{ Fc:0 FL:1 Fi}



static void Test_BFu0c_BFu1ll_I()
{
  {
    init_simple_test("BFu0c_BFu1ll_I");
    static BFu0c_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_I(Test_BFu0c_BFu1ll_I, "BFu0c_BFu1ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu1ll_Ip");
    static BFu0c_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Ip(Test_BFu0c_BFu1ll_Ip, "BFu0c_BFu1ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_L  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu1ll_L) C1{ Fc:0 FL:1 FL}



static void Test_BFu0c_BFu1ll_L()
{
  {
    init_simple_test("BFu0c_BFu1ll_L");
    static BFu0c_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_L(Test_BFu0c_BFu1ll_L, "BFu0c_BFu1ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_S()
{
  {
    init_simple_test("BFu0c_BFu1ll_S");
    static BFu0c_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_S(Test_BFu0c_BFu1ll_S, "BFu0c_BFu1ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu1ll_Uc) C1{ Fc:0 FL:1 Fc}



static void Test_BFu0c_BFu1ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu1ll_Uc");
    static BFu0c_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Uc(Test_BFu0c_BFu1ll_Uc, "BFu0c_BFu1ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:1;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu1ll_Ui) C1{ Fc:0 FL:1 Fi}



static void Test_BFu0c_BFu1ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu1ll_Ui");
    static BFu0c_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Ui(Test_BFu0c_BFu1ll_Ui, "BFu0c_BFu1ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu1ll_Ul) C1{ Fc:0 FL:1 FL}



static void Test_BFu0c_BFu1ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu1ll_Ul");
    static BFu0c_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Ul(Test_BFu0c_BFu1ll_Ul, "BFu0c_BFu1ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1ll_Us()
{
  {
    init_simple_test("BFu0c_BFu1ll_Us");
    static BFu0c_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Us(Test_BFu0c_BFu1ll_Us, "BFu0c_BFu1ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:1;
  void *v2;
};
//SIG(1 BFu0c_BFu1ll_Vp) C1{ Fc:0 FL:1 Fp}



static void Test_BFu0c_BFu1ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu1ll_Vp");
    static BFu0c_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1ll_Vp(Test_BFu0c_BFu1ll_Vp, "BFu0c_BFu1ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu1s");
    static BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s(Test_BFu0c_BFu1s, "BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu0c");
    static BFu0c_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu0c(Test_BFu0c_BFu1s_BFu0c, "BFu0c_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu0i  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu1s_BFu0i) C1{ Fc:0 Fs:1 Fi:0}



static void Test_BFu0c_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu0i");
    static BFu0c_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu0i(Test_BFu0c_BFu1s_BFu0i, "BFu0c_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu0ll  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu1s_BFu0ll) C1{ Fc:0 Fs:1 FL:0}



static void Test_BFu0c_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu0ll");
    static BFu0c_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu0ll(Test_BFu0c_BFu1s_BFu0ll, "BFu0c_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu0s");
    static BFu0c_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu0s(Test_BFu0c_BFu1s_BFu0s, "BFu0c_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu15i");
    static BFu0c_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu15i(Test_BFu0c_BFu1s_BFu15i, "BFu0c_BFu1s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu15ll");
    static BFu0c_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu15ll(Test_BFu0c_BFu1s_BFu15ll, "BFu0c_BFu1s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu15s");
    static BFu0c_BFu1s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0c_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu1s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu15s(Test_BFu0c_BFu1s_BFu15s, "BFu0c_BFu1s_BFu15s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu16i");
    static BFu0c_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu16i(Test_BFu0c_BFu1s_BFu16i, "BFu0c_BFu1s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu16ll");
    static BFu0c_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu1s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu16ll(Test_BFu0c_BFu1s_BFu16ll, "BFu0c_BFu1s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu16s");
    static BFu0c_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu1s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu16s(Test_BFu0c_BFu1s_BFu16s, "BFu0c_BFu1s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu17i");
    static BFu0c_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu17i(Test_BFu0c_BFu1s_BFu17i, "BFu0c_BFu1s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu17ll");
    static BFu0c_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu1s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu17ll(Test_BFu0c_BFu1s_BFu17ll, "BFu0c_BFu1s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu1c");
    static BFu0c_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu1c(Test_BFu0c_BFu1s_BFu1c, "BFu0c_BFu1s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu1i");
    static BFu0c_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu1i(Test_BFu0c_BFu1s_BFu1i, "BFu0c_BFu1s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu1ll");
    static BFu0c_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu1ll(Test_BFu0c_BFu1s_BFu1ll, "BFu0c_BFu1s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu1s");
    static BFu0c_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0c_BFu1s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu1s(Test_BFu0c_BFu1s_BFu1s, "BFu0c_BFu1s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu31i");
    static BFu0c_BFu1s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu31i(Test_BFu0c_BFu1s_BFu31i, "BFu0c_BFu1s_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_BFu0c_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu31ll");
    static BFu0c_BFu1s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu1s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu31ll(Test_BFu0c_BFu1s_BFu31ll, "BFu0c_BFu1s_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu32i  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu1s_BFu32i) C1{ Fc:0 Fs:1 Fi:32}



static void Test_BFu0c_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu32i");
    static BFu0c_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu1s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu32i(Test_BFu0c_BFu1s_BFu32i, "BFu0c_BFu1s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu32ll  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu1s_BFu32ll) C1{ Fc:0 Fs:1 FL:32}



static void Test_BFu0c_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu32ll");
    static BFu0c_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu1s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu32ll(Test_BFu0c_BFu1s_BFu32ll, "BFu0c_BFu1s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu33  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu1s_BFu33) C1{ Fc:0 Fs:1 FL:33}



static void Test_BFu0c_BFu1s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu33");
    static BFu0c_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0c_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu1s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu33(Test_BFu0c_BFu1s_BFu33, "BFu0c_BFu1s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu1s_BFu7c) C1{ Fc:0 Fs:1 Fc:7}



static void Test_BFu0c_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu7c");
    static BFu0c_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu7c(Test_BFu0c_BFu1s_BFu7c, "BFu0c_BFu1s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu7i  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu1s_BFu7i) C1{ Fc:0 Fs:1 Fi:7}



static void Test_BFu0c_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu7i");
    static BFu0c_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu7i(Test_BFu0c_BFu1s_BFu7i, "BFu0c_BFu1s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu7ll  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu1s_BFu7ll) C1{ Fc:0 Fs:1 FL:7}



static void Test_BFu0c_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu7ll");
    static BFu0c_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu7ll(Test_BFu0c_BFu1s_BFu7ll, "BFu0c_BFu1s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu1s_BFu7s) C1{ Fc:0 Fs:1 Fs:7}



static void Test_BFu0c_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu7s");
    static BFu0c_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0c_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu1s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu7s(Test_BFu0c_BFu1s_BFu7s, "BFu0c_BFu1s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu1s_BFu8c) C1{ Fc:0 Fs:1 Fc:8}



static void Test_BFu0c_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu8c");
    static BFu0c_BFu1s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu1s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu8c(Test_BFu0c_BFu1s_BFu8c, "BFu0c_BFu1s_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu8i  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu1s_BFu8i) C1{ Fc:0 Fs:1 Fi:8}



static void Test_BFu0c_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu8i");
    static BFu0c_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu8i(Test_BFu0c_BFu1s_BFu8i, "BFu0c_BFu1s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu8ll  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu1s_BFu8ll) C1{ Fc:0 Fs:1 FL:8}



static void Test_BFu0c_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu8ll");
    static BFu0c_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu8ll(Test_BFu0c_BFu1s_BFu8ll, "BFu0c_BFu1s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu1s_BFu8s) C1{ Fc:0 Fs:1 Fs:8}



static void Test_BFu0c_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu8s");
    static BFu0c_BFu1s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0c_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu1s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu8s(Test_BFu0c_BFu1s_BFu8s, "BFu0c_BFu1s_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu9i  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu1s_BFu9i) C1{ Fc:0 Fs:1 Fi:9}



static void Test_BFu0c_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu9i");
    static BFu0c_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu9i(Test_BFu0c_BFu1s_BFu9i, "BFu0c_BFu1s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu9ll  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu1s_BFu9ll) C1{ Fc:0 Fs:1 FL:9}



static void Test_BFu0c_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu9ll");
    static BFu0c_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu9ll(Test_BFu0c_BFu1s_BFu9ll, "BFu0c_BFu1s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu1s_BFu9s) C1{ Fc:0 Fs:1 Fs:9}



static void Test_BFu0c_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu1s_BFu9s");
    static BFu0c_BFu1s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0c_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu1s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_BFu9s(Test_BFu0c_BFu1s_BFu9s, "BFu0c_BFu1s_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_C  {
  unsigned char  :0;
  unsigned short v1:1;
  char v2;
};
//SIG(1 BFu0c_BFu1s_C) C1{ Fc:0 Fs:1 Fc}



static void Test_BFu0c_BFu1s_C()
{
  {
    init_simple_test("BFu0c_BFu1s_C");
    static BFu0c_BFu1s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_C(Test_BFu0c_BFu1s_C, "BFu0c_BFu1s_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_D  {
  unsigned char  :0;
  unsigned short v1:1;
  double v2;
};
//SIG(1 BFu0c_BFu1s_D) C1{ Fc:0 Fs:1 FL}



static void Test_BFu0c_BFu1s_D()
{
  {
    init_simple_test("BFu0c_BFu1s_D");
    static BFu0c_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_D(Test_BFu0c_BFu1s_D, "BFu0c_BFu1s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_F  {
  unsigned char  :0;
  unsigned short v1:1;
  float v2;
};
//SIG(1 BFu0c_BFu1s_F) C1{ Fc:0 Fs:1 Fi}



static void Test_BFu0c_BFu1s_F()
{
  {
    init_simple_test("BFu0c_BFu1s_F");
    static BFu0c_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_F(Test_BFu0c_BFu1s_F, "BFu0c_BFu1s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_I  {
  unsigned char  :0;
  unsigned short v1:1;
  int v2;
};
//SIG(1 BFu0c_BFu1s_I) C1{ Fc:0 Fs:1 Fi}



static void Test_BFu0c_BFu1s_I()
{
  {
    init_simple_test("BFu0c_BFu1s_I");
    static BFu0c_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_I(Test_BFu0c_BFu1s_I, "BFu0c_BFu1s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Ip  {
  unsigned char  :0;
  unsigned short v1:1;
  int *v2;
};
//SIG(1 BFu0c_BFu1s_Ip) C1{ Fc:0 Fs:1 Fp}



static void Test_BFu0c_BFu1s_Ip()
{
  {
    init_simple_test("BFu0c_BFu1s_Ip");
    static BFu0c_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Ip(Test_BFu0c_BFu1s_Ip, "BFu0c_BFu1s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_L  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu1s_L) C1{ Fc:0 Fs:1 FL}



static void Test_BFu0c_BFu1s_L()
{
  {
    init_simple_test("BFu0c_BFu1s_L");
    static BFu0c_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_L(Test_BFu0c_BFu1s_L, "BFu0c_BFu1s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_S  {
  unsigned char  :0;
  unsigned short v1:1;
  short v2;
};
//SIG(1 BFu0c_BFu1s_S) C1{ Fc:0 Fs:1 Fs}



static void Test_BFu0c_BFu1s_S()
{
  {
    init_simple_test("BFu0c_BFu1s_S");
    static BFu0c_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_S(Test_BFu0c_BFu1s_S, "BFu0c_BFu1s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Uc  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu1s_Uc) C1{ Fc:0 Fs:1 Fc}



static void Test_BFu0c_BFu1s_Uc()
{
  {
    init_simple_test("BFu0c_BFu1s_Uc");
    static BFu0c_BFu1s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu1s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Uc(Test_BFu0c_BFu1s_Uc, "BFu0c_BFu1s_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Ui  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu1s_Ui) C1{ Fc:0 Fs:1 Fi}



static void Test_BFu0c_BFu1s_Ui()
{
  {
    init_simple_test("BFu0c_BFu1s_Ui");
    static BFu0c_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu1s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Ui(Test_BFu0c_BFu1s_Ui, "BFu0c_BFu1s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Ul  {
  unsigned char  :0;
  unsigned short v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu1s_Ul) C1{ Fc:0 Fs:1 FL}



static void Test_BFu0c_BFu1s_Ul()
{
  {
    init_simple_test("BFu0c_BFu1s_Ul");
    static BFu0c_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Ul(Test_BFu0c_BFu1s_Ul, "BFu0c_BFu1s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Us  {
  unsigned char  :0;
  unsigned short v1:1;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu1s_Us) C1{ Fc:0 Fs:1 Fs}



static void Test_BFu0c_BFu1s_Us()
{
  {
    init_simple_test("BFu0c_BFu1s_Us");
    static BFu0c_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu1s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Us(Test_BFu0c_BFu1s_Us, "BFu0c_BFu1s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu1s_Vp  {
  unsigned char  :0;
  unsigned short v1:1;
  void *v2;
};
//SIG(1 BFu0c_BFu1s_Vp) C1{ Fc:0 Fs:1 Fp}



static void Test_BFu0c_BFu1s_Vp()
{
  {
    init_simple_test("BFu0c_BFu1s_Vp");
    static BFu0c_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0c_BFu1s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu1s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu1s_Vp(Test_BFu0c_BFu1s_Vp, "BFu0c_BFu1s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i  {
  unsigned char  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0c_BFu31i) C1{ Fc:0 Fi:31}



static void Test_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu31i");
    static BFu0c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i(Test_BFu0c_BFu31i, "BFu0c_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu31i_BFu0c) C1{ Fc:0 Fi:31 Fc:0}



static void Test_BFu0c_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu0c");
    static BFu0c_BFu31i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu0c(Test_BFu0c_BFu31i_BFu0c, "BFu0c_BFu31i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu31i_BFu0i) C1{ Fc:0 Fi:31 Fi:0}



static void Test_BFu0c_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu0i");
    static BFu0c_BFu31i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu0i(Test_BFu0c_BFu31i_BFu0i, "BFu0c_BFu31i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu31i_BFu0ll) C1{ Fc:0 Fi:31 FL:0}



static void Test_BFu0c_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu0ll");
    static BFu0c_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu0ll(Test_BFu0c_BFu31i_BFu0ll, "BFu0c_BFu31i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu31i_BFu0s) C1{ Fc:0 Fi:31 Fs:0}



static void Test_BFu0c_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu0s");
    static BFu0c_BFu31i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu0s(Test_BFu0c_BFu31i_BFu0s, "BFu0c_BFu31i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu31i_BFu15i) C1{ Fc:0 Fi:31 Fi:15}



static void Test_BFu0c_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu15i");
    static BFu0c_BFu31i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu31i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu15i(Test_BFu0c_BFu31i_BFu15i, "BFu0c_BFu31i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu31i_BFu15ll) C1{ Fc:0 Fi:31 FL:15}



static void Test_BFu0c_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu15ll");
    static BFu0c_BFu31i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu0c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu31i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu15ll(Test_BFu0c_BFu31i_BFu15ll, "BFu0c_BFu31i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu15s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu31i_BFu15s) C1{ Fc:0 Fi:31 Fs:15}



static void Test_BFu0c_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu15s");
    static BFu0c_BFu31i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu31i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu15s(Test_BFu0c_BFu31i_BFu15s, "BFu0c_BFu31i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu31i_BFu16i) C1{ Fc:0 Fi:31 Fi:16}



static void Test_BFu0c_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu16i");
    static BFu0c_BFu31i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu31i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu16i(Test_BFu0c_BFu31i_BFu16i, "BFu0c_BFu31i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu31i_BFu16ll) C1{ Fc:0 Fi:31 FL:16}



static void Test_BFu0c_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu16ll");
    static BFu0c_BFu31i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu0c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu31i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu16ll(Test_BFu0c_BFu31i_BFu16ll, "BFu0c_BFu31i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu16s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu31i_BFu16s) C1{ Fc:0 Fi:31 Fs:16}



static void Test_BFu0c_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu16s");
    static BFu0c_BFu31i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu31i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu16s(Test_BFu0c_BFu31i_BFu16s, "BFu0c_BFu31i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu31i_BFu17i) C1{ Fc:0 Fi:31 Fi:17}



static void Test_BFu0c_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu17i");
    static BFu0c_BFu31i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu31i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu17i(Test_BFu0c_BFu31i_BFu17i, "BFu0c_BFu31i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu31i_BFu17ll) C1{ Fc:0 Fi:31 FL:17}



static void Test_BFu0c_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu17ll");
    static BFu0c_BFu31i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu0c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu31i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu17ll(Test_BFu0c_BFu31i_BFu17ll, "BFu0c_BFu31i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu31i_BFu1c) C1{ Fc:0 Fi:31 Fc:1}



static void Test_BFu0c_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu1c");
    static BFu0c_BFu31i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu1c(Test_BFu0c_BFu31i_BFu1c, "BFu0c_BFu31i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu31i_BFu1i) C1{ Fc:0 Fi:31 Fi:1}



static void Test_BFu0c_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu1i");
    static BFu0c_BFu31i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu1i(Test_BFu0c_BFu31i_BFu1i, "BFu0c_BFu31i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu31i_BFu1ll) C1{ Fc:0 Fi:31 FL:1}



static void Test_BFu0c_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu1ll");
    static BFu0c_BFu31i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu1ll(Test_BFu0c_BFu31i_BFu1ll, "BFu0c_BFu31i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu1s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu31i_BFu1s) C1{ Fc:0 Fi:31 Fs:1}



static void Test_BFu0c_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu1s");
    static BFu0c_BFu31i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu1s(Test_BFu0c_BFu31i_BFu1s, "BFu0c_BFu31i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu31i_BFu31i) C1{ Fc:0 Fi:31 Fi:31}



static void Test_BFu0c_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu31i");
    static BFu0c_BFu31i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu31i(Test_BFu0c_BFu31i_BFu31i, "BFu0c_BFu31i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu31i_BFu31ll) C1{ Fc:0 Fi:31 FL:31}



static void Test_BFu0c_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu31ll");
    static BFu0c_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu0c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu31ll(Test_BFu0c_BFu31i_BFu31ll, "BFu0c_BFu31i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu31i_BFu32i) C1{ Fc:0 Fi:31 Fi:32}



static void Test_BFu0c_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu32i");
    static BFu0c_BFu31i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu31i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu32i(Test_BFu0c_BFu31i_BFu32i, "BFu0c_BFu31i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu31i_BFu32ll) C1{ Fc:0 Fi:31 FL:32}



static void Test_BFu0c_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu32ll");
    static BFu0c_BFu31i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu0c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu31i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu32ll(Test_BFu0c_BFu31i_BFu32ll, "BFu0c_BFu31i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu33  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu31i_BFu33) C1{ Fc:0 Fi:31 FL:33}



static void Test_BFu0c_BFu31i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu33");
    static BFu0c_BFu31i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu0c_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu31i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu33(Test_BFu0c_BFu31i_BFu33, "BFu0c_BFu31i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu31i_BFu7c) C1{ Fc:0 Fi:31 Fc:7}



static void Test_BFu0c_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu7c");
    static BFu0c_BFu31i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu7c(Test_BFu0c_BFu31i_BFu7c, "BFu0c_BFu31i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu31i_BFu7i) C1{ Fc:0 Fi:31 Fi:7}



static void Test_BFu0c_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu7i");
    static BFu0c_BFu31i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu7i(Test_BFu0c_BFu31i_BFu7i, "BFu0c_BFu31i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu31i_BFu7ll) C1{ Fc:0 Fi:31 FL:7}



static void Test_BFu0c_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu7ll");
    static BFu0c_BFu31i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu0c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu31i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu7ll(Test_BFu0c_BFu31i_BFu7ll, "BFu0c_BFu31i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu7s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu31i_BFu7s) C1{ Fc:0 Fi:31 Fs:7}



static void Test_BFu0c_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu7s");
    static BFu0c_BFu31i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu7s(Test_BFu0c_BFu31i_BFu7s, "BFu0c_BFu31i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu31i_BFu8c) C1{ Fc:0 Fi:31 Fc:8}



static void Test_BFu0c_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu8c");
    static BFu0c_BFu31i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu8c(Test_BFu0c_BFu31i_BFu8c, "BFu0c_BFu31i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu31i_BFu8i) C1{ Fc:0 Fi:31 Fi:8}



static void Test_BFu0c_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu8i");
    static BFu0c_BFu31i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu8i(Test_BFu0c_BFu31i_BFu8i, "BFu0c_BFu31i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu31i_BFu8ll) C1{ Fc:0 Fi:31 FL:8}



static void Test_BFu0c_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu8ll");
    static BFu0c_BFu31i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu0c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu31i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu8ll(Test_BFu0c_BFu31i_BFu8ll, "BFu0c_BFu31i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu8s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu31i_BFu8s) C1{ Fc:0 Fi:31 Fs:8}



static void Test_BFu0c_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu8s");
    static BFu0c_BFu31i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu8s(Test_BFu0c_BFu31i_BFu8s, "BFu0c_BFu31i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu31i_BFu9i) C1{ Fc:0 Fi:31 Fi:9}



static void Test_BFu0c_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu9i");
    static BFu0c_BFu31i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu31i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu9i(Test_BFu0c_BFu31i_BFu9i, "BFu0c_BFu31i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu31i_BFu9ll) C1{ Fc:0 Fi:31 FL:9}



static void Test_BFu0c_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu9ll");
    static BFu0c_BFu31i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu0c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu31i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu9ll(Test_BFu0c_BFu31i_BFu9ll, "BFu0c_BFu31i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_BFu9s  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu31i_BFu9s) C1{ Fc:0 Fi:31 Fs:9}



static void Test_BFu0c_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu31i_BFu9s");
    static BFu0c_BFu31i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu31i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_BFu9s(Test_BFu0c_BFu31i_BFu9s, "BFu0c_BFu31i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_C  {
  unsigned char  :0;
  unsigned int v1:31;
  char v2;
};
//SIG(1 BFu0c_BFu31i_C) C1{ Fc:0 Fi:31 Fc}



static void Test_BFu0c_BFu31i_C()
{
  {
    init_simple_test("BFu0c_BFu31i_C");
    static BFu0c_BFu31i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_C");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_C(Test_BFu0c_BFu31i_C, "BFu0c_BFu31i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_D  {
  unsigned char  :0;
  unsigned int v1:31;
  double v2;
};
//SIG(1 BFu0c_BFu31i_D) C1{ Fc:0 Fi:31 FL}



static void Test_BFu0c_BFu31i_D()
{
  {
    init_simple_test("BFu0c_BFu31i_D");
    static BFu0c_BFu31i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_D(Test_BFu0c_BFu31i_D, "BFu0c_BFu31i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_F  {
  unsigned char  :0;
  unsigned int v1:31;
  float v2;
};
//SIG(1 BFu0c_BFu31i_F) C1{ Fc:0 Fi:31 Fi}



static void Test_BFu0c_BFu31i_F()
{
  {
    init_simple_test("BFu0c_BFu31i_F");
    static BFu0c_BFu31i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_F(Test_BFu0c_BFu31i_F, "BFu0c_BFu31i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_I  {
  unsigned char  :0;
  unsigned int v1:31;
  int v2;
};
//SIG(1 BFu0c_BFu31i_I) C1{ Fc:0 Fi:31 Fi}



static void Test_BFu0c_BFu31i_I()
{
  {
    init_simple_test("BFu0c_BFu31i_I");
    static BFu0c_BFu31i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_I(Test_BFu0c_BFu31i_I, "BFu0c_BFu31i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Ip  {
  unsigned char  :0;
  unsigned int v1:31;
  int *v2;
};
//SIG(1 BFu0c_BFu31i_Ip) C1{ Fc:0 Fi:31 Fp}



static void Test_BFu0c_BFu31i_Ip()
{
  {
    init_simple_test("BFu0c_BFu31i_Ip");
    static BFu0c_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Ip(Test_BFu0c_BFu31i_Ip, "BFu0c_BFu31i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_L  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu31i_L) C1{ Fc:0 Fi:31 FL}



static void Test_BFu0c_BFu31i_L()
{
  {
    init_simple_test("BFu0c_BFu31i_L");
    static BFu0c_BFu31i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_L(Test_BFu0c_BFu31i_L, "BFu0c_BFu31i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_S  {
  unsigned char  :0;
  unsigned int v1:31;
  short v2;
};
//SIG(1 BFu0c_BFu31i_S) C1{ Fc:0 Fi:31 Fs}



static void Test_BFu0c_BFu31i_S()
{
  {
    init_simple_test("BFu0c_BFu31i_S");
    static BFu0c_BFu31i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_S(Test_BFu0c_BFu31i_S, "BFu0c_BFu31i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Uc  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu31i_Uc) C1{ Fc:0 Fi:31 Fc}



static void Test_BFu0c_BFu31i_Uc()
{
  {
    init_simple_test("BFu0c_BFu31i_Uc");
    static BFu0c_BFu31i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Uc");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Uc(Test_BFu0c_BFu31i_Uc, "BFu0c_BFu31i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Ui  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu31i_Ui) C1{ Fc:0 Fi:31 Fi}



static void Test_BFu0c_BFu31i_Ui()
{
  {
    init_simple_test("BFu0c_BFu31i_Ui");
    static BFu0c_BFu31i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Ui(Test_BFu0c_BFu31i_Ui, "BFu0c_BFu31i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Ul  {
  unsigned char  :0;
  unsigned int v1:31;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu31i_Ul) C1{ Fc:0 Fi:31 FL}



static void Test_BFu0c_BFu31i_Ul()
{
  {
    init_simple_test("BFu0c_BFu31i_Ul");
    static BFu0c_BFu31i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Ul(Test_BFu0c_BFu31i_Ul, "BFu0c_BFu31i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Us  {
  unsigned char  :0;
  unsigned int v1:31;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu31i_Us) C1{ Fc:0 Fi:31 Fs}



static void Test_BFu0c_BFu31i_Us()
{
  {
    init_simple_test("BFu0c_BFu31i_Us");
    static BFu0c_BFu31i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Us(Test_BFu0c_BFu31i_Us, "BFu0c_BFu31i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31i_Vp  {
  unsigned char  :0;
  unsigned int v1:31;
  void *v2;
};
//SIG(1 BFu0c_BFu31i_Vp) C1{ Fc:0 Fi:31 Fp}



static void Test_BFu0c_BFu31i_Vp()
{
  {
    init_simple_test("BFu0c_BFu31i_Vp");
    static BFu0c_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31i_Vp(Test_BFu0c_BFu31i_Vp, "BFu0c_BFu31i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0c_BFu31ll) C1{ Fc:0 FL:31}



static void Test_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu31ll");
    static BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll(Test_BFu0c_BFu31ll, "BFu0c_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu31ll_BFu0c) C1{ Fc:0 FL:31 Fc:0}



static void Test_BFu0c_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu0c");
    static BFu0c_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu0c(Test_BFu0c_BFu31ll_BFu0c, "BFu0c_BFu31ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu31ll_BFu0i) C1{ Fc:0 FL:31 Fi:0}



static void Test_BFu0c_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu0i");
    static BFu0c_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu0i(Test_BFu0c_BFu31ll_BFu0i, "BFu0c_BFu31ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu31ll_BFu0ll) C1{ Fc:0 FL:31 FL:0}



static void Test_BFu0c_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu0ll");
    static BFu0c_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu0ll(Test_BFu0c_BFu31ll_BFu0ll, "BFu0c_BFu31ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu31ll_BFu0s) C1{ Fc:0 FL:31 Fs:0}



static void Test_BFu0c_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu0s");
    static BFu0c_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu0s(Test_BFu0c_BFu31ll_BFu0s, "BFu0c_BFu31ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu31ll_BFu15i) C1{ Fc:0 FL:31 Fi:15}



static void Test_BFu0c_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu15i");
    static BFu0c_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu31ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu15i(Test_BFu0c_BFu31ll_BFu15i, "BFu0c_BFu31ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu31ll_BFu15ll) C1{ Fc:0 FL:31 FL:15}



static void Test_BFu0c_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu15ll");
    static BFu0c_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu0c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu31ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu15ll(Test_BFu0c_BFu31ll_BFu15ll, "BFu0c_BFu31ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu31ll_BFu15s) C1{ Fc:0 FL:31 Fs:15}



static void Test_BFu0c_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu15s");
    static BFu0c_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu31ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu15s(Test_BFu0c_BFu31ll_BFu15s, "BFu0c_BFu31ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu31ll_BFu16i) C1{ Fc:0 FL:31 Fi:16}



static void Test_BFu0c_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu16i");
    static BFu0c_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu31ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu16i(Test_BFu0c_BFu31ll_BFu16i, "BFu0c_BFu31ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu31ll_BFu16ll) C1{ Fc:0 FL:31 FL:16}



static void Test_BFu0c_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu16ll");
    static BFu0c_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu0c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu31ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu16ll(Test_BFu0c_BFu31ll_BFu16ll, "BFu0c_BFu31ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu31ll_BFu16s) C1{ Fc:0 FL:31 Fs:16}



static void Test_BFu0c_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu16s");
    static BFu0c_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu31ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu16s(Test_BFu0c_BFu31ll_BFu16s, "BFu0c_BFu31ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu31ll_BFu17i) C1{ Fc:0 FL:31 Fi:17}



static void Test_BFu0c_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu17i");
    static BFu0c_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu31ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu17i(Test_BFu0c_BFu31ll_BFu17i, "BFu0c_BFu31ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu31ll_BFu17ll) C1{ Fc:0 FL:31 FL:17}



static void Test_BFu0c_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu17ll");
    static BFu0c_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu0c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu31ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu17ll(Test_BFu0c_BFu31ll_BFu17ll, "BFu0c_BFu31ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu31ll_BFu1c) C1{ Fc:0 FL:31 Fc:1}



static void Test_BFu0c_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu1c");
    static BFu0c_BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu1c(Test_BFu0c_BFu31ll_BFu1c, "BFu0c_BFu31ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu31ll_BFu1i) C1{ Fc:0 FL:31 Fi:1}



static void Test_BFu0c_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu1i");
    static BFu0c_BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu1i(Test_BFu0c_BFu31ll_BFu1i, "BFu0c_BFu31ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu31ll_BFu1ll) C1{ Fc:0 FL:31 FL:1}



static void Test_BFu0c_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu1ll");
    static BFu0c_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu1ll(Test_BFu0c_BFu31ll_BFu1ll, "BFu0c_BFu31ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu31ll_BFu1s) C1{ Fc:0 FL:31 Fs:1}



static void Test_BFu0c_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu1s");
    static BFu0c_BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0c_BFu31ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu1s(Test_BFu0c_BFu31ll_BFu1s, "BFu0c_BFu31ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu31ll_BFu31i) C1{ Fc:0 FL:31 Fi:31}



static void Test_BFu0c_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu31i");
    static BFu0c_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu31i(Test_BFu0c_BFu31ll_BFu31i, "BFu0c_BFu31ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu31ll_BFu31ll) C1{ Fc:0 FL:31 FL:31}



static void Test_BFu0c_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu31ll");
    static BFu0c_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu0c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu31ll(Test_BFu0c_BFu31ll_BFu31ll, "BFu0c_BFu31ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu31ll_BFu32i) C1{ Fc:0 FL:31 Fi:32}



static void Test_BFu0c_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu32i");
    static BFu0c_BFu31ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu31ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu32i(Test_BFu0c_BFu31ll_BFu32i, "BFu0c_BFu31ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu31ll_BFu32ll) C1{ Fc:0 FL:31 FL:32}



static void Test_BFu0c_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu32ll");
    static BFu0c_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu0c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu31ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu32ll(Test_BFu0c_BFu31ll_BFu32ll, "BFu0c_BFu31ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu31ll_BFu33) C1{ Fc:0 FL:31 FL:33}



static void Test_BFu0c_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu33");
    static BFu0c_BFu31ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu0c_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu31ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu33(Test_BFu0c_BFu31ll_BFu33, "BFu0c_BFu31ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu31ll_BFu7c) C1{ Fc:0 FL:31 Fc:7}



static void Test_BFu0c_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu7c");
    static BFu0c_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu7c(Test_BFu0c_BFu31ll_BFu7c, "BFu0c_BFu31ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu31ll_BFu7i) C1{ Fc:0 FL:31 Fi:7}



static void Test_BFu0c_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu7i");
    static BFu0c_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu7i(Test_BFu0c_BFu31ll_BFu7i, "BFu0c_BFu31ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu31ll_BFu7ll) C1{ Fc:0 FL:31 FL:7}



static void Test_BFu0c_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu7ll");
    static BFu0c_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu0c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu31ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu7ll(Test_BFu0c_BFu31ll_BFu7ll, "BFu0c_BFu31ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu31ll_BFu7s) C1{ Fc:0 FL:31 Fs:7}



static void Test_BFu0c_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu7s");
    static BFu0c_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu31ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu7s(Test_BFu0c_BFu31ll_BFu7s, "BFu0c_BFu31ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu31ll_BFu8c) C1{ Fc:0 FL:31 Fc:8}



static void Test_BFu0c_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu8c");
    static BFu0c_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu8c(Test_BFu0c_BFu31ll_BFu8c, "BFu0c_BFu31ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu31ll_BFu8i) C1{ Fc:0 FL:31 Fi:8}



static void Test_BFu0c_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu8i");
    static BFu0c_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu8i(Test_BFu0c_BFu31ll_BFu8i, "BFu0c_BFu31ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu31ll_BFu8ll) C1{ Fc:0 FL:31 FL:8}



static void Test_BFu0c_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu8ll");
    static BFu0c_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu0c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu31ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu8ll(Test_BFu0c_BFu31ll_BFu8ll, "BFu0c_BFu31ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu31ll_BFu8s) C1{ Fc:0 FL:31 Fs:8}



static void Test_BFu0c_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu8s");
    static BFu0c_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu31ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu8s(Test_BFu0c_BFu31ll_BFu8s, "BFu0c_BFu31ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu31ll_BFu9i) C1{ Fc:0 FL:31 Fi:9}



static void Test_BFu0c_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu9i");
    static BFu0c_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu31ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu9i(Test_BFu0c_BFu31ll_BFu9i, "BFu0c_BFu31ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu31ll_BFu9ll) C1{ Fc:0 FL:31 FL:9}



static void Test_BFu0c_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu9ll");
    static BFu0c_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu0c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu31ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu9ll(Test_BFu0c_BFu31ll_BFu9ll, "BFu0c_BFu31ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu31ll_BFu9s) C1{ Fc:0 FL:31 Fs:9}



static void Test_BFu0c_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu31ll_BFu9s");
    static BFu0c_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu31ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_BFu9s(Test_BFu0c_BFu31ll_BFu9s, "BFu0c_BFu31ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_C  {
  unsigned char  :0;
  __tsu64 v1:31;
  char v2;
};
//SIG(1 BFu0c_BFu31ll_C) C1{ Fc:0 FL:31 Fc}



static void Test_BFu0c_BFu31ll_C()
{
  {
    init_simple_test("BFu0c_BFu31ll_C");
    static BFu0c_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_C");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_C(Test_BFu0c_BFu31ll_C, "BFu0c_BFu31ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_D  {
  unsigned char  :0;
  __tsu64 v1:31;
  double v2;
};
//SIG(1 BFu0c_BFu31ll_D) C1{ Fc:0 FL:31 FL}



static void Test_BFu0c_BFu31ll_D()
{
  {
    init_simple_test("BFu0c_BFu31ll_D");
    static BFu0c_BFu31ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_D(Test_BFu0c_BFu31ll_D, "BFu0c_BFu31ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_F  {
  unsigned char  :0;
  __tsu64 v1:31;
  float v2;
};
//SIG(1 BFu0c_BFu31ll_F) C1{ Fc:0 FL:31 Fi}



static void Test_BFu0c_BFu31ll_F()
{
  {
    init_simple_test("BFu0c_BFu31ll_F");
    static BFu0c_BFu31ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_F(Test_BFu0c_BFu31ll_F, "BFu0c_BFu31ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_I  {
  unsigned char  :0;
  __tsu64 v1:31;
  int v2;
};
//SIG(1 BFu0c_BFu31ll_I) C1{ Fc:0 FL:31 Fi}



static void Test_BFu0c_BFu31ll_I()
{
  {
    init_simple_test("BFu0c_BFu31ll_I");
    static BFu0c_BFu31ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_I(Test_BFu0c_BFu31ll_I, "BFu0c_BFu31ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Ip  {
  unsigned char  :0;
  __tsu64 v1:31;
  int *v2;
};
//SIG(1 BFu0c_BFu31ll_Ip) C1{ Fc:0 FL:31 Fp}



static void Test_BFu0c_BFu31ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu31ll_Ip");
    static BFu0c_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Ip(Test_BFu0c_BFu31ll_Ip, "BFu0c_BFu31ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_L  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu31ll_L) C1{ Fc:0 FL:31 FL}



static void Test_BFu0c_BFu31ll_L()
{
  {
    init_simple_test("BFu0c_BFu31ll_L");
    static BFu0c_BFu31ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_L(Test_BFu0c_BFu31ll_L, "BFu0c_BFu31ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_S  {
  unsigned char  :0;
  __tsu64 v1:31;
  short v2;
};
//SIG(1 BFu0c_BFu31ll_S) C1{ Fc:0 FL:31 Fs}



static void Test_BFu0c_BFu31ll_S()
{
  {
    init_simple_test("BFu0c_BFu31ll_S");
    static BFu0c_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_S(Test_BFu0c_BFu31ll_S, "BFu0c_BFu31ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu31ll_Uc) C1{ Fc:0 FL:31 Fc}



static void Test_BFu0c_BFu31ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu31ll_Uc");
    static BFu0c_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Uc");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Uc(Test_BFu0c_BFu31ll_Uc, "BFu0c_BFu31ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu31ll_Ui) C1{ Fc:0 FL:31 Fi}



static void Test_BFu0c_BFu31ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu31ll_Ui");
    static BFu0c_BFu31ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Ui(Test_BFu0c_BFu31ll_Ui, "BFu0c_BFu31ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:31;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu31ll_Ul) C1{ Fc:0 FL:31 FL}



static void Test_BFu0c_BFu31ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu31ll_Ul");
    static BFu0c_BFu31ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Ul(Test_BFu0c_BFu31ll_Ul, "BFu0c_BFu31ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Us  {
  unsigned char  :0;
  __tsu64 v1:31;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu31ll_Us) C1{ Fc:0 FL:31 Fs}



static void Test_BFu0c_BFu31ll_Us()
{
  {
    init_simple_test("BFu0c_BFu31ll_Us");
    static BFu0c_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu31ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Us(Test_BFu0c_BFu31ll_Us, "BFu0c_BFu31ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu31ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:31;
  void *v2;
};
//SIG(1 BFu0c_BFu31ll_Vp) C1{ Fc:0 FL:31 Fp}



static void Test_BFu0c_BFu31ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu31ll_Vp");
    static BFu0c_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0c_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu31ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu31ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu31ll_Vp(Test_BFu0c_BFu31ll_Vp, "BFu0c_BFu31ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i  {
  unsigned char  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0c_BFu32i) C1{ Fc:0 Fi:32}



static void Test_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu32i");
    static BFu0c_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i(Test_BFu0c_BFu32i, "BFu0c_BFu32i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu32i_BFu0c) C1{ Fc:0 Fi:32 Fc:0}



static void Test_BFu0c_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu0c");
    static BFu0c_BFu32i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu0c(Test_BFu0c_BFu32i_BFu0c, "BFu0c_BFu32i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu32i_BFu0i) C1{ Fc:0 Fi:32 Fi:0}



static void Test_BFu0c_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu0i");
    static BFu0c_BFu32i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu0i(Test_BFu0c_BFu32i_BFu0i, "BFu0c_BFu32i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu32i_BFu0ll) C1{ Fc:0 Fi:32 FL:0}



static void Test_BFu0c_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu0ll");
    static BFu0c_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu0ll(Test_BFu0c_BFu32i_BFu0ll, "BFu0c_BFu32i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu32i_BFu0s) C1{ Fc:0 Fi:32 Fs:0}



static void Test_BFu0c_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu0s");
    static BFu0c_BFu32i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu0s(Test_BFu0c_BFu32i_BFu0s, "BFu0c_BFu32i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu32i_BFu15i) C1{ Fc:0 Fi:32 Fi:15}



static void Test_BFu0c_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu15i");
    static BFu0c_BFu32i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu15i(Test_BFu0c_BFu32i_BFu15i, "BFu0c_BFu32i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu32i_BFu15ll) C1{ Fc:0 Fi:32 FL:15}



static void Test_BFu0c_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu15ll");
    static BFu0c_BFu32i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu15ll(Test_BFu0c_BFu32i_BFu15ll, "BFu0c_BFu32i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu15s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu32i_BFu15s) C1{ Fc:0 Fi:32 Fs:15}



static void Test_BFu0c_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu15s");
    static BFu0c_BFu32i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu15s(Test_BFu0c_BFu32i_BFu15s, "BFu0c_BFu32i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu32i_BFu16i) C1{ Fc:0 Fi:32 Fi:16}



static void Test_BFu0c_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu16i");
    static BFu0c_BFu32i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu16i(Test_BFu0c_BFu32i_BFu16i, "BFu0c_BFu32i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu32i_BFu16ll) C1{ Fc:0 Fi:32 FL:16}



static void Test_BFu0c_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu16ll");
    static BFu0c_BFu32i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu16ll(Test_BFu0c_BFu32i_BFu16ll, "BFu0c_BFu32i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu16s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu32i_BFu16s) C1{ Fc:0 Fi:32 Fs:16}



static void Test_BFu0c_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu16s");
    static BFu0c_BFu32i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu16s(Test_BFu0c_BFu32i_BFu16s, "BFu0c_BFu32i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu32i_BFu17i) C1{ Fc:0 Fi:32 Fi:17}



static void Test_BFu0c_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu17i");
    static BFu0c_BFu32i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu32i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu17i(Test_BFu0c_BFu32i_BFu17i, "BFu0c_BFu32i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu32i_BFu17ll) C1{ Fc:0 Fi:32 FL:17}



static void Test_BFu0c_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu17ll");
    static BFu0c_BFu32i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu32i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu17ll(Test_BFu0c_BFu32i_BFu17ll, "BFu0c_BFu32i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu32i_BFu1c) C1{ Fc:0 Fi:32 Fc:1}



static void Test_BFu0c_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu1c");
    static BFu0c_BFu32i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu1c(Test_BFu0c_BFu32i_BFu1c, "BFu0c_BFu32i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu32i_BFu1i) C1{ Fc:0 Fi:32 Fi:1}



static void Test_BFu0c_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu1i");
    static BFu0c_BFu32i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu1i(Test_BFu0c_BFu32i_BFu1i, "BFu0c_BFu32i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu32i_BFu1ll) C1{ Fc:0 Fi:32 FL:1}



static void Test_BFu0c_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu1ll");
    static BFu0c_BFu32i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu1ll(Test_BFu0c_BFu32i_BFu1ll, "BFu0c_BFu32i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu1s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu32i_BFu1s) C1{ Fc:0 Fi:32 Fs:1}



static void Test_BFu0c_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu1s");
    static BFu0c_BFu32i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu1s(Test_BFu0c_BFu32i_BFu1s, "BFu0c_BFu32i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu32i_BFu31i) C1{ Fc:0 Fi:32 Fi:31}



static void Test_BFu0c_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu31i");
    static BFu0c_BFu32i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu32i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu31i(Test_BFu0c_BFu32i_BFu31i, "BFu0c_BFu32i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu32i_BFu31ll) C1{ Fc:0 Fi:32 FL:31}



static void Test_BFu0c_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu31ll");
    static BFu0c_BFu32i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu32i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu31ll(Test_BFu0c_BFu32i_BFu31ll, "BFu0c_BFu32i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu32i_BFu32i) C1{ Fc:0 Fi:32 Fi:32}



static void Test_BFu0c_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu32i");
    static BFu0c_BFu32i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu32i(Test_BFu0c_BFu32i_BFu32i, "BFu0c_BFu32i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu32i_BFu32ll) C1{ Fc:0 Fi:32 FL:32}



static void Test_BFu0c_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu32ll");
    static BFu0c_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu32ll(Test_BFu0c_BFu32i_BFu32ll, "BFu0c_BFu32i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu33  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu32i_BFu33) C1{ Fc:0 Fi:32 FL:33}



static void Test_BFu0c_BFu32i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu33");
    static BFu0c_BFu32i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_BFu32i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_BFu32i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu33(Test_BFu0c_BFu32i_BFu33, "BFu0c_BFu32i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu32i_BFu7c) C1{ Fc:0 Fi:32 Fc:7}



static void Test_BFu0c_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu7c");
    static BFu0c_BFu32i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu7c(Test_BFu0c_BFu32i_BFu7c, "BFu0c_BFu32i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu32i_BFu7i) C1{ Fc:0 Fi:32 Fi:7}



static void Test_BFu0c_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu7i");
    static BFu0c_BFu32i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu7i(Test_BFu0c_BFu32i_BFu7i, "BFu0c_BFu32i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu32i_BFu7ll) C1{ Fc:0 Fi:32 FL:7}



static void Test_BFu0c_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu7ll");
    static BFu0c_BFu32i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu7ll(Test_BFu0c_BFu32i_BFu7ll, "BFu0c_BFu32i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu7s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu32i_BFu7s) C1{ Fc:0 Fi:32 Fs:7}



static void Test_BFu0c_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu7s");
    static BFu0c_BFu32i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu7s(Test_BFu0c_BFu32i_BFu7s, "BFu0c_BFu32i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu32i_BFu8c) C1{ Fc:0 Fi:32 Fc:8}



static void Test_BFu0c_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu8c");
    static BFu0c_BFu32i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu8c(Test_BFu0c_BFu32i_BFu8c, "BFu0c_BFu32i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu32i_BFu8i) C1{ Fc:0 Fi:32 Fi:8}



static void Test_BFu0c_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu8i");
    static BFu0c_BFu32i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu8i(Test_BFu0c_BFu32i_BFu8i, "BFu0c_BFu32i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu32i_BFu8ll) C1{ Fc:0 Fi:32 FL:8}



static void Test_BFu0c_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu8ll");
    static BFu0c_BFu32i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu8ll(Test_BFu0c_BFu32i_BFu8ll, "BFu0c_BFu32i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu8s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu32i_BFu8s) C1{ Fc:0 Fi:32 Fs:8}



static void Test_BFu0c_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu8s");
    static BFu0c_BFu32i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu8s(Test_BFu0c_BFu32i_BFu8s, "BFu0c_BFu32i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu32i_BFu9i) C1{ Fc:0 Fi:32 Fi:9}



static void Test_BFu0c_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu9i");
    static BFu0c_BFu32i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu9i(Test_BFu0c_BFu32i_BFu9i, "BFu0c_BFu32i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu32i_BFu9ll) C1{ Fc:0 Fi:32 FL:9}



static void Test_BFu0c_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu9ll");
    static BFu0c_BFu32i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu9ll(Test_BFu0c_BFu32i_BFu9ll, "BFu0c_BFu32i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_BFu9s  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu32i_BFu9s) C1{ Fc:0 Fi:32 Fs:9}



static void Test_BFu0c_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu32i_BFu9s");
    static BFu0c_BFu32i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_BFu9s(Test_BFu0c_BFu32i_BFu9s, "BFu0c_BFu32i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_C  {
  unsigned char  :0;
  unsigned int v1:32;
  char v2;
};
//SIG(1 BFu0c_BFu32i_C) C1{ Fc:0 Fi:32 Fc}



static void Test_BFu0c_BFu32i_C()
{
  {
    init_simple_test("BFu0c_BFu32i_C");
    static BFu0c_BFu32i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_C");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_C(Test_BFu0c_BFu32i_C, "BFu0c_BFu32i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_D  {
  unsigned char  :0;
  unsigned int v1:32;
  double v2;
};
//SIG(1 BFu0c_BFu32i_D) C1{ Fc:0 Fi:32 FL}



static void Test_BFu0c_BFu32i_D()
{
  {
    init_simple_test("BFu0c_BFu32i_D");
    static BFu0c_BFu32i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_D(Test_BFu0c_BFu32i_D, "BFu0c_BFu32i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_F  {
  unsigned char  :0;
  unsigned int v1:32;
  float v2;
};
//SIG(1 BFu0c_BFu32i_F) C1{ Fc:0 Fi:32 Fi}



static void Test_BFu0c_BFu32i_F()
{
  {
    init_simple_test("BFu0c_BFu32i_F");
    static BFu0c_BFu32i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_F(Test_BFu0c_BFu32i_F, "BFu0c_BFu32i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_I  {
  unsigned char  :0;
  unsigned int v1:32;
  int v2;
};
//SIG(1 BFu0c_BFu32i_I) C1{ Fc:0 Fi:32 Fi}



static void Test_BFu0c_BFu32i_I()
{
  {
    init_simple_test("BFu0c_BFu32i_I");
    static BFu0c_BFu32i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_I(Test_BFu0c_BFu32i_I, "BFu0c_BFu32i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Ip  {
  unsigned char  :0;
  unsigned int v1:32;
  int *v2;
};
//SIG(1 BFu0c_BFu32i_Ip) C1{ Fc:0 Fi:32 Fp}



static void Test_BFu0c_BFu32i_Ip()
{
  {
    init_simple_test("BFu0c_BFu32i_Ip");
    static BFu0c_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Ip(Test_BFu0c_BFu32i_Ip, "BFu0c_BFu32i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_L  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu32i_L) C1{ Fc:0 Fi:32 FL}



static void Test_BFu0c_BFu32i_L()
{
  {
    init_simple_test("BFu0c_BFu32i_L");
    static BFu0c_BFu32i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_L(Test_BFu0c_BFu32i_L, "BFu0c_BFu32i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_S  {
  unsigned char  :0;
  unsigned int v1:32;
  short v2;
};
//SIG(1 BFu0c_BFu32i_S) C1{ Fc:0 Fi:32 Fs}



static void Test_BFu0c_BFu32i_S()
{
  {
    init_simple_test("BFu0c_BFu32i_S");
    static BFu0c_BFu32i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_S(Test_BFu0c_BFu32i_S, "BFu0c_BFu32i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Uc  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu32i_Uc) C1{ Fc:0 Fi:32 Fc}



static void Test_BFu0c_BFu32i_Uc()
{
  {
    init_simple_test("BFu0c_BFu32i_Uc");
    static BFu0c_BFu32i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Uc");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Uc(Test_BFu0c_BFu32i_Uc, "BFu0c_BFu32i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Ui  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu32i_Ui) C1{ Fc:0 Fi:32 Fi}



static void Test_BFu0c_BFu32i_Ui()
{
  {
    init_simple_test("BFu0c_BFu32i_Ui");
    static BFu0c_BFu32i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Ui(Test_BFu0c_BFu32i_Ui, "BFu0c_BFu32i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Ul  {
  unsigned char  :0;
  unsigned int v1:32;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu32i_Ul) C1{ Fc:0 Fi:32 FL}



static void Test_BFu0c_BFu32i_Ul()
{
  {
    init_simple_test("BFu0c_BFu32i_Ul");
    static BFu0c_BFu32i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Ul(Test_BFu0c_BFu32i_Ul, "BFu0c_BFu32i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Us  {
  unsigned char  :0;
  unsigned int v1:32;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu32i_Us) C1{ Fc:0 Fi:32 Fs}



static void Test_BFu0c_BFu32i_Us()
{
  {
    init_simple_test("BFu0c_BFu32i_Us");
    static BFu0c_BFu32i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Us(Test_BFu0c_BFu32i_Us, "BFu0c_BFu32i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32i_Vp  {
  unsigned char  :0;
  unsigned int v1:32;
  void *v2;
};
//SIG(1 BFu0c_BFu32i_Vp) C1{ Fc:0 Fi:32 Fp}



static void Test_BFu0c_BFu32i_Vp()
{
  {
    init_simple_test("BFu0c_BFu32i_Vp");
    static BFu0c_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32i_Vp(Test_BFu0c_BFu32i_Vp, "BFu0c_BFu32i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0c_BFu32ll) C1{ Fc:0 FL:32}



static void Test_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu32ll");
    static BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll(Test_BFu0c_BFu32ll, "BFu0c_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu32ll_BFu0c) C1{ Fc:0 FL:32 Fc:0}



static void Test_BFu0c_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu0c");
    static BFu0c_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu0c(Test_BFu0c_BFu32ll_BFu0c, "BFu0c_BFu32ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu32ll_BFu0i) C1{ Fc:0 FL:32 Fi:0}



static void Test_BFu0c_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu0i");
    static BFu0c_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu0i(Test_BFu0c_BFu32ll_BFu0i, "BFu0c_BFu32ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu32ll_BFu0ll) C1{ Fc:0 FL:32 FL:0}



static void Test_BFu0c_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu0ll");
    static BFu0c_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu0ll(Test_BFu0c_BFu32ll_BFu0ll, "BFu0c_BFu32ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu32ll_BFu0s) C1{ Fc:0 FL:32 Fs:0}



static void Test_BFu0c_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu0s");
    static BFu0c_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu0s(Test_BFu0c_BFu32ll_BFu0s, "BFu0c_BFu32ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu32ll_BFu15i) C1{ Fc:0 FL:32 Fi:15}



static void Test_BFu0c_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu15i");
    static BFu0c_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu15i(Test_BFu0c_BFu32ll_BFu15i, "BFu0c_BFu32ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu32ll_BFu15ll) C1{ Fc:0 FL:32 FL:15}



static void Test_BFu0c_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu15ll");
    static BFu0c_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu15ll(Test_BFu0c_BFu32ll_BFu15ll, "BFu0c_BFu32ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu32ll_BFu15s) C1{ Fc:0 FL:32 Fs:15}



static void Test_BFu0c_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu15s");
    static BFu0c_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu32ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu15s(Test_BFu0c_BFu32ll_BFu15s, "BFu0c_BFu32ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu32ll_BFu16i) C1{ Fc:0 FL:32 Fi:16}



static void Test_BFu0c_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu16i");
    static BFu0c_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu16i(Test_BFu0c_BFu32ll_BFu16i, "BFu0c_BFu32ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu32ll_BFu16ll) C1{ Fc:0 FL:32 FL:16}



static void Test_BFu0c_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu16ll");
    static BFu0c_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu16ll(Test_BFu0c_BFu32ll_BFu16ll, "BFu0c_BFu32ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu32ll_BFu16s) C1{ Fc:0 FL:32 Fs:16}



static void Test_BFu0c_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu16s");
    static BFu0c_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu32ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu16s(Test_BFu0c_BFu32ll_BFu16s, "BFu0c_BFu32ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu32ll_BFu17i) C1{ Fc:0 FL:32 Fi:17}



static void Test_BFu0c_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu17i");
    static BFu0c_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu32ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu17i(Test_BFu0c_BFu32ll_BFu17i, "BFu0c_BFu32ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu32ll_BFu17ll) C1{ Fc:0 FL:32 FL:17}



static void Test_BFu0c_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu17ll");
    static BFu0c_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu32ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu17ll(Test_BFu0c_BFu32ll_BFu17ll, "BFu0c_BFu32ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu32ll_BFu1c) C1{ Fc:0 FL:32 Fc:1}



static void Test_BFu0c_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu1c");
    static BFu0c_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu1c(Test_BFu0c_BFu32ll_BFu1c, "BFu0c_BFu32ll_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu32ll_BFu1i) C1{ Fc:0 FL:32 Fi:1}



static void Test_BFu0c_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu1i");
    static BFu0c_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu1i(Test_BFu0c_BFu32ll_BFu1i, "BFu0c_BFu32ll_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu32ll_BFu1ll) C1{ Fc:0 FL:32 FL:1}



static void Test_BFu0c_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu1ll");
    static BFu0c_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu1ll(Test_BFu0c_BFu32ll_BFu1ll, "BFu0c_BFu32ll_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu32ll_BFu1s) C1{ Fc:0 FL:32 Fs:1}



static void Test_BFu0c_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu1s");
    static BFu0c_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_BFu32ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu1s(Test_BFu0c_BFu32ll_BFu1s, "BFu0c_BFu32ll_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu32ll_BFu31i) C1{ Fc:0 FL:32 Fi:31}



static void Test_BFu0c_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu31i");
    static BFu0c_BFu32ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu32ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu31i(Test_BFu0c_BFu32ll_BFu31i, "BFu0c_BFu32ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu32ll_BFu31ll) C1{ Fc:0 FL:32 FL:31}



static void Test_BFu0c_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu31ll");
    static BFu0c_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu32ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu31ll(Test_BFu0c_BFu32ll_BFu31ll, "BFu0c_BFu32ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu32ll_BFu32i) C1{ Fc:0 FL:32 Fi:32}



static void Test_BFu0c_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu32i");
    static BFu0c_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu32i(Test_BFu0c_BFu32ll_BFu32i, "BFu0c_BFu32ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu32ll_BFu32ll) C1{ Fc:0 FL:32 FL:32}



static void Test_BFu0c_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu32ll");
    static BFu0c_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu32ll(Test_BFu0c_BFu32ll_BFu32ll, "BFu0c_BFu32ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu32ll_BFu33) C1{ Fc:0 FL:32 FL:33}



static void Test_BFu0c_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu33");
    static BFu0c_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_BFu32ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu33(Test_BFu0c_BFu32ll_BFu33, "BFu0c_BFu32ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu32ll_BFu7c) C1{ Fc:0 FL:32 Fc:7}



static void Test_BFu0c_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu7c");
    static BFu0c_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu7c(Test_BFu0c_BFu32ll_BFu7c, "BFu0c_BFu32ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu32ll_BFu7i) C1{ Fc:0 FL:32 Fi:7}



static void Test_BFu0c_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu7i");
    static BFu0c_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu7i(Test_BFu0c_BFu32ll_BFu7i, "BFu0c_BFu32ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu32ll_BFu7ll) C1{ Fc:0 FL:32 FL:7}



static void Test_BFu0c_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu7ll");
    static BFu0c_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu7ll(Test_BFu0c_BFu32ll_BFu7ll, "BFu0c_BFu32ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu32ll_BFu7s) C1{ Fc:0 FL:32 Fs:7}



static void Test_BFu0c_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu7s");
    static BFu0c_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu32ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu7s(Test_BFu0c_BFu32ll_BFu7s, "BFu0c_BFu32ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu32ll_BFu8c) C1{ Fc:0 FL:32 Fc:8}



static void Test_BFu0c_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu8c");
    static BFu0c_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu8c(Test_BFu0c_BFu32ll_BFu8c, "BFu0c_BFu32ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu32ll_BFu8i) C1{ Fc:0 FL:32 Fi:8}



static void Test_BFu0c_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu8i");
    static BFu0c_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu8i(Test_BFu0c_BFu32ll_BFu8i, "BFu0c_BFu32ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu32ll_BFu8ll) C1{ Fc:0 FL:32 FL:8}



static void Test_BFu0c_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu8ll");
    static BFu0c_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu8ll(Test_BFu0c_BFu32ll_BFu8ll, "BFu0c_BFu32ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu32ll_BFu8s) C1{ Fc:0 FL:32 Fs:8}



static void Test_BFu0c_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu8s");
    static BFu0c_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu32ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu8s(Test_BFu0c_BFu32ll_BFu8s, "BFu0c_BFu32ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu32ll_BFu9i) C1{ Fc:0 FL:32 Fi:9}



static void Test_BFu0c_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu9i");
    static BFu0c_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu9i(Test_BFu0c_BFu32ll_BFu9i, "BFu0c_BFu32ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu32ll_BFu9ll) C1{ Fc:0 FL:32 FL:9}



static void Test_BFu0c_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu9ll");
    static BFu0c_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu9ll(Test_BFu0c_BFu32ll_BFu9ll, "BFu0c_BFu32ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu32ll_BFu9s) C1{ Fc:0 FL:32 Fs:9}



static void Test_BFu0c_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu32ll_BFu9s");
    static BFu0c_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu32ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_BFu9s(Test_BFu0c_BFu32ll_BFu9s, "BFu0c_BFu32ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_C  {
  unsigned char  :0;
  __tsu64 v1:32;
  char v2;
};
//SIG(1 BFu0c_BFu32ll_C) C1{ Fc:0 FL:32 Fc}



static void Test_BFu0c_BFu32ll_C()
{
  {
    init_simple_test("BFu0c_BFu32ll_C");
    static BFu0c_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_C");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_C(Test_BFu0c_BFu32ll_C, "BFu0c_BFu32ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_D  {
  unsigned char  :0;
  __tsu64 v1:32;
  double v2;
};
//SIG(1 BFu0c_BFu32ll_D) C1{ Fc:0 FL:32 FL}



static void Test_BFu0c_BFu32ll_D()
{
  {
    init_simple_test("BFu0c_BFu32ll_D");
    static BFu0c_BFu32ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_D(Test_BFu0c_BFu32ll_D, "BFu0c_BFu32ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_F  {
  unsigned char  :0;
  __tsu64 v1:32;
  float v2;
};
//SIG(1 BFu0c_BFu32ll_F) C1{ Fc:0 FL:32 Fi}



static void Test_BFu0c_BFu32ll_F()
{
  {
    init_simple_test("BFu0c_BFu32ll_F");
    static BFu0c_BFu32ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_F(Test_BFu0c_BFu32ll_F, "BFu0c_BFu32ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_I  {
  unsigned char  :0;
  __tsu64 v1:32;
  int v2;
};
//SIG(1 BFu0c_BFu32ll_I) C1{ Fc:0 FL:32 Fi}



static void Test_BFu0c_BFu32ll_I()
{
  {
    init_simple_test("BFu0c_BFu32ll_I");
    static BFu0c_BFu32ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_I(Test_BFu0c_BFu32ll_I, "BFu0c_BFu32ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Ip  {
  unsigned char  :0;
  __tsu64 v1:32;
  int *v2;
};
//SIG(1 BFu0c_BFu32ll_Ip) C1{ Fc:0 FL:32 Fp}



static void Test_BFu0c_BFu32ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu32ll_Ip");
    static BFu0c_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Ip(Test_BFu0c_BFu32ll_Ip, "BFu0c_BFu32ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_L  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu32ll_L) C1{ Fc:0 FL:32 FL}



static void Test_BFu0c_BFu32ll_L()
{
  {
    init_simple_test("BFu0c_BFu32ll_L");
    static BFu0c_BFu32ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_L(Test_BFu0c_BFu32ll_L, "BFu0c_BFu32ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_S  {
  unsigned char  :0;
  __tsu64 v1:32;
  short v2;
};
//SIG(1 BFu0c_BFu32ll_S) C1{ Fc:0 FL:32 Fs}



static void Test_BFu0c_BFu32ll_S()
{
  {
    init_simple_test("BFu0c_BFu32ll_S");
    static BFu0c_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_S");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_S(Test_BFu0c_BFu32ll_S, "BFu0c_BFu32ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu32ll_Uc) C1{ Fc:0 FL:32 Fc}



static void Test_BFu0c_BFu32ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu32ll_Uc");
    static BFu0c_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Uc");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Uc(Test_BFu0c_BFu32ll_Uc, "BFu0c_BFu32ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu32ll_Ui) C1{ Fc:0 FL:32 Fi}



static void Test_BFu0c_BFu32ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu32ll_Ui");
    static BFu0c_BFu32ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Ui(Test_BFu0c_BFu32ll_Ui, "BFu0c_BFu32ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:32;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu32ll_Ul) C1{ Fc:0 FL:32 FL}



static void Test_BFu0c_BFu32ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu32ll_Ul");
    static BFu0c_BFu32ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Ul(Test_BFu0c_BFu32ll_Ul, "BFu0c_BFu32ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Us  {
  unsigned char  :0;
  __tsu64 v1:32;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu32ll_Us) C1{ Fc:0 FL:32 Fs}



static void Test_BFu0c_BFu32ll_Us()
{
  {
    init_simple_test("BFu0c_BFu32ll_Us");
    static BFu0c_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Us");
    check_field_offset(lv, v2, 4, "BFu0c_BFu32ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Us(Test_BFu0c_BFu32ll_Us, "BFu0c_BFu32ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu32ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:32;
  void *v2;
};
//SIG(1 BFu0c_BFu32ll_Vp) C1{ Fc:0 FL:32 Fp}



static void Test_BFu0c_BFu32ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu32ll_Vp");
    static BFu0c_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0c_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu32ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu32ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu32ll_Vp(Test_BFu0c_BFu32ll_Vp, "BFu0c_BFu32ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33  {
  unsigned char  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0c_BFu33) C1{ Fc:0 FL:33}



static void Test_BFu0c_BFu33()
{
  {
    init_simple_test("BFu0c_BFu33");
    static BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33(Test_BFu0c_BFu33, "BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu33_BFu0c) C1{ Fc:0 FL:33 Fc:0}



static void Test_BFu0c_BFu33_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu33_BFu0c");
    static BFu0c_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu0c(Test_BFu0c_BFu33_BFu0c, "BFu0c_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu33_BFu0i) C1{ Fc:0 FL:33 Fi:0}



static void Test_BFu0c_BFu33_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu0i");
    static BFu0c_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu0i(Test_BFu0c_BFu33_BFu0i, "BFu0c_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu33_BFu0ll) C1{ Fc:0 FL:33 FL:0}



static void Test_BFu0c_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu0ll");
    static BFu0c_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu0ll(Test_BFu0c_BFu33_BFu0ll, "BFu0c_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu33_BFu0s) C1{ Fc:0 FL:33 Fs:0}



static void Test_BFu0c_BFu33_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu0s");
    static BFu0c_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu0s(Test_BFu0c_BFu33_BFu0s, "BFu0c_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu33_BFu15i) C1{ Fc:0 FL:33 Fi:15}



static void Test_BFu0c_BFu33_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu15i");
    static BFu0c_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0c_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu33_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu15i(Test_BFu0c_BFu33_BFu15i, "BFu0c_BFu33_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu33_BFu15ll) C1{ Fc:0 FL:33 FL:15}



static void Test_BFu0c_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu15ll");
    static BFu0c_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0c_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu33_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu15ll(Test_BFu0c_BFu33_BFu15ll, "BFu0c_BFu33_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu33_BFu15s) C1{ Fc:0 FL:33 Fs:15}



static void Test_BFu0c_BFu33_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu15s");
    static BFu0c_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0c_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu33_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu15s(Test_BFu0c_BFu33_BFu15s, "BFu0c_BFu33_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu33_BFu16i) C1{ Fc:0 FL:33 Fi:16}



static void Test_BFu0c_BFu33_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu16i");
    static BFu0c_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu0c_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu33_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu16i(Test_BFu0c_BFu33_BFu16i, "BFu0c_BFu33_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu33_BFu16ll) C1{ Fc:0 FL:33 FL:16}



static void Test_BFu0c_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu16ll");
    static BFu0c_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu0c_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu33_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu16ll(Test_BFu0c_BFu33_BFu16ll, "BFu0c_BFu33_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu33_BFu16s) C1{ Fc:0 FL:33 Fs:16}



static void Test_BFu0c_BFu33_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu16s");
    static BFu0c_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu0c_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu33_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu16s(Test_BFu0c_BFu33_BFu16s, "BFu0c_BFu33_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu33_BFu17i) C1{ Fc:0 FL:33 Fi:17}



static void Test_BFu0c_BFu33_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu17i");
    static BFu0c_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu0c_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu33_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu17i(Test_BFu0c_BFu33_BFu17i, "BFu0c_BFu33_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu33_BFu17ll) C1{ Fc:0 FL:33 FL:17}



static void Test_BFu0c_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu17ll");
    static BFu0c_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu0c_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu33_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu17ll(Test_BFu0c_BFu33_BFu17ll, "BFu0c_BFu33_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu33_BFu1c) C1{ Fc:0 FL:33 Fc:1}



static void Test_BFu0c_BFu33_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu33_BFu1c");
    static BFu0c_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0c_BFu33_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu1c(Test_BFu0c_BFu33_BFu1c, "BFu0c_BFu33_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu33_BFu1i) C1{ Fc:0 FL:33 Fi:1}



static void Test_BFu0c_BFu33_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu1i");
    static BFu0c_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0c_BFu33_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu1i(Test_BFu0c_BFu33_BFu1i, "BFu0c_BFu33_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu33_BFu1ll) C1{ Fc:0 FL:33 FL:1}



static void Test_BFu0c_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu1ll");
    static BFu0c_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0c_BFu33_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu1ll(Test_BFu0c_BFu33_BFu1ll, "BFu0c_BFu33_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu33_BFu1s) C1{ Fc:0 FL:33 Fs:1}



static void Test_BFu0c_BFu33_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu1s");
    static BFu0c_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0c_BFu33_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu1s(Test_BFu0c_BFu33_BFu1s, "BFu0c_BFu33_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu33_BFu31i) C1{ Fc:0 FL:33 Fi:31}



static void Test_BFu0c_BFu33_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu31i");
    static BFu0c_BFu33_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu0c_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu33_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu31i(Test_BFu0c_BFu33_BFu31i, "BFu0c_BFu33_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu33_BFu31ll) C1{ Fc:0 FL:33 FL:31}



static void Test_BFu0c_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu31ll");
    static BFu0c_BFu33_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu0c_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu33_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu31ll(Test_BFu0c_BFu33_BFu31ll, "BFu0c_BFu33_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu33_BFu32i) C1{ Fc:0 FL:33 Fi:32}



static void Test_BFu0c_BFu33_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu32i");
    static BFu0c_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu33_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu32i(Test_BFu0c_BFu33_BFu32i, "BFu0c_BFu33_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu33_BFu32ll) C1{ Fc:0 FL:33 FL:32}



static void Test_BFu0c_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu32ll");
    static BFu0c_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu0c_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu0c_BFu33_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu32ll(Test_BFu0c_BFu33_BFu32ll, "BFu0c_BFu33_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu33  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu33_BFu33) C1{ Fc:0 FL:33 FL:33}



static void Test_BFu0c_BFu33_BFu33()
{
  {
    init_simple_test("BFu0c_BFu33_BFu33");
    static BFu0c_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu0c_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu33(Test_BFu0c_BFu33_BFu33, "BFu0c_BFu33_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu33_BFu7c) C1{ Fc:0 FL:33 Fc:7}



static void Test_BFu0c_BFu33_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu33_BFu7c");
    static BFu0c_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0c_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu33_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu7c(Test_BFu0c_BFu33_BFu7c, "BFu0c_BFu33_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu33_BFu7i) C1{ Fc:0 FL:33 Fi:7}



static void Test_BFu0c_BFu33_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu7i");
    static BFu0c_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0c_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu33_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu7i(Test_BFu0c_BFu33_BFu7i, "BFu0c_BFu33_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu33_BFu7ll) C1{ Fc:0 FL:33 FL:7}



static void Test_BFu0c_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu7ll");
    static BFu0c_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0c_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu33_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu7ll(Test_BFu0c_BFu33_BFu7ll, "BFu0c_BFu33_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu33_BFu7s) C1{ Fc:0 FL:33 Fs:7}



static void Test_BFu0c_BFu33_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu7s");
    static BFu0c_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0c_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu33_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu7s(Test_BFu0c_BFu33_BFu7s, "BFu0c_BFu33_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu33_BFu8c) C1{ Fc:0 FL:33 Fc:8}



static void Test_BFu0c_BFu33_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu33_BFu8c");
    static BFu0c_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu0c_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu33_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu8c(Test_BFu0c_BFu33_BFu8c, "BFu0c_BFu33_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu33_BFu8i) C1{ Fc:0 FL:33 Fi:8}



static void Test_BFu0c_BFu33_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu8i");
    static BFu0c_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0c_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu33_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu8i(Test_BFu0c_BFu33_BFu8i, "BFu0c_BFu33_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu33_BFu8ll) C1{ Fc:0 FL:33 FL:8}



static void Test_BFu0c_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu8ll");
    static BFu0c_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0c_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu33_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu8ll(Test_BFu0c_BFu33_BFu8ll, "BFu0c_BFu33_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu33_BFu8s) C1{ Fc:0 FL:33 Fs:8}



static void Test_BFu0c_BFu33_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu8s");
    static BFu0c_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0c_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu33_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu8s(Test_BFu0c_BFu33_BFu8s, "BFu0c_BFu33_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu33_BFu9i) C1{ Fc:0 FL:33 Fi:9}



static void Test_BFu0c_BFu33_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu33_BFu9i");
    static BFu0c_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0c_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu33_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu9i(Test_BFu0c_BFu33_BFu9i, "BFu0c_BFu33_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu33_BFu9ll) C1{ Fc:0 FL:33 FL:9}



static void Test_BFu0c_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu33_BFu9ll");
    static BFu0c_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0c_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu33_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu9ll(Test_BFu0c_BFu33_BFu9ll, "BFu0c_BFu33_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu33_BFu9s) C1{ Fc:0 FL:33 Fs:9}



static void Test_BFu0c_BFu33_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu33_BFu9s");
    static BFu0c_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0c_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu33_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_BFu9s(Test_BFu0c_BFu33_BFu9s, "BFu0c_BFu33_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_C  {
  unsigned char  :0;
  __tsu64 v1:33;
  char v2;
};
//SIG(1 BFu0c_BFu33_C) C1{ Fc:0 FL:33 Fc}



static void Test_BFu0c_BFu33_C()
{
  {
    init_simple_test("BFu0c_BFu33_C");
    static BFu0c_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_C");
    check_field_offset(lv, v2, 5, "BFu0c_BFu33_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_C(Test_BFu0c_BFu33_C, "BFu0c_BFu33_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_D  {
  unsigned char  :0;
  __tsu64 v1:33;
  double v2;
};
//SIG(1 BFu0c_BFu33_D) C1{ Fc:0 FL:33 FL}



static void Test_BFu0c_BFu33_D()
{
  {
    init_simple_test("BFu0c_BFu33_D");
    static BFu0c_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_D");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_D(Test_BFu0c_BFu33_D, "BFu0c_BFu33_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_F  {
  unsigned char  :0;
  __tsu64 v1:33;
  float v2;
};
//SIG(1 BFu0c_BFu33_F) C1{ Fc:0 FL:33 Fi}



static void Test_BFu0c_BFu33_F()
{
  {
    init_simple_test("BFu0c_BFu33_F");
    static BFu0c_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_F");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_F(Test_BFu0c_BFu33_F, "BFu0c_BFu33_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_I  {
  unsigned char  :0;
  __tsu64 v1:33;
  int v2;
};
//SIG(1 BFu0c_BFu33_I) C1{ Fc:0 FL:33 Fi}



static void Test_BFu0c_BFu33_I()
{
  {
    init_simple_test("BFu0c_BFu33_I");
    static BFu0c_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_I");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_I(Test_BFu0c_BFu33_I, "BFu0c_BFu33_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Ip  {
  unsigned char  :0;
  __tsu64 v1:33;
  int *v2;
};
//SIG(1 BFu0c_BFu33_Ip) C1{ Fc:0 FL:33 Fp}



static void Test_BFu0c_BFu33_Ip()
{
  {
    init_simple_test("BFu0c_BFu33_Ip");
    static BFu0c_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Ip");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Ip(Test_BFu0c_BFu33_Ip, "BFu0c_BFu33_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_L  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu33_L) C1{ Fc:0 FL:33 FL}



static void Test_BFu0c_BFu33_L()
{
  {
    init_simple_test("BFu0c_BFu33_L");
    static BFu0c_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_L");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_L(Test_BFu0c_BFu33_L, "BFu0c_BFu33_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_S  {
  unsigned char  :0;
  __tsu64 v1:33;
  short v2;
};
//SIG(1 BFu0c_BFu33_S) C1{ Fc:0 FL:33 Fs}



static void Test_BFu0c_BFu33_S()
{
  {
    init_simple_test("BFu0c_BFu33_S");
    static BFu0c_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_S");
    check_field_offset(lv, v2, 6, "BFu0c_BFu33_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_S(Test_BFu0c_BFu33_S, "BFu0c_BFu33_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Uc  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu33_Uc) C1{ Fc:0 FL:33 Fc}



static void Test_BFu0c_BFu33_Uc()
{
  {
    init_simple_test("BFu0c_BFu33_Uc");
    static BFu0c_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Uc");
    check_field_offset(lv, v2, 5, "BFu0c_BFu33_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Uc(Test_BFu0c_BFu33_Uc, "BFu0c_BFu33_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Ui  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu33_Ui) C1{ Fc:0 FL:33 Fi}



static void Test_BFu0c_BFu33_Ui()
{
  {
    init_simple_test("BFu0c_BFu33_Ui");
    static BFu0c_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Ui");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Ui(Test_BFu0c_BFu33_Ui, "BFu0c_BFu33_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Ul  {
  unsigned char  :0;
  __tsu64 v1:33;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu33_Ul) C1{ Fc:0 FL:33 FL}



static void Test_BFu0c_BFu33_Ul()
{
  {
    init_simple_test("BFu0c_BFu33_Ul");
    static BFu0c_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Ul");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Ul(Test_BFu0c_BFu33_Ul, "BFu0c_BFu33_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Us  {
  unsigned char  :0;
  __tsu64 v1:33;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu33_Us) C1{ Fc:0 FL:33 Fs}



static void Test_BFu0c_BFu33_Us()
{
  {
    init_simple_test("BFu0c_BFu33_Us");
    static BFu0c_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Us");
    check_field_offset(lv, v2, 6, "BFu0c_BFu33_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Us(Test_BFu0c_BFu33_Us, "BFu0c_BFu33_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu33_Vp  {
  unsigned char  :0;
  __tsu64 v1:33;
  void *v2;
};
//SIG(1 BFu0c_BFu33_Vp) C1{ Fc:0 FL:33 Fp}



static void Test_BFu0c_BFu33_Vp()
{
  {
    init_simple_test("BFu0c_BFu33_Vp");
    static BFu0c_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0c_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu33_Vp");
    check_field_offset(lv, v2, 8, "BFu0c_BFu33_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu33_Vp(Test_BFu0c_BFu33_Vp, "BFu0c_BFu33_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c  {
  unsigned char  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0c_BFu7c) C1{ Fc:0 Fc:7}



static void Test_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu7c");
    static BFu0c_BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c(Test_BFu0c_BFu7c, "BFu0c_BFu7c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu0c  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu7c_BFu0c) C1{ Fc:0 Fc:7 Fc:0}



static void Test_BFu0c_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu0c");
    static BFu0c_BFu7c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu0c(Test_BFu0c_BFu7c_BFu0c, "BFu0c_BFu7c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu0i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu7c_BFu0i) C1{ Fc:0 Fc:7 Fi:0}



static void Test_BFu0c_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu0i");
    static BFu0c_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu0i(Test_BFu0c_BFu7c_BFu0i, "BFu0c_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu0ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu7c_BFu0ll) C1{ Fc:0 Fc:7 FL:0}



static void Test_BFu0c_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu0ll");
    static BFu0c_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu0ll(Test_BFu0c_BFu7c_BFu0ll, "BFu0c_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu0s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu7c_BFu0s) C1{ Fc:0 Fc:7 Fs:0}



static void Test_BFu0c_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu0s");
    static BFu0c_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu0s(Test_BFu0c_BFu7c_BFu0s, "BFu0c_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu15i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu7c_BFu15i) C1{ Fc:0 Fc:7 Fi:15}



static void Test_BFu0c_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu15i");
    static BFu0c_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu15i(Test_BFu0c_BFu7c_BFu15i, "BFu0c_BFu7c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu15ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu7c_BFu15ll) C1{ Fc:0 Fc:7 FL:15}



static void Test_BFu0c_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu15ll");
    static BFu0c_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu15ll(Test_BFu0c_BFu7c_BFu15ll, "BFu0c_BFu7c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu15s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu7c_BFu15s) C1{ Fc:0 Fc:7 Fs:15}



static void Test_BFu0c_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu15s");
    static BFu0c_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu7c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu15s(Test_BFu0c_BFu7c_BFu15s, "BFu0c_BFu7c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu16i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu7c_BFu16i) C1{ Fc:0 Fc:7 Fi:16}



static void Test_BFu0c_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu16i");
    static BFu0c_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu16i(Test_BFu0c_BFu7c_BFu16i, "BFu0c_BFu7c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu16ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu7c_BFu16ll) C1{ Fc:0 Fc:7 FL:16}



static void Test_BFu0c_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu16ll");
    static BFu0c_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu16ll(Test_BFu0c_BFu7c_BFu16ll, "BFu0c_BFu7c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu16s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu7c_BFu16s) C1{ Fc:0 Fc:7 Fs:16}



static void Test_BFu0c_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu16s");
    static BFu0c_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu7c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu16s(Test_BFu0c_BFu7c_BFu16s, "BFu0c_BFu7c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu17i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu7c_BFu17i) C1{ Fc:0 Fc:7 Fi:17}



static void Test_BFu0c_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu17i");
    static BFu0c_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu17i(Test_BFu0c_BFu7c_BFu17i, "BFu0c_BFu7c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu17ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu7c_BFu17ll) C1{ Fc:0 Fc:7 FL:17}



static void Test_BFu0c_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu17ll");
    static BFu0c_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu17ll(Test_BFu0c_BFu7c_BFu17ll, "BFu0c_BFu7c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu1c  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu7c_BFu1c) C1{ Fc:0 Fc:7 Fc:1}



static void Test_BFu0c_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu1c");
    static BFu0c_BFu7c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu7c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu1c(Test_BFu0c_BFu7c_BFu1c, "BFu0c_BFu7c_BFu1c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu1i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu7c_BFu1i) C1{ Fc:0 Fc:7 Fi:1}



static void Test_BFu0c_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu1i");
    static BFu0c_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu1i(Test_BFu0c_BFu7c_BFu1i, "BFu0c_BFu7c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu1ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu7c_BFu1ll) C1{ Fc:0 Fc:7 FL:1}



static void Test_BFu0c_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu1ll");
    static BFu0c_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu1ll(Test_BFu0c_BFu7c_BFu1ll, "BFu0c_BFu7c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu1s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu7c_BFu1s) C1{ Fc:0 Fc:7 Fs:1}



static void Test_BFu0c_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu1s");
    static BFu0c_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu1s(Test_BFu0c_BFu7c_BFu1s, "BFu0c_BFu7c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu31i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu7c_BFu31i) C1{ Fc:0 Fc:7 Fi:31}



static void Test_BFu0c_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu31i");
    static BFu0c_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu7c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu31i(Test_BFu0c_BFu7c_BFu31i, "BFu0c_BFu7c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu31ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu7c_BFu31ll) C1{ Fc:0 Fc:7 FL:31}



static void Test_BFu0c_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu31ll");
    static BFu0c_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu7c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu31ll(Test_BFu0c_BFu7c_BFu31ll, "BFu0c_BFu7c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu32i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu7c_BFu32i) C1{ Fc:0 Fc:7 Fi:32}



static void Test_BFu0c_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu32i");
    static BFu0c_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu7c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu32i(Test_BFu0c_BFu7c_BFu32i, "BFu0c_BFu7c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu32ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu7c_BFu32ll) C1{ Fc:0 Fc:7 FL:32}



static void Test_BFu0c_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu32ll");
    static BFu0c_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu7c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu32ll(Test_BFu0c_BFu7c_BFu32ll, "BFu0c_BFu7c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu33  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu7c_BFu33) C1{ Fc:0 Fc:7 FL:33}



static void Test_BFu0c_BFu7c_BFu33()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu33");
    static BFu0c_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0c_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu7c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu33(Test_BFu0c_BFu7c_BFu33, "BFu0c_BFu7c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu7c  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu7c_BFu7c) C1{ Fc:0 Fc:7 Fc:7}



static void Test_BFu0c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu7c");
    static BFu0c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu7c(Test_BFu0c_BFu7c_BFu7c, "BFu0c_BFu7c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu7i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu7c_BFu7i) C1{ Fc:0 Fc:7 Fi:7}



static void Test_BFu0c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu7i");
    static BFu0c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu7i(Test_BFu0c_BFu7c_BFu7i, "BFu0c_BFu7c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu7ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu7c_BFu7ll) C1{ Fc:0 Fc:7 FL:7}



static void Test_BFu0c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu7ll");
    static BFu0c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu7ll(Test_BFu0c_BFu7c_BFu7ll, "BFu0c_BFu7c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu7s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu7c_BFu7s) C1{ Fc:0 Fc:7 Fs:7}



static void Test_BFu0c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu7s");
    static BFu0c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu7s(Test_BFu0c_BFu7c_BFu7s, "BFu0c_BFu7c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu8c  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu7c_BFu8c) C1{ Fc:0 Fc:7 Fc:8}



static void Test_BFu0c_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu8c");
    static BFu0c_BFu7c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu7c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu8c(Test_BFu0c_BFu7c_BFu8c, "BFu0c_BFu7c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu8i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu7c_BFu8i) C1{ Fc:0 Fc:7 Fi:8}



static void Test_BFu0c_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu8i");
    static BFu0c_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu8i(Test_BFu0c_BFu7c_BFu8i, "BFu0c_BFu7c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu8ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu7c_BFu8ll) C1{ Fc:0 Fc:7 FL:8}



static void Test_BFu0c_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu8ll");
    static BFu0c_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu8ll(Test_BFu0c_BFu7c_BFu8ll, "BFu0c_BFu7c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu8s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu7c_BFu8s) C1{ Fc:0 Fc:7 Fs:8}



static void Test_BFu0c_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu8s");
    static BFu0c_BFu7c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu8s(Test_BFu0c_BFu7c_BFu8s, "BFu0c_BFu7c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu9i  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu7c_BFu9i) C1{ Fc:0 Fc:7 Fi:9}



static void Test_BFu0c_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu9i");
    static BFu0c_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu9i(Test_BFu0c_BFu7c_BFu9i, "BFu0c_BFu7c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu9ll  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu7c_BFu9ll) C1{ Fc:0 Fc:7 FL:9}



static void Test_BFu0c_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu9ll");
    static BFu0c_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu9ll(Test_BFu0c_BFu7c_BFu9ll, "BFu0c_BFu7c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_BFu9s  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu7c_BFu9s) C1{ Fc:0 Fc:7 Fs:9}



static void Test_BFu0c_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu7c_BFu9s");
    static BFu0c_BFu7c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_BFu9s(Test_BFu0c_BFu7c_BFu9s, "BFu0c_BFu7c_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_C  {
  unsigned char  :0;
  unsigned char v1:7;
  char v2;
};
//SIG(1 BFu0c_BFu7c_C) C1{ Fc:0 Fc:7 Fc}



static void Test_BFu0c_BFu7c_C()
{
  {
    init_simple_test("BFu0c_BFu7c_C");
    static BFu0c_BFu7c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_C(Test_BFu0c_BFu7c_C, "BFu0c_BFu7c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_D  {
  unsigned char  :0;
  unsigned char v1:7;
  double v2;
};
//SIG(1 BFu0c_BFu7c_D) C1{ Fc:0 Fc:7 FL}



static void Test_BFu0c_BFu7c_D()
{
  {
    init_simple_test("BFu0c_BFu7c_D");
    static BFu0c_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_D(Test_BFu0c_BFu7c_D, "BFu0c_BFu7c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_F  {
  unsigned char  :0;
  unsigned char v1:7;
  float v2;
};
//SIG(1 BFu0c_BFu7c_F) C1{ Fc:0 Fc:7 Fi}



static void Test_BFu0c_BFu7c_F()
{
  {
    init_simple_test("BFu0c_BFu7c_F");
    static BFu0c_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_F(Test_BFu0c_BFu7c_F, "BFu0c_BFu7c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_I  {
  unsigned char  :0;
  unsigned char v1:7;
  int v2;
};
//SIG(1 BFu0c_BFu7c_I) C1{ Fc:0 Fc:7 Fi}



static void Test_BFu0c_BFu7c_I()
{
  {
    init_simple_test("BFu0c_BFu7c_I");
    static BFu0c_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_I(Test_BFu0c_BFu7c_I, "BFu0c_BFu7c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Ip  {
  unsigned char  :0;
  unsigned char v1:7;
  int *v2;
};
//SIG(1 BFu0c_BFu7c_Ip) C1{ Fc:0 Fc:7 Fp}



static void Test_BFu0c_BFu7c_Ip()
{
  {
    init_simple_test("BFu0c_BFu7c_Ip");
    static BFu0c_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Ip(Test_BFu0c_BFu7c_Ip, "BFu0c_BFu7c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_L  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu7c_L) C1{ Fc:0 Fc:7 FL}



static void Test_BFu0c_BFu7c_L()
{
  {
    init_simple_test("BFu0c_BFu7c_L");
    static BFu0c_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_L(Test_BFu0c_BFu7c_L, "BFu0c_BFu7c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_S  {
  unsigned char  :0;
  unsigned char v1:7;
  short v2;
};
//SIG(1 BFu0c_BFu7c_S) C1{ Fc:0 Fc:7 Fs}



static void Test_BFu0c_BFu7c_S()
{
  {
    init_simple_test("BFu0c_BFu7c_S");
    static BFu0c_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_S(Test_BFu0c_BFu7c_S, "BFu0c_BFu7c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Uc  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu7c_Uc) C1{ Fc:0 Fc:7 Fc}



static void Test_BFu0c_BFu7c_Uc()
{
  {
    init_simple_test("BFu0c_BFu7c_Uc");
    static BFu0c_BFu7c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Uc(Test_BFu0c_BFu7c_Uc, "BFu0c_BFu7c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Ui  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu7c_Ui) C1{ Fc:0 Fc:7 Fi}



static void Test_BFu0c_BFu7c_Ui()
{
  {
    init_simple_test("BFu0c_BFu7c_Ui");
    static BFu0c_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Ui(Test_BFu0c_BFu7c_Ui, "BFu0c_BFu7c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Ul  {
  unsigned char  :0;
  unsigned char v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu7c_Ul) C1{ Fc:0 Fc:7 FL}



static void Test_BFu0c_BFu7c_Ul()
{
  {
    init_simple_test("BFu0c_BFu7c_Ul");
    static BFu0c_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Ul(Test_BFu0c_BFu7c_Ul, "BFu0c_BFu7c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Us  {
  unsigned char  :0;
  unsigned char v1:7;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu7c_Us) C1{ Fc:0 Fc:7 Fs}



static void Test_BFu0c_BFu7c_Us()
{
  {
    init_simple_test("BFu0c_BFu7c_Us");
    static BFu0c_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Us(Test_BFu0c_BFu7c_Us, "BFu0c_BFu7c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7c_Vp  {
  unsigned char  :0;
  unsigned char v1:7;
  void *v2;
};
//SIG(1 BFu0c_BFu7c_Vp) C1{ Fc:0 Fc:7 Fp}



static void Test_BFu0c_BFu7c_Vp()
{
  {
    init_simple_test("BFu0c_BFu7c_Vp");
    static BFu0c_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7c_Vp(Test_BFu0c_BFu7c_Vp, "BFu0c_BFu7c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i  {
  unsigned char  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0c_BFu7i) C1{ Fc:0 Fi:7}



static void Test_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu7i");
    static BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i(Test_BFu0c_BFu7i, "BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu7i_BFu0c) C1{ Fc:0 Fi:7 Fc:0}



static void Test_BFu0c_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu0c");
    static BFu0c_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu0c(Test_BFu0c_BFu7i_BFu0c, "BFu0c_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu7i_BFu0i) C1{ Fc:0 Fi:7 Fi:0}



static void Test_BFu0c_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu0i");
    static BFu0c_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu0i(Test_BFu0c_BFu7i_BFu0i, "BFu0c_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu7i_BFu0ll) C1{ Fc:0 Fi:7 FL:0}



static void Test_BFu0c_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu0ll");
    static BFu0c_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu0ll(Test_BFu0c_BFu7i_BFu0ll, "BFu0c_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu7i_BFu0s) C1{ Fc:0 Fi:7 Fs:0}



static void Test_BFu0c_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu0s");
    static BFu0c_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu0s(Test_BFu0c_BFu7i_BFu0s, "BFu0c_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu7i_BFu15i) C1{ Fc:0 Fi:7 Fi:15}



static void Test_BFu0c_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu15i");
    static BFu0c_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu15i(Test_BFu0c_BFu7i_BFu15i, "BFu0c_BFu7i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu7i_BFu15ll) C1{ Fc:0 Fi:7 FL:15}



static void Test_BFu0c_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu15ll");
    static BFu0c_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu15ll(Test_BFu0c_BFu7i_BFu15ll, "BFu0c_BFu7i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu15s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu7i_BFu15s) C1{ Fc:0 Fi:7 Fs:15}



static void Test_BFu0c_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu15s");
    static BFu0c_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu7i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu15s(Test_BFu0c_BFu7i_BFu15s, "BFu0c_BFu7i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu7i_BFu16i) C1{ Fc:0 Fi:7 Fi:16}



static void Test_BFu0c_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu16i");
    static BFu0c_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu16i(Test_BFu0c_BFu7i_BFu16i, "BFu0c_BFu7i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu7i_BFu16ll) C1{ Fc:0 Fi:7 FL:16}



static void Test_BFu0c_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu16ll");
    static BFu0c_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu16ll(Test_BFu0c_BFu7i_BFu16ll, "BFu0c_BFu7i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu16s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu7i_BFu16s) C1{ Fc:0 Fi:7 Fs:16}



static void Test_BFu0c_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu16s");
    static BFu0c_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu7i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu16s(Test_BFu0c_BFu7i_BFu16s, "BFu0c_BFu7i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu7i_BFu17i) C1{ Fc:0 Fi:7 Fi:17}



static void Test_BFu0c_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu17i");
    static BFu0c_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu17i(Test_BFu0c_BFu7i_BFu17i, "BFu0c_BFu7i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu7i_BFu17ll) C1{ Fc:0 Fi:7 FL:17}



static void Test_BFu0c_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu17ll");
    static BFu0c_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu17ll(Test_BFu0c_BFu7i_BFu17ll, "BFu0c_BFu7i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu7i_BFu1c) C1{ Fc:0 Fi:7 Fc:1}



static void Test_BFu0c_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu1c");
    static BFu0c_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu1c(Test_BFu0c_BFu7i_BFu1c, "BFu0c_BFu7i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu7i_BFu1i) C1{ Fc:0 Fi:7 Fi:1}



static void Test_BFu0c_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu1i");
    static BFu0c_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu1i(Test_BFu0c_BFu7i_BFu1i, "BFu0c_BFu7i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu7i_BFu1ll) C1{ Fc:0 Fi:7 FL:1}



static void Test_BFu0c_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu1ll");
    static BFu0c_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu1ll(Test_BFu0c_BFu7i_BFu1ll, "BFu0c_BFu7i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu1s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu7i_BFu1s) C1{ Fc:0 Fi:7 Fs:1}



static void Test_BFu0c_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu1s");
    static BFu0c_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu1s(Test_BFu0c_BFu7i_BFu1s, "BFu0c_BFu7i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu7i_BFu31i) C1{ Fc:0 Fi:7 Fi:31}



static void Test_BFu0c_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu31i");
    static BFu0c_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu7i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu31i(Test_BFu0c_BFu7i_BFu31i, "BFu0c_BFu7i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu7i_BFu31ll) C1{ Fc:0 Fi:7 FL:31}



static void Test_BFu0c_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu31ll");
    static BFu0c_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu7i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu31ll(Test_BFu0c_BFu7i_BFu31ll, "BFu0c_BFu7i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu7i_BFu32i) C1{ Fc:0 Fi:7 Fi:32}



static void Test_BFu0c_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu32i");
    static BFu0c_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu7i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu32i(Test_BFu0c_BFu7i_BFu32i, "BFu0c_BFu7i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu7i_BFu32ll) C1{ Fc:0 Fi:7 FL:32}



static void Test_BFu0c_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu32ll");
    static BFu0c_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu7i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu32ll(Test_BFu0c_BFu7i_BFu32ll, "BFu0c_BFu7i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu33  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu7i_BFu33) C1{ Fc:0 Fi:7 FL:33}



static void Test_BFu0c_BFu7i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu33");
    static BFu0c_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0c_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu7i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu33(Test_BFu0c_BFu7i_BFu33, "BFu0c_BFu7i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu7i_BFu7c) C1{ Fc:0 Fi:7 Fc:7}



static void Test_BFu0c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu7c");
    static BFu0c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu7c(Test_BFu0c_BFu7i_BFu7c, "BFu0c_BFu7i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu7i_BFu7i) C1{ Fc:0 Fi:7 Fi:7}



static void Test_BFu0c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu7i");
    static BFu0c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu7i(Test_BFu0c_BFu7i_BFu7i, "BFu0c_BFu7i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu7i_BFu7ll) C1{ Fc:0 Fi:7 FL:7}



static void Test_BFu0c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu7ll");
    static BFu0c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu7ll(Test_BFu0c_BFu7i_BFu7ll, "BFu0c_BFu7i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu7s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu7i_BFu7s) C1{ Fc:0 Fi:7 Fs:7}



static void Test_BFu0c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu7s");
    static BFu0c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu7s(Test_BFu0c_BFu7i_BFu7s, "BFu0c_BFu7i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu7i_BFu8c) C1{ Fc:0 Fi:7 Fc:8}



static void Test_BFu0c_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu8c");
    static BFu0c_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu7i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu8c(Test_BFu0c_BFu7i_BFu8c, "BFu0c_BFu7i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu7i_BFu8i) C1{ Fc:0 Fi:7 Fi:8}



static void Test_BFu0c_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu8i");
    static BFu0c_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu8i(Test_BFu0c_BFu7i_BFu8i, "BFu0c_BFu7i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu7i_BFu8ll) C1{ Fc:0 Fi:7 FL:8}



static void Test_BFu0c_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu8ll");
    static BFu0c_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu8ll(Test_BFu0c_BFu7i_BFu8ll, "BFu0c_BFu7i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu8s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu7i_BFu8s) C1{ Fc:0 Fi:7 Fs:8}



static void Test_BFu0c_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu8s");
    static BFu0c_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu8s(Test_BFu0c_BFu7i_BFu8s, "BFu0c_BFu7i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu7i_BFu9i) C1{ Fc:0 Fi:7 Fi:9}



static void Test_BFu0c_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu9i");
    static BFu0c_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu9i(Test_BFu0c_BFu7i_BFu9i, "BFu0c_BFu7i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu7i_BFu9ll) C1{ Fc:0 Fi:7 FL:9}



static void Test_BFu0c_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu9ll");
    static BFu0c_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu9ll(Test_BFu0c_BFu7i_BFu9ll, "BFu0c_BFu7i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_BFu9s  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu7i_BFu9s) C1{ Fc:0 Fi:7 Fs:9}



static void Test_BFu0c_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu7i_BFu9s");
    static BFu0c_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_BFu9s(Test_BFu0c_BFu7i_BFu9s, "BFu0c_BFu7i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_C  {
  unsigned char  :0;
  unsigned int v1:7;
  char v2;
};
//SIG(1 BFu0c_BFu7i_C) C1{ Fc:0 Fi:7 Fc}



static void Test_BFu0c_BFu7i_C()
{
  {
    init_simple_test("BFu0c_BFu7i_C");
    static BFu0c_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_C(Test_BFu0c_BFu7i_C, "BFu0c_BFu7i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_D  {
  unsigned char  :0;
  unsigned int v1:7;
  double v2;
};
//SIG(1 BFu0c_BFu7i_D) C1{ Fc:0 Fi:7 FL}



static void Test_BFu0c_BFu7i_D()
{
  {
    init_simple_test("BFu0c_BFu7i_D");
    static BFu0c_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_D(Test_BFu0c_BFu7i_D, "BFu0c_BFu7i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_F  {
  unsigned char  :0;
  unsigned int v1:7;
  float v2;
};
//SIG(1 BFu0c_BFu7i_F) C1{ Fc:0 Fi:7 Fi}



static void Test_BFu0c_BFu7i_F()
{
  {
    init_simple_test("BFu0c_BFu7i_F");
    static BFu0c_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_F(Test_BFu0c_BFu7i_F, "BFu0c_BFu7i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_I  {
  unsigned char  :0;
  unsigned int v1:7;
  int v2;
};
//SIG(1 BFu0c_BFu7i_I) C1{ Fc:0 Fi:7 Fi}



static void Test_BFu0c_BFu7i_I()
{
  {
    init_simple_test("BFu0c_BFu7i_I");
    static BFu0c_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_I(Test_BFu0c_BFu7i_I, "BFu0c_BFu7i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Ip  {
  unsigned char  :0;
  unsigned int v1:7;
  int *v2;
};
//SIG(1 BFu0c_BFu7i_Ip) C1{ Fc:0 Fi:7 Fp}



static void Test_BFu0c_BFu7i_Ip()
{
  {
    init_simple_test("BFu0c_BFu7i_Ip");
    static BFu0c_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Ip(Test_BFu0c_BFu7i_Ip, "BFu0c_BFu7i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_L  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu7i_L) C1{ Fc:0 Fi:7 FL}



static void Test_BFu0c_BFu7i_L()
{
  {
    init_simple_test("BFu0c_BFu7i_L");
    static BFu0c_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_L(Test_BFu0c_BFu7i_L, "BFu0c_BFu7i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_S  {
  unsigned char  :0;
  unsigned int v1:7;
  short v2;
};
//SIG(1 BFu0c_BFu7i_S) C1{ Fc:0 Fi:7 Fs}



static void Test_BFu0c_BFu7i_S()
{
  {
    init_simple_test("BFu0c_BFu7i_S");
    static BFu0c_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_S(Test_BFu0c_BFu7i_S, "BFu0c_BFu7i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Uc  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu7i_Uc) C1{ Fc:0 Fi:7 Fc}



static void Test_BFu0c_BFu7i_Uc()
{
  {
    init_simple_test("BFu0c_BFu7i_Uc");
    static BFu0c_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Uc(Test_BFu0c_BFu7i_Uc, "BFu0c_BFu7i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Ui  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu7i_Ui) C1{ Fc:0 Fi:7 Fi}



static void Test_BFu0c_BFu7i_Ui()
{
  {
    init_simple_test("BFu0c_BFu7i_Ui");
    static BFu0c_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Ui(Test_BFu0c_BFu7i_Ui, "BFu0c_BFu7i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Ul  {
  unsigned char  :0;
  unsigned int v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu7i_Ul) C1{ Fc:0 Fi:7 FL}



static void Test_BFu0c_BFu7i_Ul()
{
  {
    init_simple_test("BFu0c_BFu7i_Ul");
    static BFu0c_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Ul(Test_BFu0c_BFu7i_Ul, "BFu0c_BFu7i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Us  {
  unsigned char  :0;
  unsigned int v1:7;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu7i_Us) C1{ Fc:0 Fi:7 Fs}



static void Test_BFu0c_BFu7i_Us()
{
  {
    init_simple_test("BFu0c_BFu7i_Us");
    static BFu0c_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Us(Test_BFu0c_BFu7i_Us, "BFu0c_BFu7i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7i_Vp  {
  unsigned char  :0;
  unsigned int v1:7;
  void *v2;
};
//SIG(1 BFu0c_BFu7i_Vp) C1{ Fc:0 Fi:7 Fp}



static void Test_BFu0c_BFu7i_Vp()
{
  {
    init_simple_test("BFu0c_BFu7i_Vp");
    static BFu0c_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7i_Vp(Test_BFu0c_BFu7i_Vp, "BFu0c_BFu7i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0c_BFu7ll) C1{ Fc:0 FL:7}



static void Test_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu7ll");
    static BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll(Test_BFu0c_BFu7ll, "BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu7ll_BFu0c) C1{ Fc:0 FL:7 Fc:0}



static void Test_BFu0c_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu0c");
    static BFu0c_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu0c(Test_BFu0c_BFu7ll_BFu0c, "BFu0c_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu7ll_BFu0i) C1{ Fc:0 FL:7 Fi:0}



static void Test_BFu0c_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu0i");
    static BFu0c_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu0i(Test_BFu0c_BFu7ll_BFu0i, "BFu0c_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu7ll_BFu0ll) C1{ Fc:0 FL:7 FL:0}



static void Test_BFu0c_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu0ll");
    static BFu0c_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu0ll(Test_BFu0c_BFu7ll_BFu0ll, "BFu0c_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu7ll_BFu0s) C1{ Fc:0 FL:7 Fs:0}



static void Test_BFu0c_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu0s");
    static BFu0c_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu0s(Test_BFu0c_BFu7ll_BFu0s, "BFu0c_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu7ll_BFu15i) C1{ Fc:0 FL:7 Fi:15}



static void Test_BFu0c_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu15i");
    static BFu0c_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu15i(Test_BFu0c_BFu7ll_BFu15i, "BFu0c_BFu7ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu7ll_BFu15ll) C1{ Fc:0 FL:7 FL:15}



static void Test_BFu0c_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu15ll");
    static BFu0c_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu15ll(Test_BFu0c_BFu7ll_BFu15ll, "BFu0c_BFu7ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu7ll_BFu15s) C1{ Fc:0 FL:7 Fs:15}



static void Test_BFu0c_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu15s");
    static BFu0c_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu7ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu15s(Test_BFu0c_BFu7ll_BFu15s, "BFu0c_BFu7ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu7ll_BFu16i) C1{ Fc:0 FL:7 Fi:16}



static void Test_BFu0c_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu16i");
    static BFu0c_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu16i(Test_BFu0c_BFu7ll_BFu16i, "BFu0c_BFu7ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu7ll_BFu16ll) C1{ Fc:0 FL:7 FL:16}



static void Test_BFu0c_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu16ll");
    static BFu0c_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu16ll(Test_BFu0c_BFu7ll_BFu16ll, "BFu0c_BFu7ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu7ll_BFu16s) C1{ Fc:0 FL:7 Fs:16}



static void Test_BFu0c_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu16s");
    static BFu0c_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu7ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu16s(Test_BFu0c_BFu7ll_BFu16s, "BFu0c_BFu7ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu7ll_BFu17i) C1{ Fc:0 FL:7 Fi:17}



static void Test_BFu0c_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu17i");
    static BFu0c_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu17i(Test_BFu0c_BFu7ll_BFu17i, "BFu0c_BFu7ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu7ll_BFu17ll) C1{ Fc:0 FL:7 FL:17}



static void Test_BFu0c_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu17ll");
    static BFu0c_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu17ll(Test_BFu0c_BFu7ll_BFu17ll, "BFu0c_BFu7ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu7ll_BFu1c) C1{ Fc:0 FL:7 Fc:1}



static void Test_BFu0c_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu1c");
    static BFu0c_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu1c(Test_BFu0c_BFu7ll_BFu1c, "BFu0c_BFu7ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu7ll_BFu1i) C1{ Fc:0 FL:7 Fi:1}



static void Test_BFu0c_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu1i");
    static BFu0c_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu1i(Test_BFu0c_BFu7ll_BFu1i, "BFu0c_BFu7ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu7ll_BFu1ll) C1{ Fc:0 FL:7 FL:1}



static void Test_BFu0c_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu1ll");
    static BFu0c_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu1ll(Test_BFu0c_BFu7ll_BFu1ll, "BFu0c_BFu7ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu7ll_BFu1s) C1{ Fc:0 FL:7 Fs:1}



static void Test_BFu0c_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu1s");
    static BFu0c_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu1s(Test_BFu0c_BFu7ll_BFu1s, "BFu0c_BFu7ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu7ll_BFu31i) C1{ Fc:0 FL:7 Fi:31}



static void Test_BFu0c_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu31i");
    static BFu0c_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu7ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu31i(Test_BFu0c_BFu7ll_BFu31i, "BFu0c_BFu7ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu7ll_BFu31ll) C1{ Fc:0 FL:7 FL:31}



static void Test_BFu0c_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu31ll");
    static BFu0c_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu7ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu31ll(Test_BFu0c_BFu7ll_BFu31ll, "BFu0c_BFu7ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu7ll_BFu32i) C1{ Fc:0 FL:7 Fi:32}



static void Test_BFu0c_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu32i");
    static BFu0c_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu7ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu32i(Test_BFu0c_BFu7ll_BFu32i, "BFu0c_BFu7ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu7ll_BFu32ll) C1{ Fc:0 FL:7 FL:32}



static void Test_BFu0c_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu32ll");
    static BFu0c_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu7ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu32ll(Test_BFu0c_BFu7ll_BFu32ll, "BFu0c_BFu7ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu7ll_BFu33) C1{ Fc:0 FL:7 FL:33}



static void Test_BFu0c_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu33");
    static BFu0c_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0c_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu7ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu33(Test_BFu0c_BFu7ll_BFu33, "BFu0c_BFu7ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu7ll_BFu7c) C1{ Fc:0 FL:7 Fc:7}



static void Test_BFu0c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu7c");
    static BFu0c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu7c(Test_BFu0c_BFu7ll_BFu7c, "BFu0c_BFu7ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu7ll_BFu7i) C1{ Fc:0 FL:7 Fi:7}



static void Test_BFu0c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu7i");
    static BFu0c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu7i(Test_BFu0c_BFu7ll_BFu7i, "BFu0c_BFu7ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu7ll_BFu7ll) C1{ Fc:0 FL:7 FL:7}



static void Test_BFu0c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu7ll");
    static BFu0c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu7ll(Test_BFu0c_BFu7ll_BFu7ll, "BFu0c_BFu7ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu7ll_BFu7s) C1{ Fc:0 FL:7 Fs:7}



static void Test_BFu0c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu7s");
    static BFu0c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu7s(Test_BFu0c_BFu7ll_BFu7s, "BFu0c_BFu7ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu7ll_BFu8c) C1{ Fc:0 FL:7 Fc:8}



static void Test_BFu0c_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu8c");
    static BFu0c_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu7ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu8c(Test_BFu0c_BFu7ll_BFu8c, "BFu0c_BFu7ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu7ll_BFu8i) C1{ Fc:0 FL:7 Fi:8}



static void Test_BFu0c_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu8i");
    static BFu0c_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu8i(Test_BFu0c_BFu7ll_BFu8i, "BFu0c_BFu7ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu7ll_BFu8ll) C1{ Fc:0 FL:7 FL:8}



static void Test_BFu0c_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu8ll");
    static BFu0c_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu8ll(Test_BFu0c_BFu7ll_BFu8ll, "BFu0c_BFu7ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu7ll_BFu8s) C1{ Fc:0 FL:7 Fs:8}



static void Test_BFu0c_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu8s");
    static BFu0c_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu8s(Test_BFu0c_BFu7ll_BFu8s, "BFu0c_BFu7ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu7ll_BFu9i) C1{ Fc:0 FL:7 Fi:9}



static void Test_BFu0c_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu9i");
    static BFu0c_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu9i(Test_BFu0c_BFu7ll_BFu9i, "BFu0c_BFu7ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu7ll_BFu9ll) C1{ Fc:0 FL:7 FL:9}



static void Test_BFu0c_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu9ll");
    static BFu0c_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu9ll(Test_BFu0c_BFu7ll_BFu9ll, "BFu0c_BFu7ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu7ll_BFu9s) C1{ Fc:0 FL:7 Fs:9}



static void Test_BFu0c_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu7ll_BFu9s");
    static BFu0c_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_BFu9s(Test_BFu0c_BFu7ll_BFu9s, "BFu0c_BFu7ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_C  {
  unsigned char  :0;
  __tsu64 v1:7;
  char v2;
};
//SIG(1 BFu0c_BFu7ll_C) C1{ Fc:0 FL:7 Fc}



static void Test_BFu0c_BFu7ll_C()
{
  {
    init_simple_test("BFu0c_BFu7ll_C");
    static BFu0c_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_C(Test_BFu0c_BFu7ll_C, "BFu0c_BFu7ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_D  {
  unsigned char  :0;
  __tsu64 v1:7;
  double v2;
};
//SIG(1 BFu0c_BFu7ll_D) C1{ Fc:0 FL:7 FL}



static void Test_BFu0c_BFu7ll_D()
{
  {
    init_simple_test("BFu0c_BFu7ll_D");
    static BFu0c_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_D(Test_BFu0c_BFu7ll_D, "BFu0c_BFu7ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_F  {
  unsigned char  :0;
  __tsu64 v1:7;
  float v2;
};
//SIG(1 BFu0c_BFu7ll_F) C1{ Fc:0 FL:7 Fi}



static void Test_BFu0c_BFu7ll_F()
{
  {
    init_simple_test("BFu0c_BFu7ll_F");
    static BFu0c_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_F(Test_BFu0c_BFu7ll_F, "BFu0c_BFu7ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_I  {
  unsigned char  :0;
  __tsu64 v1:7;
  int v2;
};
//SIG(1 BFu0c_BFu7ll_I) C1{ Fc:0 FL:7 Fi}



static void Test_BFu0c_BFu7ll_I()
{
  {
    init_simple_test("BFu0c_BFu7ll_I");
    static BFu0c_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_I(Test_BFu0c_BFu7ll_I, "BFu0c_BFu7ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Ip  {
  unsigned char  :0;
  __tsu64 v1:7;
  int *v2;
};
//SIG(1 BFu0c_BFu7ll_Ip) C1{ Fc:0 FL:7 Fp}



static void Test_BFu0c_BFu7ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu7ll_Ip");
    static BFu0c_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Ip(Test_BFu0c_BFu7ll_Ip, "BFu0c_BFu7ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_L  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu7ll_L) C1{ Fc:0 FL:7 FL}



static void Test_BFu0c_BFu7ll_L()
{
  {
    init_simple_test("BFu0c_BFu7ll_L");
    static BFu0c_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_L(Test_BFu0c_BFu7ll_L, "BFu0c_BFu7ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_S  {
  unsigned char  :0;
  __tsu64 v1:7;
  short v2;
};
//SIG(1 BFu0c_BFu7ll_S) C1{ Fc:0 FL:7 Fs}



static void Test_BFu0c_BFu7ll_S()
{
  {
    init_simple_test("BFu0c_BFu7ll_S");
    static BFu0c_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_S(Test_BFu0c_BFu7ll_S, "BFu0c_BFu7ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu7ll_Uc) C1{ Fc:0 FL:7 Fc}



static void Test_BFu0c_BFu7ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu7ll_Uc");
    static BFu0c_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Uc(Test_BFu0c_BFu7ll_Uc, "BFu0c_BFu7ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu7ll_Ui) C1{ Fc:0 FL:7 Fi}



static void Test_BFu0c_BFu7ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu7ll_Ui");
    static BFu0c_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Ui(Test_BFu0c_BFu7ll_Ui, "BFu0c_BFu7ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu7ll_Ul) C1{ Fc:0 FL:7 FL}



static void Test_BFu0c_BFu7ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu7ll_Ul");
    static BFu0c_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Ul(Test_BFu0c_BFu7ll_Ul, "BFu0c_BFu7ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Us  {
  unsigned char  :0;
  __tsu64 v1:7;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu7ll_Us) C1{ Fc:0 FL:7 Fs}



static void Test_BFu0c_BFu7ll_Us()
{
  {
    init_simple_test("BFu0c_BFu7ll_Us");
    static BFu0c_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Us(Test_BFu0c_BFu7ll_Us, "BFu0c_BFu7ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:7;
  void *v2;
};
//SIG(1 BFu0c_BFu7ll_Vp) C1{ Fc:0 FL:7 Fp}



static void Test_BFu0c_BFu7ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu7ll_Vp");
    static BFu0c_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7ll_Vp(Test_BFu0c_BFu7ll_Vp, "BFu0c_BFu7ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s  {
  unsigned char  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0c_BFu7s) C1{ Fc:0 Fs:7}



static void Test_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu7s");
    static BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s(Test_BFu0c_BFu7s, "BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu0c  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu7s_BFu0c) C1{ Fc:0 Fs:7 Fc:0}



static void Test_BFu0c_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu0c");
    static BFu0c_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu0c(Test_BFu0c_BFu7s_BFu0c, "BFu0c_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu0i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu7s_BFu0i) C1{ Fc:0 Fs:7 Fi:0}



static void Test_BFu0c_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu0i");
    static BFu0c_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu0i(Test_BFu0c_BFu7s_BFu0i, "BFu0c_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu0ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu7s_BFu0ll) C1{ Fc:0 Fs:7 FL:0}



static void Test_BFu0c_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu0ll");
    static BFu0c_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu0ll(Test_BFu0c_BFu7s_BFu0ll, "BFu0c_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu0s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu7s_BFu0s) C1{ Fc:0 Fs:7 Fs:0}



static void Test_BFu0c_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu0s");
    static BFu0c_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu0s(Test_BFu0c_BFu7s_BFu0s, "BFu0c_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu15i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu7s_BFu15i) C1{ Fc:0 Fs:7 Fi:15}



static void Test_BFu0c_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu15i");
    static BFu0c_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu15i(Test_BFu0c_BFu7s_BFu15i, "BFu0c_BFu7s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu15ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu7s_BFu15ll) C1{ Fc:0 Fs:7 FL:15}



static void Test_BFu0c_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu15ll");
    static BFu0c_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0c_BFu7s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu15ll(Test_BFu0c_BFu7s_BFu15ll, "BFu0c_BFu7s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu15s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu7s_BFu15s) C1{ Fc:0 Fs:7 Fs:15}



static void Test_BFu0c_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu15s");
    static BFu0c_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu7s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu15s(Test_BFu0c_BFu7s_BFu15s, "BFu0c_BFu7s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu16i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu7s_BFu16i) C1{ Fc:0 Fs:7 Fi:16}



static void Test_BFu0c_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu16i");
    static BFu0c_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu16i(Test_BFu0c_BFu7s_BFu16i, "BFu0c_BFu7s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu16ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu7s_BFu16ll) C1{ Fc:0 Fs:7 FL:16}



static void Test_BFu0c_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu16ll");
    static BFu0c_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0c_BFu7s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu16ll(Test_BFu0c_BFu7s_BFu16ll, "BFu0c_BFu7s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu16s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu7s_BFu16s) C1{ Fc:0 Fs:7 Fs:16}



static void Test_BFu0c_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu16s");
    static BFu0c_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu7s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu16s(Test_BFu0c_BFu7s_BFu16s, "BFu0c_BFu7s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu17i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu7s_BFu17i) C1{ Fc:0 Fs:7 Fi:17}



static void Test_BFu0c_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu17i");
    static BFu0c_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu17i(Test_BFu0c_BFu7s_BFu17i, "BFu0c_BFu7s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu17ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu7s_BFu17ll) C1{ Fc:0 Fs:7 FL:17}



static void Test_BFu0c_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu17ll");
    static BFu0c_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0c_BFu7s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu17ll(Test_BFu0c_BFu7s_BFu17ll, "BFu0c_BFu7s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu1c  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu7s_BFu1c) C1{ Fc:0 Fs:7 Fc:1}



static void Test_BFu0c_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu1c");
    static BFu0c_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu1c(Test_BFu0c_BFu7s_BFu1c, "BFu0c_BFu7s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu1i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu7s_BFu1i) C1{ Fc:0 Fs:7 Fi:1}



static void Test_BFu0c_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu1i");
    static BFu0c_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu1i(Test_BFu0c_BFu7s_BFu1i, "BFu0c_BFu7s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu1ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu7s_BFu1ll) C1{ Fc:0 Fs:7 FL:1}



static void Test_BFu0c_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu1ll");
    static BFu0c_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu1ll(Test_BFu0c_BFu7s_BFu1ll, "BFu0c_BFu7s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu1s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu7s_BFu1s) C1{ Fc:0 Fs:7 Fs:1}



static void Test_BFu0c_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu1s");
    static BFu0c_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0c_BFu7s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu1s(Test_BFu0c_BFu7s_BFu1s, "BFu0c_BFu7s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu31i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu7s_BFu31i) C1{ Fc:0 Fs:7 Fi:31}



static void Test_BFu0c_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu31i");
    static BFu0c_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu7s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu31i(Test_BFu0c_BFu7s_BFu31i, "BFu0c_BFu7s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu31ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu7s_BFu31ll) C1{ Fc:0 Fs:7 FL:31}



static void Test_BFu0c_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu31ll");
    static BFu0c_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0c_BFu7s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu31ll(Test_BFu0c_BFu7s_BFu31ll, "BFu0c_BFu7s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu32i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu7s_BFu32i) C1{ Fc:0 Fs:7 Fi:32}



static void Test_BFu0c_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu32i");
    static BFu0c_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu7s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu32i(Test_BFu0c_BFu7s_BFu32i, "BFu0c_BFu7s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu32ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu7s_BFu32ll) C1{ Fc:0 Fs:7 FL:32}



static void Test_BFu0c_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu32ll");
    static BFu0c_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0c_BFu7s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu32ll(Test_BFu0c_BFu7s_BFu32ll, "BFu0c_BFu7s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu33  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu7s_BFu33) C1{ Fc:0 Fs:7 FL:33}



static void Test_BFu0c_BFu7s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu33");
    static BFu0c_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0c_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0c_BFu7s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu33(Test_BFu0c_BFu7s_BFu33, "BFu0c_BFu7s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu7s_BFu7c) C1{ Fc:0 Fs:7 Fc:7}



static void Test_BFu0c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu7c");
    static BFu0c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu7c(Test_BFu0c_BFu7s_BFu7c, "BFu0c_BFu7s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu7i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu7s_BFu7i) C1{ Fc:0 Fs:7 Fi:7}



static void Test_BFu0c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu7i");
    static BFu0c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu7i(Test_BFu0c_BFu7s_BFu7i, "BFu0c_BFu7s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu7ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu7s_BFu7ll) C1{ Fc:0 Fs:7 FL:7}



static void Test_BFu0c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu7ll");
    static BFu0c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu7ll(Test_BFu0c_BFu7s_BFu7ll, "BFu0c_BFu7s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu7s_BFu7s) C1{ Fc:0 Fs:7 Fs:7}



static void Test_BFu0c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu7s");
    static BFu0c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu7s(Test_BFu0c_BFu7s_BFu7s, "BFu0c_BFu7s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu7s_BFu8c) C1{ Fc:0 Fs:7 Fc:8}



static void Test_BFu0c_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu8c");
    static BFu0c_BFu7s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu7s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu8c(Test_BFu0c_BFu7s_BFu8c, "BFu0c_BFu7s_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu8i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu7s_BFu8i) C1{ Fc:0 Fs:7 Fi:8}



static void Test_BFu0c_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu8i");
    static BFu0c_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu8i(Test_BFu0c_BFu7s_BFu8i, "BFu0c_BFu7s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu8ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu7s_BFu8ll) C1{ Fc:0 Fs:7 FL:8}



static void Test_BFu0c_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu8ll");
    static BFu0c_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu8ll(Test_BFu0c_BFu7s_BFu8ll, "BFu0c_BFu7s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu7s_BFu8s) C1{ Fc:0 Fs:7 Fs:8}



static void Test_BFu0c_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu8s");
    static BFu0c_BFu7s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0c_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0c_BFu7s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu8s(Test_BFu0c_BFu7s_BFu8s, "BFu0c_BFu7s_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu9i  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu7s_BFu9i) C1{ Fc:0 Fs:7 Fi:9}



static void Test_BFu0c_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu9i");
    static BFu0c_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu9i(Test_BFu0c_BFu7s_BFu9i, "BFu0c_BFu7s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu9ll  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu7s_BFu9ll) C1{ Fc:0 Fs:7 FL:9}



static void Test_BFu0c_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu9ll");
    static BFu0c_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu9ll(Test_BFu0c_BFu7s_BFu9ll, "BFu0c_BFu7s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu7s_BFu9s) C1{ Fc:0 Fs:7 Fs:9}



static void Test_BFu0c_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu7s_BFu9s");
    static BFu0c_BFu7s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0c_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0c_BFu7s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_BFu9s(Test_BFu0c_BFu7s_BFu9s, "BFu0c_BFu7s_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_C  {
  unsigned char  :0;
  unsigned short v1:7;
  char v2;
};
//SIG(1 BFu0c_BFu7s_C) C1{ Fc:0 Fs:7 Fc}



static void Test_BFu0c_BFu7s_C()
{
  {
    init_simple_test("BFu0c_BFu7s_C");
    static BFu0c_BFu7s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_C(Test_BFu0c_BFu7s_C, "BFu0c_BFu7s_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_D  {
  unsigned char  :0;
  unsigned short v1:7;
  double v2;
};
//SIG(1 BFu0c_BFu7s_D) C1{ Fc:0 Fs:7 FL}



static void Test_BFu0c_BFu7s_D()
{
  {
    init_simple_test("BFu0c_BFu7s_D");
    static BFu0c_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_D(Test_BFu0c_BFu7s_D, "BFu0c_BFu7s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_F  {
  unsigned char  :0;
  unsigned short v1:7;
  float v2;
};
//SIG(1 BFu0c_BFu7s_F) C1{ Fc:0 Fs:7 Fi}



static void Test_BFu0c_BFu7s_F()
{
  {
    init_simple_test("BFu0c_BFu7s_F");
    static BFu0c_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_F(Test_BFu0c_BFu7s_F, "BFu0c_BFu7s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_I  {
  unsigned char  :0;
  unsigned short v1:7;
  int v2;
};
//SIG(1 BFu0c_BFu7s_I) C1{ Fc:0 Fs:7 Fi}



static void Test_BFu0c_BFu7s_I()
{
  {
    init_simple_test("BFu0c_BFu7s_I");
    static BFu0c_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_I(Test_BFu0c_BFu7s_I, "BFu0c_BFu7s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Ip  {
  unsigned char  :0;
  unsigned short v1:7;
  int *v2;
};
//SIG(1 BFu0c_BFu7s_Ip) C1{ Fc:0 Fs:7 Fp}



static void Test_BFu0c_BFu7s_Ip()
{
  {
    init_simple_test("BFu0c_BFu7s_Ip");
    static BFu0c_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Ip(Test_BFu0c_BFu7s_Ip, "BFu0c_BFu7s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_L  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu7s_L) C1{ Fc:0 Fs:7 FL}



static void Test_BFu0c_BFu7s_L()
{
  {
    init_simple_test("BFu0c_BFu7s_L");
    static BFu0c_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_L(Test_BFu0c_BFu7s_L, "BFu0c_BFu7s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_S  {
  unsigned char  :0;
  unsigned short v1:7;
  short v2;
};
//SIG(1 BFu0c_BFu7s_S) C1{ Fc:0 Fs:7 Fs}



static void Test_BFu0c_BFu7s_S()
{
  {
    init_simple_test("BFu0c_BFu7s_S");
    static BFu0c_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_S(Test_BFu0c_BFu7s_S, "BFu0c_BFu7s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Uc  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu7s_Uc) C1{ Fc:0 Fs:7 Fc}



static void Test_BFu0c_BFu7s_Uc()
{
  {
    init_simple_test("BFu0c_BFu7s_Uc");
    static BFu0c_BFu7s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu7s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Uc(Test_BFu0c_BFu7s_Uc, "BFu0c_BFu7s_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Ui  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu7s_Ui) C1{ Fc:0 Fs:7 Fi}



static void Test_BFu0c_BFu7s_Ui()
{
  {
    init_simple_test("BFu0c_BFu7s_Ui");
    static BFu0c_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu7s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Ui(Test_BFu0c_BFu7s_Ui, "BFu0c_BFu7s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Ul  {
  unsigned char  :0;
  unsigned short v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu7s_Ul) C1{ Fc:0 Fs:7 FL}



static void Test_BFu0c_BFu7s_Ul()
{
  {
    init_simple_test("BFu0c_BFu7s_Ul");
    static BFu0c_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Ul(Test_BFu0c_BFu7s_Ul, "BFu0c_BFu7s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Us  {
  unsigned char  :0;
  unsigned short v1:7;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu7s_Us) C1{ Fc:0 Fs:7 Fs}



static void Test_BFu0c_BFu7s_Us()
{
  {
    init_simple_test("BFu0c_BFu7s_Us");
    static BFu0c_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu7s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Us(Test_BFu0c_BFu7s_Us, "BFu0c_BFu7s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu7s_Vp  {
  unsigned char  :0;
  unsigned short v1:7;
  void *v2;
};
//SIG(1 BFu0c_BFu7s_Vp) C1{ Fc:0 Fs:7 Fp}



static void Test_BFu0c_BFu7s_Vp()
{
  {
    init_simple_test("BFu0c_BFu7s_Vp");
    static BFu0c_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0c_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu7s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu7s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu7s_Vp(Test_BFu0c_BFu7s_Vp, "BFu0c_BFu7s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c  {
  unsigned char  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0c_BFu8c) C1{ Fc:0 Fc:8}



static void Test_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu8c");
    static BFu0c_BFu8c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c(Test_BFu0c_BFu8c, "BFu0c_BFu8c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu0c  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu8c_BFu0c) C1{ Fc:0 Fc:8 Fc:0}



static void Test_BFu0c_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu0c");
    static BFu0c_BFu8c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu0c(Test_BFu0c_BFu8c_BFu0c, "BFu0c_BFu8c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu0i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu8c_BFu0i) C1{ Fc:0 Fc:8 Fi:0}



static void Test_BFu0c_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu0i");
    static BFu0c_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu0i(Test_BFu0c_BFu8c_BFu0i, "BFu0c_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu0ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu8c_BFu0ll) C1{ Fc:0 Fc:8 FL:0}



static void Test_BFu0c_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu0ll");
    static BFu0c_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu0ll(Test_BFu0c_BFu8c_BFu0ll, "BFu0c_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu0s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu8c_BFu0s) C1{ Fc:0 Fc:8 Fs:0}



static void Test_BFu0c_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu0s");
    static BFu0c_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu0s(Test_BFu0c_BFu8c_BFu0s, "BFu0c_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu15i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu8c_BFu15i) C1{ Fc:0 Fc:8 Fi:15}



static void Test_BFu0c_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu15i");
    static BFu0c_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu15i(Test_BFu0c_BFu8c_BFu15i, "BFu0c_BFu8c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu15ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu8c_BFu15ll) C1{ Fc:0 Fc:8 FL:15}



static void Test_BFu0c_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu15ll");
    static BFu0c_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu15ll(Test_BFu0c_BFu8c_BFu15ll, "BFu0c_BFu8c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu15s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu8c_BFu15s) C1{ Fc:0 Fc:8 Fs:15}



static void Test_BFu0c_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu15s");
    static BFu0c_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu15s(Test_BFu0c_BFu8c_BFu15s, "BFu0c_BFu8c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu16i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu8c_BFu16i) C1{ Fc:0 Fc:8 Fi:16}



static void Test_BFu0c_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu16i");
    static BFu0c_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu16i(Test_BFu0c_BFu8c_BFu16i, "BFu0c_BFu8c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu16ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu8c_BFu16ll) C1{ Fc:0 Fc:8 FL:16}



static void Test_BFu0c_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu16ll");
    static BFu0c_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu16ll(Test_BFu0c_BFu8c_BFu16ll, "BFu0c_BFu8c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu16s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu8c_BFu16s) C1{ Fc:0 Fc:8 Fs:16}



static void Test_BFu0c_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu16s");
    static BFu0c_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu16s(Test_BFu0c_BFu8c_BFu16s, "BFu0c_BFu8c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu17i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu8c_BFu17i) C1{ Fc:0 Fc:8 Fi:17}



static void Test_BFu0c_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu17i");
    static BFu0c_BFu8c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu17i(Test_BFu0c_BFu8c_BFu17i, "BFu0c_BFu8c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu17ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu8c_BFu17ll) C1{ Fc:0 Fc:8 FL:17}



static void Test_BFu0c_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu17ll");
    static BFu0c_BFu8c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu17ll(Test_BFu0c_BFu8c_BFu17ll, "BFu0c_BFu8c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu1c  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu8c_BFu1c) C1{ Fc:0 Fc:8 Fc:1}



static void Test_BFu0c_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu1c");
    static BFu0c_BFu8c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu1c(Test_BFu0c_BFu8c_BFu1c, "BFu0c_BFu8c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu1i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu8c_BFu1i) C1{ Fc:0 Fc:8 Fi:1}



static void Test_BFu0c_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu1i");
    static BFu0c_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu1i(Test_BFu0c_BFu8c_BFu1i, "BFu0c_BFu8c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu1ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu8c_BFu1ll) C1{ Fc:0 Fc:8 FL:1}



static void Test_BFu0c_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu1ll");
    static BFu0c_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu1ll(Test_BFu0c_BFu8c_BFu1ll, "BFu0c_BFu8c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu1s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu8c_BFu1s) C1{ Fc:0 Fc:8 Fs:1}



static void Test_BFu0c_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu1s");
    static BFu0c_BFu8c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu1s(Test_BFu0c_BFu8c_BFu1s, "BFu0c_BFu8c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu31i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu8c_BFu31i) C1{ Fc:0 Fc:8 Fi:31}



static void Test_BFu0c_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu31i");
    static BFu0c_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu31i(Test_BFu0c_BFu8c_BFu31i, "BFu0c_BFu8c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu31ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu8c_BFu31ll) C1{ Fc:0 Fc:8 FL:31}



static void Test_BFu0c_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu31ll");
    static BFu0c_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu31ll(Test_BFu0c_BFu8c_BFu31ll, "BFu0c_BFu8c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu32i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu8c_BFu32i) C1{ Fc:0 Fc:8 Fi:32}



static void Test_BFu0c_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu32i");
    static BFu0c_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu32i(Test_BFu0c_BFu8c_BFu32i, "BFu0c_BFu8c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu32ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu8c_BFu32ll) C1{ Fc:0 Fc:8 FL:32}



static void Test_BFu0c_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu32ll");
    static BFu0c_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu32ll(Test_BFu0c_BFu8c_BFu32ll, "BFu0c_BFu8c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu33  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu8c_BFu33) C1{ Fc:0 Fc:8 FL:33}



static void Test_BFu0c_BFu8c_BFu33()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu33");
    static BFu0c_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu8c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu33(Test_BFu0c_BFu8c_BFu33, "BFu0c_BFu8c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu7c  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu8c_BFu7c) C1{ Fc:0 Fc:8 Fc:7}



static void Test_BFu0c_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu7c");
    static BFu0c_BFu8c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu7c(Test_BFu0c_BFu8c_BFu7c, "BFu0c_BFu8c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu7i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu8c_BFu7i) C1{ Fc:0 Fc:8 Fi:7}



static void Test_BFu0c_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu7i");
    static BFu0c_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu7i(Test_BFu0c_BFu8c_BFu7i, "BFu0c_BFu8c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu7ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu8c_BFu7ll) C1{ Fc:0 Fc:8 FL:7}



static void Test_BFu0c_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu7ll");
    static BFu0c_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu7ll(Test_BFu0c_BFu8c_BFu7ll, "BFu0c_BFu8c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu7s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu8c_BFu7s) C1{ Fc:0 Fc:8 Fs:7}



static void Test_BFu0c_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu7s");
    static BFu0c_BFu8c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu7s(Test_BFu0c_BFu8c_BFu7s, "BFu0c_BFu8c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu8c  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu8c_BFu8c) C1{ Fc:0 Fc:8 Fc:8}



static void Test_BFu0c_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu8c");
    static BFu0c_BFu8c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu8c(Test_BFu0c_BFu8c_BFu8c, "BFu0c_BFu8c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu8i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu8c_BFu8i) C1{ Fc:0 Fc:8 Fi:8}



static void Test_BFu0c_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu8i");
    static BFu0c_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu8i(Test_BFu0c_BFu8c_BFu8i, "BFu0c_BFu8c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu8ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu8c_BFu8ll) C1{ Fc:0 Fc:8 FL:8}



static void Test_BFu0c_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu8ll");
    static BFu0c_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu8ll(Test_BFu0c_BFu8c_BFu8ll, "BFu0c_BFu8c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu8s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu8c_BFu8s) C1{ Fc:0 Fc:8 Fs:8}



static void Test_BFu0c_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu8s");
    static BFu0c_BFu8c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu8s(Test_BFu0c_BFu8c_BFu8s, "BFu0c_BFu8c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu9i  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu8c_BFu9i) C1{ Fc:0 Fc:8 Fi:9}



static void Test_BFu0c_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu9i");
    static BFu0c_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu9i(Test_BFu0c_BFu8c_BFu9i, "BFu0c_BFu8c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu9ll  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu8c_BFu9ll) C1{ Fc:0 Fc:8 FL:9}



static void Test_BFu0c_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu9ll");
    static BFu0c_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu9ll(Test_BFu0c_BFu8c_BFu9ll, "BFu0c_BFu8c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_BFu9s  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu8c_BFu9s) C1{ Fc:0 Fc:8 Fs:9}



static void Test_BFu0c_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu8c_BFu9s");
    static BFu0c_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_BFu9s(Test_BFu0c_BFu8c_BFu9s, "BFu0c_BFu8c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_C  {
  unsigned char  :0;
  unsigned char v1:8;
  char v2;
};
//SIG(1 BFu0c_BFu8c_C) C1{ Fc:0 Fc:8 Fc}



static void Test_BFu0c_BFu8c_C()
{
  {
    init_simple_test("BFu0c_BFu8c_C");
    static BFu0c_BFu8c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_C(Test_BFu0c_BFu8c_C, "BFu0c_BFu8c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_D  {
  unsigned char  :0;
  unsigned char v1:8;
  double v2;
};
//SIG(1 BFu0c_BFu8c_D) C1{ Fc:0 Fc:8 FL}



static void Test_BFu0c_BFu8c_D()
{
  {
    init_simple_test("BFu0c_BFu8c_D");
    static BFu0c_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_D(Test_BFu0c_BFu8c_D, "BFu0c_BFu8c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_F  {
  unsigned char  :0;
  unsigned char v1:8;
  float v2;
};
//SIG(1 BFu0c_BFu8c_F) C1{ Fc:0 Fc:8 Fi}



static void Test_BFu0c_BFu8c_F()
{
  {
    init_simple_test("BFu0c_BFu8c_F");
    static BFu0c_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_F(Test_BFu0c_BFu8c_F, "BFu0c_BFu8c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_I  {
  unsigned char  :0;
  unsigned char v1:8;
  int v2;
};
//SIG(1 BFu0c_BFu8c_I) C1{ Fc:0 Fc:8 Fi}



static void Test_BFu0c_BFu8c_I()
{
  {
    init_simple_test("BFu0c_BFu8c_I");
    static BFu0c_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_I(Test_BFu0c_BFu8c_I, "BFu0c_BFu8c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Ip  {
  unsigned char  :0;
  unsigned char v1:8;
  int *v2;
};
//SIG(1 BFu0c_BFu8c_Ip) C1{ Fc:0 Fc:8 Fp}



static void Test_BFu0c_BFu8c_Ip()
{
  {
    init_simple_test("BFu0c_BFu8c_Ip");
    static BFu0c_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Ip(Test_BFu0c_BFu8c_Ip, "BFu0c_BFu8c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_L  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu8c_L) C1{ Fc:0 Fc:8 FL}



static void Test_BFu0c_BFu8c_L()
{
  {
    init_simple_test("BFu0c_BFu8c_L");
    static BFu0c_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_L(Test_BFu0c_BFu8c_L, "BFu0c_BFu8c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_S  {
  unsigned char  :0;
  unsigned char v1:8;
  short v2;
};
//SIG(1 BFu0c_BFu8c_S) C1{ Fc:0 Fc:8 Fs}



static void Test_BFu0c_BFu8c_S()
{
  {
    init_simple_test("BFu0c_BFu8c_S");
    static BFu0c_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_S(Test_BFu0c_BFu8c_S, "BFu0c_BFu8c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Uc  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu8c_Uc) C1{ Fc:0 Fc:8 Fc}



static void Test_BFu0c_BFu8c_Uc()
{
  {
    init_simple_test("BFu0c_BFu8c_Uc");
    static BFu0c_BFu8c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Uc(Test_BFu0c_BFu8c_Uc, "BFu0c_BFu8c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Ui  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu8c_Ui) C1{ Fc:0 Fc:8 Fi}



static void Test_BFu0c_BFu8c_Ui()
{
  {
    init_simple_test("BFu0c_BFu8c_Ui");
    static BFu0c_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Ui(Test_BFu0c_BFu8c_Ui, "BFu0c_BFu8c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Ul  {
  unsigned char  :0;
  unsigned char v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu8c_Ul) C1{ Fc:0 Fc:8 FL}



static void Test_BFu0c_BFu8c_Ul()
{
  {
    init_simple_test("BFu0c_BFu8c_Ul");
    static BFu0c_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Ul(Test_BFu0c_BFu8c_Ul, "BFu0c_BFu8c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Us  {
  unsigned char  :0;
  unsigned char v1:8;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu8c_Us) C1{ Fc:0 Fc:8 Fs}



static void Test_BFu0c_BFu8c_Us()
{
  {
    init_simple_test("BFu0c_BFu8c_Us");
    static BFu0c_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Us(Test_BFu0c_BFu8c_Us, "BFu0c_BFu8c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8c_Vp  {
  unsigned char  :0;
  unsigned char v1:8;
  void *v2;
};
//SIG(1 BFu0c_BFu8c_Vp) C1{ Fc:0 Fc:8 Fp}



static void Test_BFu0c_BFu8c_Vp()
{
  {
    init_simple_test("BFu0c_BFu8c_Vp");
    static BFu0c_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8c_Vp(Test_BFu0c_BFu8c_Vp, "BFu0c_BFu8c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i  {
  unsigned char  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0c_BFu8i) C1{ Fc:0 Fi:8}



static void Test_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu8i");
    static BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i(Test_BFu0c_BFu8i, "BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu8i_BFu0c) C1{ Fc:0 Fi:8 Fc:0}



static void Test_BFu0c_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu0c");
    static BFu0c_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu0c(Test_BFu0c_BFu8i_BFu0c, "BFu0c_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu8i_BFu0i) C1{ Fc:0 Fi:8 Fi:0}



static void Test_BFu0c_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu0i");
    static BFu0c_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu0i(Test_BFu0c_BFu8i_BFu0i, "BFu0c_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu8i_BFu0ll) C1{ Fc:0 Fi:8 FL:0}



static void Test_BFu0c_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu0ll");
    static BFu0c_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu0ll(Test_BFu0c_BFu8i_BFu0ll, "BFu0c_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu8i_BFu0s) C1{ Fc:0 Fi:8 Fs:0}



static void Test_BFu0c_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu0s");
    static BFu0c_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu0s(Test_BFu0c_BFu8i_BFu0s, "BFu0c_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu8i_BFu15i) C1{ Fc:0 Fi:8 Fi:15}



static void Test_BFu0c_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu15i");
    static BFu0c_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu15i(Test_BFu0c_BFu8i_BFu15i, "BFu0c_BFu8i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu8i_BFu15ll) C1{ Fc:0 Fi:8 FL:15}



static void Test_BFu0c_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu15ll");
    static BFu0c_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu15ll(Test_BFu0c_BFu8i_BFu15ll, "BFu0c_BFu8i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu15s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu8i_BFu15s) C1{ Fc:0 Fi:8 Fs:15}



static void Test_BFu0c_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu15s");
    static BFu0c_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu15s(Test_BFu0c_BFu8i_BFu15s, "BFu0c_BFu8i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu8i_BFu16i) C1{ Fc:0 Fi:8 Fi:16}



static void Test_BFu0c_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu16i");
    static BFu0c_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu16i(Test_BFu0c_BFu8i_BFu16i, "BFu0c_BFu8i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu8i_BFu16ll) C1{ Fc:0 Fi:8 FL:16}



static void Test_BFu0c_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu16ll");
    static BFu0c_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu16ll(Test_BFu0c_BFu8i_BFu16ll, "BFu0c_BFu8i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu16s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu8i_BFu16s) C1{ Fc:0 Fi:8 Fs:16}



static void Test_BFu0c_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu16s");
    static BFu0c_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu16s(Test_BFu0c_BFu8i_BFu16s, "BFu0c_BFu8i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu8i_BFu17i) C1{ Fc:0 Fi:8 Fi:17}



static void Test_BFu0c_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu17i");
    static BFu0c_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu17i(Test_BFu0c_BFu8i_BFu17i, "BFu0c_BFu8i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu8i_BFu17ll) C1{ Fc:0 Fi:8 FL:17}



static void Test_BFu0c_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu17ll");
    static BFu0c_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu17ll(Test_BFu0c_BFu8i_BFu17ll, "BFu0c_BFu8i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu8i_BFu1c) C1{ Fc:0 Fi:8 Fc:1}



static void Test_BFu0c_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu1c");
    static BFu0c_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu1c(Test_BFu0c_BFu8i_BFu1c, "BFu0c_BFu8i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu8i_BFu1i) C1{ Fc:0 Fi:8 Fi:1}



static void Test_BFu0c_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu1i");
    static BFu0c_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu1i(Test_BFu0c_BFu8i_BFu1i, "BFu0c_BFu8i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu8i_BFu1ll) C1{ Fc:0 Fi:8 FL:1}



static void Test_BFu0c_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu1ll");
    static BFu0c_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu1ll(Test_BFu0c_BFu8i_BFu1ll, "BFu0c_BFu8i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu1s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu8i_BFu1s) C1{ Fc:0 Fi:8 Fs:1}



static void Test_BFu0c_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu1s");
    static BFu0c_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu1s(Test_BFu0c_BFu8i_BFu1s, "BFu0c_BFu8i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu8i_BFu31i) C1{ Fc:0 Fi:8 Fi:31}



static void Test_BFu0c_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu31i");
    static BFu0c_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu31i(Test_BFu0c_BFu8i_BFu31i, "BFu0c_BFu8i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu8i_BFu31ll) C1{ Fc:0 Fi:8 FL:31}



static void Test_BFu0c_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu31ll");
    static BFu0c_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu31ll(Test_BFu0c_BFu8i_BFu31ll, "BFu0c_BFu8i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu8i_BFu32i) C1{ Fc:0 Fi:8 Fi:32}



static void Test_BFu0c_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu32i");
    static BFu0c_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu32i(Test_BFu0c_BFu8i_BFu32i, "BFu0c_BFu8i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu8i_BFu32ll) C1{ Fc:0 Fi:8 FL:32}



static void Test_BFu0c_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu32ll");
    static BFu0c_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu32ll(Test_BFu0c_BFu8i_BFu32ll, "BFu0c_BFu8i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu33  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu8i_BFu33) C1{ Fc:0 Fi:8 FL:33}



static void Test_BFu0c_BFu8i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu33");
    static BFu0c_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu8i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu33(Test_BFu0c_BFu8i_BFu33, "BFu0c_BFu8i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu8i_BFu7c) C1{ Fc:0 Fi:8 Fc:7}



static void Test_BFu0c_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu7c");
    static BFu0c_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu7c(Test_BFu0c_BFu8i_BFu7c, "BFu0c_BFu8i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu8i_BFu7i) C1{ Fc:0 Fi:8 Fi:7}



static void Test_BFu0c_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu7i");
    static BFu0c_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu7i(Test_BFu0c_BFu8i_BFu7i, "BFu0c_BFu8i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu8i_BFu7ll) C1{ Fc:0 Fi:8 FL:7}



static void Test_BFu0c_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu7ll");
    static BFu0c_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu7ll(Test_BFu0c_BFu8i_BFu7ll, "BFu0c_BFu8i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu7s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu8i_BFu7s) C1{ Fc:0 Fi:8 Fs:7}



static void Test_BFu0c_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu7s");
    static BFu0c_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu7s(Test_BFu0c_BFu8i_BFu7s, "BFu0c_BFu8i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu8i_BFu8c) C1{ Fc:0 Fi:8 Fc:8}



static void Test_BFu0c_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu8c");
    static BFu0c_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu8c(Test_BFu0c_BFu8i_BFu8c, "BFu0c_BFu8i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu8i_BFu8i) C1{ Fc:0 Fi:8 Fi:8}



static void Test_BFu0c_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu8i");
    static BFu0c_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu8i(Test_BFu0c_BFu8i_BFu8i, "BFu0c_BFu8i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu8i_BFu8ll) C1{ Fc:0 Fi:8 FL:8}



static void Test_BFu0c_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu8ll");
    static BFu0c_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu8ll(Test_BFu0c_BFu8i_BFu8ll, "BFu0c_BFu8i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu8s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu8i_BFu8s) C1{ Fc:0 Fi:8 Fs:8}



static void Test_BFu0c_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu8s");
    static BFu0c_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu8s(Test_BFu0c_BFu8i_BFu8s, "BFu0c_BFu8i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu8i_BFu9i) C1{ Fc:0 Fi:8 Fi:9}



static void Test_BFu0c_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu9i");
    static BFu0c_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu9i(Test_BFu0c_BFu8i_BFu9i, "BFu0c_BFu8i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu8i_BFu9ll) C1{ Fc:0 Fi:8 FL:9}



static void Test_BFu0c_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu9ll");
    static BFu0c_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu9ll(Test_BFu0c_BFu8i_BFu9ll, "BFu0c_BFu8i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_BFu9s  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu8i_BFu9s) C1{ Fc:0 Fi:8 Fs:9}



static void Test_BFu0c_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu8i_BFu9s");
    static BFu0c_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_BFu9s(Test_BFu0c_BFu8i_BFu9s, "BFu0c_BFu8i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_C  {
  unsigned char  :0;
  unsigned int v1:8;
  char v2;
};
//SIG(1 BFu0c_BFu8i_C) C1{ Fc:0 Fi:8 Fc}



static void Test_BFu0c_BFu8i_C()
{
  {
    init_simple_test("BFu0c_BFu8i_C");
    static BFu0c_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_C(Test_BFu0c_BFu8i_C, "BFu0c_BFu8i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_D  {
  unsigned char  :0;
  unsigned int v1:8;
  double v2;
};
//SIG(1 BFu0c_BFu8i_D) C1{ Fc:0 Fi:8 FL}



static void Test_BFu0c_BFu8i_D()
{
  {
    init_simple_test("BFu0c_BFu8i_D");
    static BFu0c_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_D(Test_BFu0c_BFu8i_D, "BFu0c_BFu8i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_F  {
  unsigned char  :0;
  unsigned int v1:8;
  float v2;
};
//SIG(1 BFu0c_BFu8i_F) C1{ Fc:0 Fi:8 Fi}



static void Test_BFu0c_BFu8i_F()
{
  {
    init_simple_test("BFu0c_BFu8i_F");
    static BFu0c_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_F(Test_BFu0c_BFu8i_F, "BFu0c_BFu8i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_I  {
  unsigned char  :0;
  unsigned int v1:8;
  int v2;
};
//SIG(1 BFu0c_BFu8i_I) C1{ Fc:0 Fi:8 Fi}



static void Test_BFu0c_BFu8i_I()
{
  {
    init_simple_test("BFu0c_BFu8i_I");
    static BFu0c_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_I(Test_BFu0c_BFu8i_I, "BFu0c_BFu8i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Ip  {
  unsigned char  :0;
  unsigned int v1:8;
  int *v2;
};
//SIG(1 BFu0c_BFu8i_Ip) C1{ Fc:0 Fi:8 Fp}



static void Test_BFu0c_BFu8i_Ip()
{
  {
    init_simple_test("BFu0c_BFu8i_Ip");
    static BFu0c_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Ip(Test_BFu0c_BFu8i_Ip, "BFu0c_BFu8i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_L  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu8i_L) C1{ Fc:0 Fi:8 FL}



static void Test_BFu0c_BFu8i_L()
{
  {
    init_simple_test("BFu0c_BFu8i_L");
    static BFu0c_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_L(Test_BFu0c_BFu8i_L, "BFu0c_BFu8i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_S  {
  unsigned char  :0;
  unsigned int v1:8;
  short v2;
};
//SIG(1 BFu0c_BFu8i_S) C1{ Fc:0 Fi:8 Fs}



static void Test_BFu0c_BFu8i_S()
{
  {
    init_simple_test("BFu0c_BFu8i_S");
    static BFu0c_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_S(Test_BFu0c_BFu8i_S, "BFu0c_BFu8i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Uc  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu8i_Uc) C1{ Fc:0 Fi:8 Fc}



static void Test_BFu0c_BFu8i_Uc()
{
  {
    init_simple_test("BFu0c_BFu8i_Uc");
    static BFu0c_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Uc(Test_BFu0c_BFu8i_Uc, "BFu0c_BFu8i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Ui  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu8i_Ui) C1{ Fc:0 Fi:8 Fi}



static void Test_BFu0c_BFu8i_Ui()
{
  {
    init_simple_test("BFu0c_BFu8i_Ui");
    static BFu0c_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Ui(Test_BFu0c_BFu8i_Ui, "BFu0c_BFu8i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Ul  {
  unsigned char  :0;
  unsigned int v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu8i_Ul) C1{ Fc:0 Fi:8 FL}



static void Test_BFu0c_BFu8i_Ul()
{
  {
    init_simple_test("BFu0c_BFu8i_Ul");
    static BFu0c_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Ul(Test_BFu0c_BFu8i_Ul, "BFu0c_BFu8i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Us  {
  unsigned char  :0;
  unsigned int v1:8;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu8i_Us) C1{ Fc:0 Fi:8 Fs}



static void Test_BFu0c_BFu8i_Us()
{
  {
    init_simple_test("BFu0c_BFu8i_Us");
    static BFu0c_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Us(Test_BFu0c_BFu8i_Us, "BFu0c_BFu8i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8i_Vp  {
  unsigned char  :0;
  unsigned int v1:8;
  void *v2;
};
//SIG(1 BFu0c_BFu8i_Vp) C1{ Fc:0 Fi:8 Fp}



static void Test_BFu0c_BFu8i_Vp()
{
  {
    init_simple_test("BFu0c_BFu8i_Vp");
    static BFu0c_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8i_Vp(Test_BFu0c_BFu8i_Vp, "BFu0c_BFu8i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0c_BFu8ll) C1{ Fc:0 FL:8}



static void Test_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu8ll");
    static BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll(Test_BFu0c_BFu8ll, "BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu8ll_BFu0c) C1{ Fc:0 FL:8 Fc:0}



static void Test_BFu0c_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu0c");
    static BFu0c_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu0c(Test_BFu0c_BFu8ll_BFu0c, "BFu0c_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu8ll_BFu0i) C1{ Fc:0 FL:8 Fi:0}



static void Test_BFu0c_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu0i");
    static BFu0c_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu0i(Test_BFu0c_BFu8ll_BFu0i, "BFu0c_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu8ll_BFu0ll) C1{ Fc:0 FL:8 FL:0}



static void Test_BFu0c_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu0ll");
    static BFu0c_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu0ll(Test_BFu0c_BFu8ll_BFu0ll, "BFu0c_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu8ll_BFu0s) C1{ Fc:0 FL:8 Fs:0}



static void Test_BFu0c_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu0s");
    static BFu0c_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu0s(Test_BFu0c_BFu8ll_BFu0s, "BFu0c_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu8ll_BFu15i) C1{ Fc:0 FL:8 Fi:15}



static void Test_BFu0c_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu15i");
    static BFu0c_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu15i(Test_BFu0c_BFu8ll_BFu15i, "BFu0c_BFu8ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu8ll_BFu15ll) C1{ Fc:0 FL:8 FL:15}



static void Test_BFu0c_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu15ll");
    static BFu0c_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu15ll(Test_BFu0c_BFu8ll_BFu15ll, "BFu0c_BFu8ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu8ll_BFu15s) C1{ Fc:0 FL:8 Fs:15}



static void Test_BFu0c_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu15s");
    static BFu0c_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu15s(Test_BFu0c_BFu8ll_BFu15s, "BFu0c_BFu8ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu8ll_BFu16i) C1{ Fc:0 FL:8 Fi:16}



static void Test_BFu0c_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu16i");
    static BFu0c_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu16i(Test_BFu0c_BFu8ll_BFu16i, "BFu0c_BFu8ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu8ll_BFu16ll) C1{ Fc:0 FL:8 FL:16}



static void Test_BFu0c_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu16ll");
    static BFu0c_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu16ll(Test_BFu0c_BFu8ll_BFu16ll, "BFu0c_BFu8ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu8ll_BFu16s) C1{ Fc:0 FL:8 Fs:16}



static void Test_BFu0c_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu16s");
    static BFu0c_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu16s(Test_BFu0c_BFu8ll_BFu16s, "BFu0c_BFu8ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu8ll_BFu17i) C1{ Fc:0 FL:8 Fi:17}



static void Test_BFu0c_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu17i");
    static BFu0c_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu17i(Test_BFu0c_BFu8ll_BFu17i, "BFu0c_BFu8ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu8ll_BFu17ll) C1{ Fc:0 FL:8 FL:17}



static void Test_BFu0c_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu17ll");
    static BFu0c_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu17ll(Test_BFu0c_BFu8ll_BFu17ll, "BFu0c_BFu8ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu8ll_BFu1c) C1{ Fc:0 FL:8 Fc:1}



static void Test_BFu0c_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu1c");
    static BFu0c_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu1c(Test_BFu0c_BFu8ll_BFu1c, "BFu0c_BFu8ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu8ll_BFu1i) C1{ Fc:0 FL:8 Fi:1}



static void Test_BFu0c_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu1i");
    static BFu0c_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu1i(Test_BFu0c_BFu8ll_BFu1i, "BFu0c_BFu8ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu8ll_BFu1ll) C1{ Fc:0 FL:8 FL:1}



static void Test_BFu0c_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu1ll");
    static BFu0c_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu1ll(Test_BFu0c_BFu8ll_BFu1ll, "BFu0c_BFu8ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu8ll_BFu1s) C1{ Fc:0 FL:8 Fs:1}



static void Test_BFu0c_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu1s");
    static BFu0c_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu1s(Test_BFu0c_BFu8ll_BFu1s, "BFu0c_BFu8ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu8ll_BFu31i) C1{ Fc:0 FL:8 Fi:31}



static void Test_BFu0c_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu31i");
    static BFu0c_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu31i(Test_BFu0c_BFu8ll_BFu31i, "BFu0c_BFu8ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu8ll_BFu31ll) C1{ Fc:0 FL:8 FL:31}



static void Test_BFu0c_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu31ll");
    static BFu0c_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu31ll(Test_BFu0c_BFu8ll_BFu31ll, "BFu0c_BFu8ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu8ll_BFu32i) C1{ Fc:0 FL:8 Fi:32}



static void Test_BFu0c_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu32i");
    static BFu0c_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu32i(Test_BFu0c_BFu8ll_BFu32i, "BFu0c_BFu8ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu8ll_BFu32ll) C1{ Fc:0 FL:8 FL:32}



static void Test_BFu0c_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu32ll");
    static BFu0c_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu32ll(Test_BFu0c_BFu8ll_BFu32ll, "BFu0c_BFu8ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu8ll_BFu33) C1{ Fc:0 FL:8 FL:33}



static void Test_BFu0c_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu33");
    static BFu0c_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu8ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu33(Test_BFu0c_BFu8ll_BFu33, "BFu0c_BFu8ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu8ll_BFu7c) C1{ Fc:0 FL:8 Fc:7}



static void Test_BFu0c_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu7c");
    static BFu0c_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu7c(Test_BFu0c_BFu8ll_BFu7c, "BFu0c_BFu8ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu8ll_BFu7i) C1{ Fc:0 FL:8 Fi:7}



static void Test_BFu0c_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu7i");
    static BFu0c_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu7i(Test_BFu0c_BFu8ll_BFu7i, "BFu0c_BFu8ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu8ll_BFu7ll) C1{ Fc:0 FL:8 FL:7}



static void Test_BFu0c_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu7ll");
    static BFu0c_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu7ll(Test_BFu0c_BFu8ll_BFu7ll, "BFu0c_BFu8ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu8ll_BFu7s) C1{ Fc:0 FL:8 Fs:7}



static void Test_BFu0c_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu7s");
    static BFu0c_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu7s(Test_BFu0c_BFu8ll_BFu7s, "BFu0c_BFu8ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu8ll_BFu8c) C1{ Fc:0 FL:8 Fc:8}



static void Test_BFu0c_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu8c");
    static BFu0c_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu8c(Test_BFu0c_BFu8ll_BFu8c, "BFu0c_BFu8ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu8ll_BFu8i) C1{ Fc:0 FL:8 Fi:8}



static void Test_BFu0c_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu8i");
    static BFu0c_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu8i(Test_BFu0c_BFu8ll_BFu8i, "BFu0c_BFu8ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu8ll_BFu8ll) C1{ Fc:0 FL:8 FL:8}



static void Test_BFu0c_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu8ll");
    static BFu0c_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu8ll(Test_BFu0c_BFu8ll_BFu8ll, "BFu0c_BFu8ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu8ll_BFu8s) C1{ Fc:0 FL:8 Fs:8}



static void Test_BFu0c_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu8s");
    static BFu0c_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu8s(Test_BFu0c_BFu8ll_BFu8s, "BFu0c_BFu8ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu8ll_BFu9i) C1{ Fc:0 FL:8 Fi:9}



static void Test_BFu0c_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu9i");
    static BFu0c_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu9i(Test_BFu0c_BFu8ll_BFu9i, "BFu0c_BFu8ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu8ll_BFu9ll) C1{ Fc:0 FL:8 FL:9}



static void Test_BFu0c_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu9ll");
    static BFu0c_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu9ll(Test_BFu0c_BFu8ll_BFu9ll, "BFu0c_BFu8ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu8ll_BFu9s) C1{ Fc:0 FL:8 Fs:9}



static void Test_BFu0c_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu8ll_BFu9s");
    static BFu0c_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_BFu9s(Test_BFu0c_BFu8ll_BFu9s, "BFu0c_BFu8ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_C  {
  unsigned char  :0;
  __tsu64 v1:8;
  char v2;
};
//SIG(1 BFu0c_BFu8ll_C) C1{ Fc:0 FL:8 Fc}



static void Test_BFu0c_BFu8ll_C()
{
  {
    init_simple_test("BFu0c_BFu8ll_C");
    static BFu0c_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_C(Test_BFu0c_BFu8ll_C, "BFu0c_BFu8ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_D  {
  unsigned char  :0;
  __tsu64 v1:8;
  double v2;
};
//SIG(1 BFu0c_BFu8ll_D) C1{ Fc:0 FL:8 FL}



static void Test_BFu0c_BFu8ll_D()
{
  {
    init_simple_test("BFu0c_BFu8ll_D");
    static BFu0c_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_D(Test_BFu0c_BFu8ll_D, "BFu0c_BFu8ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_F  {
  unsigned char  :0;
  __tsu64 v1:8;
  float v2;
};
//SIG(1 BFu0c_BFu8ll_F) C1{ Fc:0 FL:8 Fi}



static void Test_BFu0c_BFu8ll_F()
{
  {
    init_simple_test("BFu0c_BFu8ll_F");
    static BFu0c_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_F(Test_BFu0c_BFu8ll_F, "BFu0c_BFu8ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_I  {
  unsigned char  :0;
  __tsu64 v1:8;
  int v2;
};
//SIG(1 BFu0c_BFu8ll_I) C1{ Fc:0 FL:8 Fi}



static void Test_BFu0c_BFu8ll_I()
{
  {
    init_simple_test("BFu0c_BFu8ll_I");
    static BFu0c_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_I(Test_BFu0c_BFu8ll_I, "BFu0c_BFu8ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Ip  {
  unsigned char  :0;
  __tsu64 v1:8;
  int *v2;
};
//SIG(1 BFu0c_BFu8ll_Ip) C1{ Fc:0 FL:8 Fp}



static void Test_BFu0c_BFu8ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu8ll_Ip");
    static BFu0c_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Ip(Test_BFu0c_BFu8ll_Ip, "BFu0c_BFu8ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_L  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu8ll_L) C1{ Fc:0 FL:8 FL}



static void Test_BFu0c_BFu8ll_L()
{
  {
    init_simple_test("BFu0c_BFu8ll_L");
    static BFu0c_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_L(Test_BFu0c_BFu8ll_L, "BFu0c_BFu8ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_S  {
  unsigned char  :0;
  __tsu64 v1:8;
  short v2;
};
//SIG(1 BFu0c_BFu8ll_S) C1{ Fc:0 FL:8 Fs}



static void Test_BFu0c_BFu8ll_S()
{
  {
    init_simple_test("BFu0c_BFu8ll_S");
    static BFu0c_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_S(Test_BFu0c_BFu8ll_S, "BFu0c_BFu8ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu8ll_Uc) C1{ Fc:0 FL:8 Fc}



static void Test_BFu0c_BFu8ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu8ll_Uc");
    static BFu0c_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Uc(Test_BFu0c_BFu8ll_Uc, "BFu0c_BFu8ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu8ll_Ui) C1{ Fc:0 FL:8 Fi}



static void Test_BFu0c_BFu8ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu8ll_Ui");
    static BFu0c_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Ui(Test_BFu0c_BFu8ll_Ui, "BFu0c_BFu8ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu8ll_Ul) C1{ Fc:0 FL:8 FL}



static void Test_BFu0c_BFu8ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu8ll_Ul");
    static BFu0c_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Ul(Test_BFu0c_BFu8ll_Ul, "BFu0c_BFu8ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Us  {
  unsigned char  :0;
  __tsu64 v1:8;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu8ll_Us) C1{ Fc:0 FL:8 Fs}



static void Test_BFu0c_BFu8ll_Us()
{
  {
    init_simple_test("BFu0c_BFu8ll_Us");
    static BFu0c_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Us(Test_BFu0c_BFu8ll_Us, "BFu0c_BFu8ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:8;
  void *v2;
};
//SIG(1 BFu0c_BFu8ll_Vp) C1{ Fc:0 FL:8 Fp}



static void Test_BFu0c_BFu8ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu8ll_Vp");
    static BFu0c_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8ll_Vp(Test_BFu0c_BFu8ll_Vp, "BFu0c_BFu8ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s  {
  unsigned char  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0c_BFu8s) C1{ Fc:0 Fs:8}



static void Test_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu8s");
    static BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s(Test_BFu0c_BFu8s, "BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu0c  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu8s_BFu0c) C1{ Fc:0 Fs:8 Fc:0}



static void Test_BFu0c_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu0c");
    static BFu0c_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu0c(Test_BFu0c_BFu8s_BFu0c, "BFu0c_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu0i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu8s_BFu0i) C1{ Fc:0 Fs:8 Fi:0}



static void Test_BFu0c_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu0i");
    static BFu0c_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu0i(Test_BFu0c_BFu8s_BFu0i, "BFu0c_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu0ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu8s_BFu0ll) C1{ Fc:0 Fs:8 FL:0}



static void Test_BFu0c_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu0ll");
    static BFu0c_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu0ll(Test_BFu0c_BFu8s_BFu0ll, "BFu0c_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu0s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu8s_BFu0s) C1{ Fc:0 Fs:8 Fs:0}



static void Test_BFu0c_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu0s");
    static BFu0c_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu0s(Test_BFu0c_BFu8s_BFu0s, "BFu0c_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu15i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu8s_BFu15i) C1{ Fc:0 Fs:8 Fi:15}



static void Test_BFu0c_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu15i");
    static BFu0c_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu15i(Test_BFu0c_BFu8s_BFu15i, "BFu0c_BFu8s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu15ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu8s_BFu15ll) C1{ Fc:0 Fs:8 FL:15}



static void Test_BFu0c_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu15ll");
    static BFu0c_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu15ll(Test_BFu0c_BFu8s_BFu15ll, "BFu0c_BFu8s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu15s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu8s_BFu15s) C1{ Fc:0 Fs:8 Fs:15}



static void Test_BFu0c_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu15s");
    static BFu0c_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu8s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu15s(Test_BFu0c_BFu8s_BFu15s, "BFu0c_BFu8s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu16i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu8s_BFu16i) C1{ Fc:0 Fs:8 Fi:16}



static void Test_BFu0c_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu16i");
    static BFu0c_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu16i(Test_BFu0c_BFu8s_BFu16i, "BFu0c_BFu8s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu16ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu8s_BFu16ll) C1{ Fc:0 Fs:8 FL:16}



static void Test_BFu0c_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu16ll");
    static BFu0c_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu16ll(Test_BFu0c_BFu8s_BFu16ll, "BFu0c_BFu8s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu16s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu8s_BFu16s) C1{ Fc:0 Fs:8 Fs:16}



static void Test_BFu0c_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu16s");
    static BFu0c_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu8s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu16s(Test_BFu0c_BFu8s_BFu16s, "BFu0c_BFu8s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu17i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu8s_BFu17i) C1{ Fc:0 Fs:8 Fi:17}



static void Test_BFu0c_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu17i");
    static BFu0c_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu17i(Test_BFu0c_BFu8s_BFu17i, "BFu0c_BFu8s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu17ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu8s_BFu17ll) C1{ Fc:0 Fs:8 FL:17}



static void Test_BFu0c_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu17ll");
    static BFu0c_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_BFu8s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu17ll(Test_BFu0c_BFu8s_BFu17ll, "BFu0c_BFu8s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu1c  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu8s_BFu1c) C1{ Fc:0 Fs:8 Fc:1}



static void Test_BFu0c_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu1c");
    static BFu0c_BFu8s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu1c(Test_BFu0c_BFu8s_BFu1c, "BFu0c_BFu8s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu1i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu8s_BFu1i) C1{ Fc:0 Fs:8 Fi:1}



static void Test_BFu0c_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu1i");
    static BFu0c_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu1i(Test_BFu0c_BFu8s_BFu1i, "BFu0c_BFu8s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu1ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu8s_BFu1ll) C1{ Fc:0 Fs:8 FL:1}



static void Test_BFu0c_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu1ll");
    static BFu0c_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu1ll(Test_BFu0c_BFu8s_BFu1ll, "BFu0c_BFu8s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu1s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu8s_BFu1s) C1{ Fc:0 Fs:8 Fs:1}



static void Test_BFu0c_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu1s");
    static BFu0c_BFu8s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_BFu8s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu1s(Test_BFu0c_BFu8s_BFu1s, "BFu0c_BFu8s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu31i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu8s_BFu31i) C1{ Fc:0 Fs:8 Fi:31}



static void Test_BFu0c_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu31i");
    static BFu0c_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu31i(Test_BFu0c_BFu8s_BFu31i, "BFu0c_BFu8s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu31ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu8s_BFu31ll) C1{ Fc:0 Fs:8 FL:31}



static void Test_BFu0c_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu31ll");
    static BFu0c_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu8s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu31ll(Test_BFu0c_BFu8s_BFu31ll, "BFu0c_BFu8s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu32i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu8s_BFu32i) C1{ Fc:0 Fs:8 Fi:32}



static void Test_BFu0c_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu32i");
    static BFu0c_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu32i(Test_BFu0c_BFu8s_BFu32i, "BFu0c_BFu8s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu32ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu8s_BFu32ll) C1{ Fc:0 Fs:8 FL:32}



static void Test_BFu0c_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu32ll");
    static BFu0c_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu8s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu32ll(Test_BFu0c_BFu8s_BFu32ll, "BFu0c_BFu8s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu33  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu8s_BFu33) C1{ Fc:0 Fs:8 FL:33}



static void Test_BFu0c_BFu8s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu33");
    static BFu0c_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_BFu8s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu33(Test_BFu0c_BFu8s_BFu33, "BFu0c_BFu8s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu8s_BFu7c) C1{ Fc:0 Fs:8 Fc:7}



static void Test_BFu0c_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu7c");
    static BFu0c_BFu8s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu7c(Test_BFu0c_BFu8s_BFu7c, "BFu0c_BFu8s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu7i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu8s_BFu7i) C1{ Fc:0 Fs:8 Fi:7}



static void Test_BFu0c_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu7i");
    static BFu0c_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu7i(Test_BFu0c_BFu8s_BFu7i, "BFu0c_BFu8s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu7ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu8s_BFu7ll) C1{ Fc:0 Fs:8 FL:7}



static void Test_BFu0c_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu7ll");
    static BFu0c_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu7ll(Test_BFu0c_BFu8s_BFu7ll, "BFu0c_BFu8s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu8s_BFu7s) C1{ Fc:0 Fs:8 Fs:7}



static void Test_BFu0c_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu7s");
    static BFu0c_BFu8s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_BFu8s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu7s(Test_BFu0c_BFu8s_BFu7s, "BFu0c_BFu8s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu8s_BFu8c) C1{ Fc:0 Fs:8 Fc:8}



static void Test_BFu0c_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu8c");
    static BFu0c_BFu8s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu8c(Test_BFu0c_BFu8s_BFu8c, "BFu0c_BFu8s_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu8i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu8s_BFu8i) C1{ Fc:0 Fs:8 Fi:8}



static void Test_BFu0c_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu8i");
    static BFu0c_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu8i(Test_BFu0c_BFu8s_BFu8i, "BFu0c_BFu8s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu8ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu8s_BFu8ll) C1{ Fc:0 Fs:8 FL:8}



static void Test_BFu0c_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu8ll");
    static BFu0c_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu8ll(Test_BFu0c_BFu8s_BFu8ll, "BFu0c_BFu8s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu8s_BFu8s) C1{ Fc:0 Fs:8 Fs:8}



static void Test_BFu0c_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu8s");
    static BFu0c_BFu8s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu8s(Test_BFu0c_BFu8s_BFu8s, "BFu0c_BFu8s_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu9i  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu8s_BFu9i) C1{ Fc:0 Fs:8 Fi:9}



static void Test_BFu0c_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu9i");
    static BFu0c_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu9i(Test_BFu0c_BFu8s_BFu9i, "BFu0c_BFu8s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu9ll  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu8s_BFu9ll) C1{ Fc:0 Fs:8 FL:9}



static void Test_BFu0c_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu9ll");
    static BFu0c_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu9ll(Test_BFu0c_BFu8s_BFu9ll, "BFu0c_BFu8s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu8s_BFu9s) C1{ Fc:0 Fs:8 Fs:9}



static void Test_BFu0c_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu8s_BFu9s");
    static BFu0c_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu8s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_BFu9s(Test_BFu0c_BFu8s_BFu9s, "BFu0c_BFu8s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_C  {
  unsigned char  :0;
  unsigned short v1:8;
  char v2;
};
//SIG(1 BFu0c_BFu8s_C) C1{ Fc:0 Fs:8 Fc}



static void Test_BFu0c_BFu8s_C()
{
  {
    init_simple_test("BFu0c_BFu8s_C");
    static BFu0c_BFu8s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_C");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_C(Test_BFu0c_BFu8s_C, "BFu0c_BFu8s_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_D  {
  unsigned char  :0;
  unsigned short v1:8;
  double v2;
};
//SIG(1 BFu0c_BFu8s_D) C1{ Fc:0 Fs:8 FL}



static void Test_BFu0c_BFu8s_D()
{
  {
    init_simple_test("BFu0c_BFu8s_D");
    static BFu0c_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_D(Test_BFu0c_BFu8s_D, "BFu0c_BFu8s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_F  {
  unsigned char  :0;
  unsigned short v1:8;
  float v2;
};
//SIG(1 BFu0c_BFu8s_F) C1{ Fc:0 Fs:8 Fi}



static void Test_BFu0c_BFu8s_F()
{
  {
    init_simple_test("BFu0c_BFu8s_F");
    static BFu0c_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_F(Test_BFu0c_BFu8s_F, "BFu0c_BFu8s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_I  {
  unsigned char  :0;
  unsigned short v1:8;
  int v2;
};
//SIG(1 BFu0c_BFu8s_I) C1{ Fc:0 Fs:8 Fi}



static void Test_BFu0c_BFu8s_I()
{
  {
    init_simple_test("BFu0c_BFu8s_I");
    static BFu0c_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_I(Test_BFu0c_BFu8s_I, "BFu0c_BFu8s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Ip  {
  unsigned char  :0;
  unsigned short v1:8;
  int *v2;
};
//SIG(1 BFu0c_BFu8s_Ip) C1{ Fc:0 Fs:8 Fp}



static void Test_BFu0c_BFu8s_Ip()
{
  {
    init_simple_test("BFu0c_BFu8s_Ip");
    static BFu0c_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Ip(Test_BFu0c_BFu8s_Ip, "BFu0c_BFu8s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_L  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu8s_L) C1{ Fc:0 Fs:8 FL}



static void Test_BFu0c_BFu8s_L()
{
  {
    init_simple_test("BFu0c_BFu8s_L");
    static BFu0c_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_L(Test_BFu0c_BFu8s_L, "BFu0c_BFu8s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_S  {
  unsigned char  :0;
  unsigned short v1:8;
  short v2;
};
//SIG(1 BFu0c_BFu8s_S) C1{ Fc:0 Fs:8 Fs}



static void Test_BFu0c_BFu8s_S()
{
  {
    init_simple_test("BFu0c_BFu8s_S");
    static BFu0c_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_S(Test_BFu0c_BFu8s_S, "BFu0c_BFu8s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Uc  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu8s_Uc) C1{ Fc:0 Fs:8 Fc}



static void Test_BFu0c_BFu8s_Uc()
{
  {
    init_simple_test("BFu0c_BFu8s_Uc");
    static BFu0c_BFu8s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Uc");
    check_field_offset(lv, v2, 1, "BFu0c_BFu8s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Uc(Test_BFu0c_BFu8s_Uc, "BFu0c_BFu8s_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Ui  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu8s_Ui) C1{ Fc:0 Fs:8 Fi}



static void Test_BFu0c_BFu8s_Ui()
{
  {
    init_simple_test("BFu0c_BFu8s_Ui");
    static BFu0c_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu8s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Ui(Test_BFu0c_BFu8s_Ui, "BFu0c_BFu8s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Ul  {
  unsigned char  :0;
  unsigned short v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu8s_Ul) C1{ Fc:0 Fs:8 FL}



static void Test_BFu0c_BFu8s_Ul()
{
  {
    init_simple_test("BFu0c_BFu8s_Ul");
    static BFu0c_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Ul(Test_BFu0c_BFu8s_Ul, "BFu0c_BFu8s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Us  {
  unsigned char  :0;
  unsigned short v1:8;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu8s_Us) C1{ Fc:0 Fs:8 Fs}



static void Test_BFu0c_BFu8s_Us()
{
  {
    init_simple_test("BFu0c_BFu8s_Us");
    static BFu0c_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu8s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Us(Test_BFu0c_BFu8s_Us, "BFu0c_BFu8s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu8s_Vp  {
  unsigned char  :0;
  unsigned short v1:8;
  void *v2;
};
//SIG(1 BFu0c_BFu8s_Vp) C1{ Fc:0 Fs:8 Fp}



static void Test_BFu0c_BFu8s_Vp()
{
  {
    init_simple_test("BFu0c_BFu8s_Vp");
    static BFu0c_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0c_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu8s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu8s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu8s_Vp(Test_BFu0c_BFu8s_Vp, "BFu0c_BFu8s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i  {
  unsigned char  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0c_BFu9i) C1{ Fc:0 Fi:9}



static void Test_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu9i");
    static BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i(Test_BFu0c_BFu9i, "BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu0c  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu9i_BFu0c) C1{ Fc:0 Fi:9 Fc:0}



static void Test_BFu0c_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu0c");
    static BFu0c_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu0c(Test_BFu0c_BFu9i_BFu0c, "BFu0c_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu0i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu9i_BFu0i) C1{ Fc:0 Fi:9 Fi:0}



static void Test_BFu0c_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu0i");
    static BFu0c_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu0i(Test_BFu0c_BFu9i_BFu0i, "BFu0c_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu0ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu9i_BFu0ll) C1{ Fc:0 Fi:9 FL:0}



static void Test_BFu0c_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu0ll");
    static BFu0c_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu0ll(Test_BFu0c_BFu9i_BFu0ll, "BFu0c_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu0s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu9i_BFu0s) C1{ Fc:0 Fi:9 Fs:0}



static void Test_BFu0c_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu0s");
    static BFu0c_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu0s(Test_BFu0c_BFu9i_BFu0s, "BFu0c_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu15i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu9i_BFu15i) C1{ Fc:0 Fi:9 Fi:15}



static void Test_BFu0c_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu15i");
    static BFu0c_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu15i(Test_BFu0c_BFu9i_BFu15i, "BFu0c_BFu9i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu15ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu9i_BFu15ll) C1{ Fc:0 Fi:9 FL:15}



static void Test_BFu0c_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu15ll");
    static BFu0c_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu15ll(Test_BFu0c_BFu9i_BFu15ll, "BFu0c_BFu9i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu15s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu9i_BFu15s) C1{ Fc:0 Fi:9 Fs:15}



static void Test_BFu0c_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu15s");
    static BFu0c_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu9i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu15s(Test_BFu0c_BFu9i_BFu15s, "BFu0c_BFu9i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu16i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu9i_BFu16i) C1{ Fc:0 Fi:9 Fi:16}



static void Test_BFu0c_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu16i");
    static BFu0c_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu16i(Test_BFu0c_BFu9i_BFu16i, "BFu0c_BFu9i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu16ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu9i_BFu16ll) C1{ Fc:0 Fi:9 FL:16}



static void Test_BFu0c_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu16ll");
    static BFu0c_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu16ll(Test_BFu0c_BFu9i_BFu16ll, "BFu0c_BFu9i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu16s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu9i_BFu16s) C1{ Fc:0 Fi:9 Fs:16}



static void Test_BFu0c_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu16s");
    static BFu0c_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu9i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu16s(Test_BFu0c_BFu9i_BFu16s, "BFu0c_BFu9i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu17i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu9i_BFu17i) C1{ Fc:0 Fi:9 Fi:17}



static void Test_BFu0c_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu17i");
    static BFu0c_BFu9i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu17i(Test_BFu0c_BFu9i_BFu17i, "BFu0c_BFu9i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu17ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu9i_BFu17ll) C1{ Fc:0 Fi:9 FL:17}



static void Test_BFu0c_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu17ll");
    static BFu0c_BFu9i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu17ll(Test_BFu0c_BFu9i_BFu17ll, "BFu0c_BFu9i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu1c  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu9i_BFu1c) C1{ Fc:0 Fi:9 Fc:1}



static void Test_BFu0c_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu1c");
    static BFu0c_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu1c(Test_BFu0c_BFu9i_BFu1c, "BFu0c_BFu9i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu1i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu9i_BFu1i) C1{ Fc:0 Fi:9 Fi:1}



static void Test_BFu0c_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu1i");
    static BFu0c_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu1i(Test_BFu0c_BFu9i_BFu1i, "BFu0c_BFu9i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu1ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu9i_BFu1ll) C1{ Fc:0 Fi:9 FL:1}



static void Test_BFu0c_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu1ll");
    static BFu0c_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu1ll(Test_BFu0c_BFu9i_BFu1ll, "BFu0c_BFu9i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu1s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu9i_BFu1s) C1{ Fc:0 Fi:9 Fs:1}



static void Test_BFu0c_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu1s");
    static BFu0c_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu1s(Test_BFu0c_BFu9i_BFu1s, "BFu0c_BFu9i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu31i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu9i_BFu31i) C1{ Fc:0 Fi:9 Fi:31}



static void Test_BFu0c_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu31i");
    static BFu0c_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu9i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu31i(Test_BFu0c_BFu9i_BFu31i, "BFu0c_BFu9i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu31ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu9i_BFu31ll) C1{ Fc:0 Fi:9 FL:31}



static void Test_BFu0c_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu31ll");
    static BFu0c_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu9i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu31ll(Test_BFu0c_BFu9i_BFu31ll, "BFu0c_BFu9i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu32i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu9i_BFu32i) C1{ Fc:0 Fi:9 Fi:32}



static void Test_BFu0c_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu32i");
    static BFu0c_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu9i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu32i(Test_BFu0c_BFu9i_BFu32i, "BFu0c_BFu9i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu32ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu9i_BFu32ll) C1{ Fc:0 Fi:9 FL:32}



static void Test_BFu0c_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu32ll");
    static BFu0c_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu9i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu32ll(Test_BFu0c_BFu9i_BFu32ll, "BFu0c_BFu9i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu33  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu9i_BFu33) C1{ Fc:0 Fi:9 FL:33}



static void Test_BFu0c_BFu9i_BFu33()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu33");
    static BFu0c_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0c_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu9i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu33(Test_BFu0c_BFu9i_BFu33, "BFu0c_BFu9i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu7c  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu9i_BFu7c) C1{ Fc:0 Fi:9 Fc:7}



static void Test_BFu0c_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu7c");
    static BFu0c_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu7c(Test_BFu0c_BFu9i_BFu7c, "BFu0c_BFu9i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu7i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu9i_BFu7i) C1{ Fc:0 Fi:9 Fi:7}



static void Test_BFu0c_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu7i");
    static BFu0c_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu7i(Test_BFu0c_BFu9i_BFu7i, "BFu0c_BFu9i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu7ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu9i_BFu7ll) C1{ Fc:0 Fi:9 FL:7}



static void Test_BFu0c_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu7ll");
    static BFu0c_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu7ll(Test_BFu0c_BFu9i_BFu7ll, "BFu0c_BFu9i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu7s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu9i_BFu7s) C1{ Fc:0 Fi:9 Fs:7}



static void Test_BFu0c_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu7s");
    static BFu0c_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu7s(Test_BFu0c_BFu9i_BFu7s, "BFu0c_BFu9i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu8c  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu9i_BFu8c) C1{ Fc:0 Fi:9 Fc:8}



static void Test_BFu0c_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu8c");
    static BFu0c_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu8c(Test_BFu0c_BFu9i_BFu8c, "BFu0c_BFu9i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu8i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu9i_BFu8i) C1{ Fc:0 Fi:9 Fi:8}



static void Test_BFu0c_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu8i");
    static BFu0c_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu8i(Test_BFu0c_BFu9i_BFu8i, "BFu0c_BFu9i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu8ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu9i_BFu8ll) C1{ Fc:0 Fi:9 FL:8}



static void Test_BFu0c_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu8ll");
    static BFu0c_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu8ll(Test_BFu0c_BFu9i_BFu8ll, "BFu0c_BFu9i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu8s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu9i_BFu8s) C1{ Fc:0 Fi:9 Fs:8}



static void Test_BFu0c_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu8s");
    static BFu0c_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu8s(Test_BFu0c_BFu9i_BFu8s, "BFu0c_BFu9i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu9i  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu9i_BFu9i) C1{ Fc:0 Fi:9 Fi:9}



static void Test_BFu0c_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu9i");
    static BFu0c_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu9i(Test_BFu0c_BFu9i_BFu9i, "BFu0c_BFu9i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu9ll  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu9i_BFu9ll) C1{ Fc:0 Fi:9 FL:9}



static void Test_BFu0c_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu9ll");
    static BFu0c_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu9ll(Test_BFu0c_BFu9i_BFu9ll, "BFu0c_BFu9i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_BFu9s  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu9i_BFu9s) C1{ Fc:0 Fi:9 Fs:9}



static void Test_BFu0c_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu9i_BFu9s");
    static BFu0c_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_BFu9s(Test_BFu0c_BFu9i_BFu9s, "BFu0c_BFu9i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_C  {
  unsigned char  :0;
  unsigned int v1:9;
  char v2;
};
//SIG(1 BFu0c_BFu9i_C) C1{ Fc:0 Fi:9 Fc}



static void Test_BFu0c_BFu9i_C()
{
  {
    init_simple_test("BFu0c_BFu9i_C");
    static BFu0c_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_C(Test_BFu0c_BFu9i_C, "BFu0c_BFu9i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_D  {
  unsigned char  :0;
  unsigned int v1:9;
  double v2;
};
//SIG(1 BFu0c_BFu9i_D) C1{ Fc:0 Fi:9 FL}



static void Test_BFu0c_BFu9i_D()
{
  {
    init_simple_test("BFu0c_BFu9i_D");
    static BFu0c_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_D(Test_BFu0c_BFu9i_D, "BFu0c_BFu9i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_F  {
  unsigned char  :0;
  unsigned int v1:9;
  float v2;
};
//SIG(1 BFu0c_BFu9i_F) C1{ Fc:0 Fi:9 Fi}



static void Test_BFu0c_BFu9i_F()
{
  {
    init_simple_test("BFu0c_BFu9i_F");
    static BFu0c_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_F(Test_BFu0c_BFu9i_F, "BFu0c_BFu9i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_I  {
  unsigned char  :0;
  unsigned int v1:9;
  int v2;
};
//SIG(1 BFu0c_BFu9i_I) C1{ Fc:0 Fi:9 Fi}



static void Test_BFu0c_BFu9i_I()
{
  {
    init_simple_test("BFu0c_BFu9i_I");
    static BFu0c_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_I(Test_BFu0c_BFu9i_I, "BFu0c_BFu9i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Ip  {
  unsigned char  :0;
  unsigned int v1:9;
  int *v2;
};
//SIG(1 BFu0c_BFu9i_Ip) C1{ Fc:0 Fi:9 Fp}



static void Test_BFu0c_BFu9i_Ip()
{
  {
    init_simple_test("BFu0c_BFu9i_Ip");
    static BFu0c_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Ip(Test_BFu0c_BFu9i_Ip, "BFu0c_BFu9i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_L  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu9i_L) C1{ Fc:0 Fi:9 FL}



static void Test_BFu0c_BFu9i_L()
{
  {
    init_simple_test("BFu0c_BFu9i_L");
    static BFu0c_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_L(Test_BFu0c_BFu9i_L, "BFu0c_BFu9i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_S  {
  unsigned char  :0;
  unsigned int v1:9;
  short v2;
};
//SIG(1 BFu0c_BFu9i_S) C1{ Fc:0 Fi:9 Fs}



static void Test_BFu0c_BFu9i_S()
{
  {
    init_simple_test("BFu0c_BFu9i_S");
    static BFu0c_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_S(Test_BFu0c_BFu9i_S, "BFu0c_BFu9i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Uc  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu9i_Uc) C1{ Fc:0 Fi:9 Fc}



static void Test_BFu0c_BFu9i_Uc()
{
  {
    init_simple_test("BFu0c_BFu9i_Uc");
    static BFu0c_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Uc(Test_BFu0c_BFu9i_Uc, "BFu0c_BFu9i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Ui  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu9i_Ui) C1{ Fc:0 Fi:9 Fi}



static void Test_BFu0c_BFu9i_Ui()
{
  {
    init_simple_test("BFu0c_BFu9i_Ui");
    static BFu0c_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Ui(Test_BFu0c_BFu9i_Ui, "BFu0c_BFu9i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Ul  {
  unsigned char  :0;
  unsigned int v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu9i_Ul) C1{ Fc:0 Fi:9 FL}



static void Test_BFu0c_BFu9i_Ul()
{
  {
    init_simple_test("BFu0c_BFu9i_Ul");
    static BFu0c_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Ul(Test_BFu0c_BFu9i_Ul, "BFu0c_BFu9i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Us  {
  unsigned char  :0;
  unsigned int v1:9;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu9i_Us) C1{ Fc:0 Fi:9 Fs}



static void Test_BFu0c_BFu9i_Us()
{
  {
    init_simple_test("BFu0c_BFu9i_Us");
    static BFu0c_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Us(Test_BFu0c_BFu9i_Us, "BFu0c_BFu9i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9i_Vp  {
  unsigned char  :0;
  unsigned int v1:9;
  void *v2;
};
//SIG(1 BFu0c_BFu9i_Vp) C1{ Fc:0 Fi:9 Fp}



static void Test_BFu0c_BFu9i_Vp()
{
  {
    init_simple_test("BFu0c_BFu9i_Vp");
    static BFu0c_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9i_Vp(Test_BFu0c_BFu9i_Vp, "BFu0c_BFu9i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0c_BFu9ll) C1{ Fc:0 FL:9}



static void Test_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu9ll");
    static BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll(Test_BFu0c_BFu9ll, "BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu0c  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu9ll_BFu0c) C1{ Fc:0 FL:9 Fc:0}



static void Test_BFu0c_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu0c");
    static BFu0c_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu0c(Test_BFu0c_BFu9ll_BFu0c, "BFu0c_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu0i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu9ll_BFu0i) C1{ Fc:0 FL:9 Fi:0}



static void Test_BFu0c_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu0i");
    static BFu0c_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu0i(Test_BFu0c_BFu9ll_BFu0i, "BFu0c_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu9ll_BFu0ll) C1{ Fc:0 FL:9 FL:0}



static void Test_BFu0c_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu0ll");
    static BFu0c_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu0ll(Test_BFu0c_BFu9ll_BFu0ll, "BFu0c_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu0s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu9ll_BFu0s) C1{ Fc:0 FL:9 Fs:0}



static void Test_BFu0c_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu0s");
    static BFu0c_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu0s(Test_BFu0c_BFu9ll_BFu0s, "BFu0c_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu15i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu9ll_BFu15i) C1{ Fc:0 FL:9 Fi:15}



static void Test_BFu0c_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu15i");
    static BFu0c_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu15i(Test_BFu0c_BFu9ll_BFu15i, "BFu0c_BFu9ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu9ll_BFu15ll) C1{ Fc:0 FL:9 FL:15}



static void Test_BFu0c_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu15ll");
    static BFu0c_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu15ll(Test_BFu0c_BFu9ll_BFu15ll, "BFu0c_BFu9ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu15s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu9ll_BFu15s) C1{ Fc:0 FL:9 Fs:15}



static void Test_BFu0c_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu15s");
    static BFu0c_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu9ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu15s(Test_BFu0c_BFu9ll_BFu15s, "BFu0c_BFu9ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu16i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu9ll_BFu16i) C1{ Fc:0 FL:9 Fi:16}



static void Test_BFu0c_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu16i");
    static BFu0c_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu16i(Test_BFu0c_BFu9ll_BFu16i, "BFu0c_BFu9ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu9ll_BFu16ll) C1{ Fc:0 FL:9 FL:16}



static void Test_BFu0c_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu16ll");
    static BFu0c_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu16ll(Test_BFu0c_BFu9ll_BFu16ll, "BFu0c_BFu9ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu16s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu9ll_BFu16s) C1{ Fc:0 FL:9 Fs:16}



static void Test_BFu0c_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu16s");
    static BFu0c_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu9ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu16s(Test_BFu0c_BFu9ll_BFu16s, "BFu0c_BFu9ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu17i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu9ll_BFu17i) C1{ Fc:0 FL:9 Fi:17}



static void Test_BFu0c_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu17i");
    static BFu0c_BFu9ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu17i(Test_BFu0c_BFu9ll_BFu17i, "BFu0c_BFu9ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu9ll_BFu17ll) C1{ Fc:0 FL:9 FL:17}



static void Test_BFu0c_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu17ll");
    static BFu0c_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu17ll(Test_BFu0c_BFu9ll_BFu17ll, "BFu0c_BFu9ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu1c  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu9ll_BFu1c) C1{ Fc:0 FL:9 Fc:1}



static void Test_BFu0c_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu1c");
    static BFu0c_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu1c(Test_BFu0c_BFu9ll_BFu1c, "BFu0c_BFu9ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu1i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu9ll_BFu1i) C1{ Fc:0 FL:9 Fi:1}



static void Test_BFu0c_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu1i");
    static BFu0c_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu1i(Test_BFu0c_BFu9ll_BFu1i, "BFu0c_BFu9ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu9ll_BFu1ll) C1{ Fc:0 FL:9 FL:1}



static void Test_BFu0c_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu1ll");
    static BFu0c_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu1ll(Test_BFu0c_BFu9ll_BFu1ll, "BFu0c_BFu9ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu1s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu9ll_BFu1s) C1{ Fc:0 FL:9 Fs:1}



static void Test_BFu0c_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu1s");
    static BFu0c_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu1s(Test_BFu0c_BFu9ll_BFu1s, "BFu0c_BFu9ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu31i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu9ll_BFu31i) C1{ Fc:0 FL:9 Fi:31}



static void Test_BFu0c_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu31i");
    static BFu0c_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu9ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu31i(Test_BFu0c_BFu9ll_BFu31i, "BFu0c_BFu9ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu9ll_BFu31ll) C1{ Fc:0 FL:9 FL:31}



static void Test_BFu0c_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu31ll");
    static BFu0c_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu9ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu31ll(Test_BFu0c_BFu9ll_BFu31ll, "BFu0c_BFu9ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu32i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu9ll_BFu32i) C1{ Fc:0 FL:9 Fi:32}



static void Test_BFu0c_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu32i");
    static BFu0c_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu9ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu32i(Test_BFu0c_BFu9ll_BFu32i, "BFu0c_BFu9ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu9ll_BFu32ll) C1{ Fc:0 FL:9 FL:32}



static void Test_BFu0c_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu32ll");
    static BFu0c_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu9ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu32ll(Test_BFu0c_BFu9ll_BFu32ll, "BFu0c_BFu9ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu33  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu9ll_BFu33) C1{ Fc:0 FL:9 FL:33}



static void Test_BFu0c_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu33");
    static BFu0c_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0c_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu9ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu33(Test_BFu0c_BFu9ll_BFu33, "BFu0c_BFu9ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu7c  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu9ll_BFu7c) C1{ Fc:0 FL:9 Fc:7}



static void Test_BFu0c_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu7c");
    static BFu0c_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu7c(Test_BFu0c_BFu9ll_BFu7c, "BFu0c_BFu9ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu7i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu9ll_BFu7i) C1{ Fc:0 FL:9 Fi:7}



static void Test_BFu0c_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu7i");
    static BFu0c_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu7i(Test_BFu0c_BFu9ll_BFu7i, "BFu0c_BFu9ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu9ll_BFu7ll) C1{ Fc:0 FL:9 FL:7}



static void Test_BFu0c_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu7ll");
    static BFu0c_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu7ll(Test_BFu0c_BFu9ll_BFu7ll, "BFu0c_BFu9ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu7s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu9ll_BFu7s) C1{ Fc:0 FL:9 Fs:7}



static void Test_BFu0c_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu7s");
    static BFu0c_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu7s(Test_BFu0c_BFu9ll_BFu7s, "BFu0c_BFu9ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu8c  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu9ll_BFu8c) C1{ Fc:0 FL:9 Fc:8}



static void Test_BFu0c_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu8c");
    static BFu0c_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu8c(Test_BFu0c_BFu9ll_BFu8c, "BFu0c_BFu9ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu8i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu9ll_BFu8i) C1{ Fc:0 FL:9 Fi:8}



static void Test_BFu0c_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu8i");
    static BFu0c_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu8i(Test_BFu0c_BFu9ll_BFu8i, "BFu0c_BFu9ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu9ll_BFu8ll) C1{ Fc:0 FL:9 FL:8}



static void Test_BFu0c_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu8ll");
    static BFu0c_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu8ll(Test_BFu0c_BFu9ll_BFu8ll, "BFu0c_BFu9ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu8s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu9ll_BFu8s) C1{ Fc:0 FL:9 Fs:8}



static void Test_BFu0c_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu8s");
    static BFu0c_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu8s(Test_BFu0c_BFu9ll_BFu8s, "BFu0c_BFu9ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu9i  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu9ll_BFu9i) C1{ Fc:0 FL:9 Fi:9}



static void Test_BFu0c_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu9i");
    static BFu0c_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu9i(Test_BFu0c_BFu9ll_BFu9i, "BFu0c_BFu9ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu9ll_BFu9ll) C1{ Fc:0 FL:9 FL:9}



static void Test_BFu0c_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu9ll");
    static BFu0c_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu9ll(Test_BFu0c_BFu9ll_BFu9ll, "BFu0c_BFu9ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_BFu9s  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu9ll_BFu9s) C1{ Fc:0 FL:9 Fs:9}



static void Test_BFu0c_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu9ll_BFu9s");
    static BFu0c_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_BFu9s(Test_BFu0c_BFu9ll_BFu9s, "BFu0c_BFu9ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_C  {
  unsigned char  :0;
  __tsu64 v1:9;
  char v2;
};
//SIG(1 BFu0c_BFu9ll_C) C1{ Fc:0 FL:9 Fc}



static void Test_BFu0c_BFu9ll_C()
{
  {
    init_simple_test("BFu0c_BFu9ll_C");
    static BFu0c_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_C(Test_BFu0c_BFu9ll_C, "BFu0c_BFu9ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_D  {
  unsigned char  :0;
  __tsu64 v1:9;
  double v2;
};
//SIG(1 BFu0c_BFu9ll_D) C1{ Fc:0 FL:9 FL}



static void Test_BFu0c_BFu9ll_D()
{
  {
    init_simple_test("BFu0c_BFu9ll_D");
    static BFu0c_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_D(Test_BFu0c_BFu9ll_D, "BFu0c_BFu9ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_F  {
  unsigned char  :0;
  __tsu64 v1:9;
  float v2;
};
//SIG(1 BFu0c_BFu9ll_F) C1{ Fc:0 FL:9 Fi}



static void Test_BFu0c_BFu9ll_F()
{
  {
    init_simple_test("BFu0c_BFu9ll_F");
    static BFu0c_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_F(Test_BFu0c_BFu9ll_F, "BFu0c_BFu9ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_I  {
  unsigned char  :0;
  __tsu64 v1:9;
  int v2;
};
//SIG(1 BFu0c_BFu9ll_I) C1{ Fc:0 FL:9 Fi}



static void Test_BFu0c_BFu9ll_I()
{
  {
    init_simple_test("BFu0c_BFu9ll_I");
    static BFu0c_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_I(Test_BFu0c_BFu9ll_I, "BFu0c_BFu9ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Ip  {
  unsigned char  :0;
  __tsu64 v1:9;
  int *v2;
};
//SIG(1 BFu0c_BFu9ll_Ip) C1{ Fc:0 FL:9 Fp}



static void Test_BFu0c_BFu9ll_Ip()
{
  {
    init_simple_test("BFu0c_BFu9ll_Ip");
    static BFu0c_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Ip(Test_BFu0c_BFu9ll_Ip, "BFu0c_BFu9ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_L  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu9ll_L) C1{ Fc:0 FL:9 FL}



static void Test_BFu0c_BFu9ll_L()
{
  {
    init_simple_test("BFu0c_BFu9ll_L");
    static BFu0c_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_L(Test_BFu0c_BFu9ll_L, "BFu0c_BFu9ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_S  {
  unsigned char  :0;
  __tsu64 v1:9;
  short v2;
};
//SIG(1 BFu0c_BFu9ll_S) C1{ Fc:0 FL:9 Fs}



static void Test_BFu0c_BFu9ll_S()
{
  {
    init_simple_test("BFu0c_BFu9ll_S");
    static BFu0c_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_S(Test_BFu0c_BFu9ll_S, "BFu0c_BFu9ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Uc  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu9ll_Uc) C1{ Fc:0 FL:9 Fc}



static void Test_BFu0c_BFu9ll_Uc()
{
  {
    init_simple_test("BFu0c_BFu9ll_Uc");
    static BFu0c_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Uc(Test_BFu0c_BFu9ll_Uc, "BFu0c_BFu9ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Ui  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu9ll_Ui) C1{ Fc:0 FL:9 Fi}



static void Test_BFu0c_BFu9ll_Ui()
{
  {
    init_simple_test("BFu0c_BFu9ll_Ui");
    static BFu0c_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Ui(Test_BFu0c_BFu9ll_Ui, "BFu0c_BFu9ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Ul  {
  unsigned char  :0;
  __tsu64 v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu9ll_Ul) C1{ Fc:0 FL:9 FL}



static void Test_BFu0c_BFu9ll_Ul()
{
  {
    init_simple_test("BFu0c_BFu9ll_Ul");
    static BFu0c_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Ul(Test_BFu0c_BFu9ll_Ul, "BFu0c_BFu9ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Us  {
  unsigned char  :0;
  __tsu64 v1:9;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu9ll_Us) C1{ Fc:0 FL:9 Fs}



static void Test_BFu0c_BFu9ll_Us()
{
  {
    init_simple_test("BFu0c_BFu9ll_Us");
    static BFu0c_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Us(Test_BFu0c_BFu9ll_Us, "BFu0c_BFu9ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9ll_Vp  {
  unsigned char  :0;
  __tsu64 v1:9;
  void *v2;
};
//SIG(1 BFu0c_BFu9ll_Vp) C1{ Fc:0 FL:9 Fp}



static void Test_BFu0c_BFu9ll_Vp()
{
  {
    init_simple_test("BFu0c_BFu9ll_Vp");
    static BFu0c_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9ll_Vp(Test_BFu0c_BFu9ll_Vp, "BFu0c_BFu9ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s  {
  unsigned char  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0c_BFu9s) C1{ Fc:0 Fs:9}



static void Test_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu9s");
    static BFu0c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s(Test_BFu0c_BFu9s, "BFu0c_BFu9s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu0c  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0c_BFu9s_BFu0c) C1{ Fc:0 Fs:9 Fc:0}



static void Test_BFu0c_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu0c");
    static BFu0c_BFu9s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu0c(Test_BFu0c_BFu9s_BFu0c, "BFu0c_BFu9s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu0i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0c_BFu9s_BFu0i) C1{ Fc:0 Fs:9 Fi:0}



static void Test_BFu0c_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu0i");
    static BFu0c_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu0i(Test_BFu0c_BFu9s_BFu0i, "BFu0c_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu0ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0c_BFu9s_BFu0ll) C1{ Fc:0 Fs:9 FL:0}



static void Test_BFu0c_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu0ll");
    static BFu0c_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu0ll(Test_BFu0c_BFu9s_BFu0ll, "BFu0c_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu0s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0c_BFu9s_BFu0s) C1{ Fc:0 Fs:9 Fs:0}



static void Test_BFu0c_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu0s");
    static BFu0c_BFu9s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu0s(Test_BFu0c_BFu9s_BFu0s, "BFu0c_BFu9s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu15i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0c_BFu9s_BFu15i) C1{ Fc:0 Fs:9 Fi:15}



static void Test_BFu0c_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu15i");
    static BFu0c_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu15i(Test_BFu0c_BFu9s_BFu15i, "BFu0c_BFu9s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu15ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_BFu9s_BFu15ll) C1{ Fc:0 Fs:9 FL:15}



static void Test_BFu0c_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu15ll");
    static BFu0c_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0c_BFu9s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu15ll(Test_BFu0c_BFu9s_BFu15ll, "BFu0c_BFu9s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu15s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0c_BFu9s_BFu15s) C1{ Fc:0 Fs:9 Fs:15}



static void Test_BFu0c_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu15s");
    static BFu0c_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_BFu9s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu15s(Test_BFu0c_BFu9s_BFu15s, "BFu0c_BFu9s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu16i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0c_BFu9s_BFu16i) C1{ Fc:0 Fs:9 Fi:16}



static void Test_BFu0c_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu16i");
    static BFu0c_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu16i(Test_BFu0c_BFu9s_BFu16i, "BFu0c_BFu9s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu16ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_BFu9s_BFu16ll) C1{ Fc:0 Fs:9 FL:16}



static void Test_BFu0c_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu16ll");
    static BFu0c_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0c_BFu9s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu16ll(Test_BFu0c_BFu9s_BFu16ll, "BFu0c_BFu9s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu16s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0c_BFu9s_BFu16s) C1{ Fc:0 Fs:9 Fs:16}



static void Test_BFu0c_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu16s");
    static BFu0c_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_BFu9s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu16s(Test_BFu0c_BFu9s_BFu16s, "BFu0c_BFu9s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu17i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0c_BFu9s_BFu17i) C1{ Fc:0 Fs:9 Fi:17}



static void Test_BFu0c_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu17i");
    static BFu0c_BFu9s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu17i(Test_BFu0c_BFu9s_BFu17i, "BFu0c_BFu9s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu17ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_BFu9s_BFu17ll) C1{ Fc:0 Fs:9 FL:17}



static void Test_BFu0c_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu17ll");
    static BFu0c_BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0c_BFu9s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu17ll(Test_BFu0c_BFu9s_BFu17ll, "BFu0c_BFu9s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu1c  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0c_BFu9s_BFu1c) C1{ Fc:0 Fs:9 Fc:1}



static void Test_BFu0c_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu1c");
    static BFu0c_BFu9s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu1c(Test_BFu0c_BFu9s_BFu1c, "BFu0c_BFu9s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu1i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0c_BFu9s_BFu1i) C1{ Fc:0 Fs:9 Fi:1}



static void Test_BFu0c_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu1i");
    static BFu0c_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu1i(Test_BFu0c_BFu9s_BFu1i, "BFu0c_BFu9s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu1ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_BFu9s_BFu1ll) C1{ Fc:0 Fs:9 FL:1}



static void Test_BFu0c_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu1ll");
    static BFu0c_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu1ll(Test_BFu0c_BFu9s_BFu1ll, "BFu0c_BFu9s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu1s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0c_BFu9s_BFu1s) C1{ Fc:0 Fs:9 Fs:1}



static void Test_BFu0c_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu1s");
    static BFu0c_BFu9s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0c_BFu9s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu1s(Test_BFu0c_BFu9s_BFu1s, "BFu0c_BFu9s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu31i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0c_BFu9s_BFu31i) C1{ Fc:0 Fs:9 Fi:31}



static void Test_BFu0c_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu31i");
    static BFu0c_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_BFu9s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu31i(Test_BFu0c_BFu9s_BFu31i, "BFu0c_BFu9s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu31ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_BFu9s_BFu31ll) C1{ Fc:0 Fs:9 FL:31}



static void Test_BFu0c_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu31ll");
    static BFu0c_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0c_BFu9s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu31ll(Test_BFu0c_BFu9s_BFu31ll, "BFu0c_BFu9s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu32i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0c_BFu9s_BFu32i) C1{ Fc:0 Fs:9 Fi:32}



static void Test_BFu0c_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu32i");
    static BFu0c_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_BFu9s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu32i(Test_BFu0c_BFu9s_BFu32i, "BFu0c_BFu9s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu32ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_BFu9s_BFu32ll) C1{ Fc:0 Fs:9 FL:32}



static void Test_BFu0c_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu32ll");
    static BFu0c_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0c_BFu9s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu32ll(Test_BFu0c_BFu9s_BFu32ll, "BFu0c_BFu9s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu33  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_BFu9s_BFu33) C1{ Fc:0 Fs:9 FL:33}



static void Test_BFu0c_BFu9s_BFu33()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu33");
    static BFu0c_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0c_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0c_BFu9s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu33(Test_BFu0c_BFu9s_BFu33, "BFu0c_BFu9s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu7c  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0c_BFu9s_BFu7c) C1{ Fc:0 Fs:9 Fc:7}



static void Test_BFu0c_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu7c");
    static BFu0c_BFu9s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu7c(Test_BFu0c_BFu9s_BFu7c, "BFu0c_BFu9s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu7i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0c_BFu9s_BFu7i) C1{ Fc:0 Fs:9 Fi:7}



static void Test_BFu0c_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu7i");
    static BFu0c_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu7i(Test_BFu0c_BFu9s_BFu7i, "BFu0c_BFu9s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu7ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_BFu9s_BFu7ll) C1{ Fc:0 Fs:9 FL:7}



static void Test_BFu0c_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu7ll");
    static BFu0c_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu7ll(Test_BFu0c_BFu9s_BFu7ll, "BFu0c_BFu9s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu7s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0c_BFu9s_BFu7s) C1{ Fc:0 Fs:9 Fs:7}



static void Test_BFu0c_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu7s");
    static BFu0c_BFu9s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0c_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0c_BFu9s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu7s(Test_BFu0c_BFu9s_BFu7s, "BFu0c_BFu9s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu8c  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0c_BFu9s_BFu8c) C1{ Fc:0 Fs:9 Fc:8}



static void Test_BFu0c_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu8c");
    static BFu0c_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu8c(Test_BFu0c_BFu9s_BFu8c, "BFu0c_BFu9s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu8i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0c_BFu9s_BFu8i) C1{ Fc:0 Fs:9 Fi:8}



static void Test_BFu0c_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu8i");
    static BFu0c_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu8i(Test_BFu0c_BFu9s_BFu8i, "BFu0c_BFu9s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu8ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_BFu9s_BFu8ll) C1{ Fc:0 Fs:9 FL:8}



static void Test_BFu0c_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu8ll");
    static BFu0c_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0c_BFu9s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu8ll(Test_BFu0c_BFu9s_BFu8ll, "BFu0c_BFu9s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu8s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0c_BFu9s_BFu8s) C1{ Fc:0 Fs:9 Fs:8}



static void Test_BFu0c_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu8s");
    static BFu0c_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_BFu9s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu8s(Test_BFu0c_BFu9s_BFu8s, "BFu0c_BFu9s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu9i  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0c_BFu9s_BFu9i) C1{ Fc:0 Fs:9 Fi:9}



static void Test_BFu0c_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu9i");
    static BFu0c_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu9i(Test_BFu0c_BFu9s_BFu9i, "BFu0c_BFu9s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu9ll  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_BFu9s_BFu9ll) C1{ Fc:0 Fs:9 FL:9}



static void Test_BFu0c_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu9ll");
    static BFu0c_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu9ll(Test_BFu0c_BFu9s_BFu9ll, "BFu0c_BFu9s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_BFu9s  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0c_BFu9s_BFu9s) C1{ Fc:0 Fs:9 Fs:9}



static void Test_BFu0c_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu0c_BFu9s_BFu9s");
    static BFu0c_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_BFu9s(Test_BFu0c_BFu9s_BFu9s, "BFu0c_BFu9s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_C  {
  unsigned char  :0;
  unsigned short v1:9;
  char v2;
};
//SIG(1 BFu0c_BFu9s_C) C1{ Fc:0 Fs:9 Fc}



static void Test_BFu0c_BFu9s_C()
{
  {
    init_simple_test("BFu0c_BFu9s_C");
    static BFu0c_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_C");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_C(Test_BFu0c_BFu9s_C, "BFu0c_BFu9s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_D  {
  unsigned char  :0;
  unsigned short v1:9;
  double v2;
};
//SIG(1 BFu0c_BFu9s_D) C1{ Fc:0 Fs:9 FL}



static void Test_BFu0c_BFu9s_D()
{
  {
    init_simple_test("BFu0c_BFu9s_D");
    static BFu0c_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_D(Test_BFu0c_BFu9s_D, "BFu0c_BFu9s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_F  {
  unsigned char  :0;
  unsigned short v1:9;
  float v2;
};
//SIG(1 BFu0c_BFu9s_F) C1{ Fc:0 Fs:9 Fi}



static void Test_BFu0c_BFu9s_F()
{
  {
    init_simple_test("BFu0c_BFu9s_F");
    static BFu0c_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_F");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_F(Test_BFu0c_BFu9s_F, "BFu0c_BFu9s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_I  {
  unsigned char  :0;
  unsigned short v1:9;
  int v2;
};
//SIG(1 BFu0c_BFu9s_I) C1{ Fc:0 Fs:9 Fi}



static void Test_BFu0c_BFu9s_I()
{
  {
    init_simple_test("BFu0c_BFu9s_I");
    static BFu0c_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_I");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_I(Test_BFu0c_BFu9s_I, "BFu0c_BFu9s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Ip  {
  unsigned char  :0;
  unsigned short v1:9;
  int *v2;
};
//SIG(1 BFu0c_BFu9s_Ip) C1{ Fc:0 Fs:9 Fp}



static void Test_BFu0c_BFu9s_Ip()
{
  {
    init_simple_test("BFu0c_BFu9s_Ip");
    static BFu0c_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Ip(Test_BFu0c_BFu9s_Ip, "BFu0c_BFu9s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_L  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0c_BFu9s_L) C1{ Fc:0 Fs:9 FL}



static void Test_BFu0c_BFu9s_L()
{
  {
    init_simple_test("BFu0c_BFu9s_L");
    static BFu0c_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_L(Test_BFu0c_BFu9s_L, "BFu0c_BFu9s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_S  {
  unsigned char  :0;
  unsigned short v1:9;
  short v2;
};
//SIG(1 BFu0c_BFu9s_S) C1{ Fc:0 Fs:9 Fs}



static void Test_BFu0c_BFu9s_S()
{
  {
    init_simple_test("BFu0c_BFu9s_S");
    static BFu0c_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_S");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_S(Test_BFu0c_BFu9s_S, "BFu0c_BFu9s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Uc  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned char v2;
};
//SIG(1 BFu0c_BFu9s_Uc) C1{ Fc:0 Fs:9 Fc}



static void Test_BFu0c_BFu9s_Uc()
{
  {
    init_simple_test("BFu0c_BFu9s_Uc");
    static BFu0c_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Uc");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Uc(Test_BFu0c_BFu9s_Uc, "BFu0c_BFu9s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Ui  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned int v2;
};
//SIG(1 BFu0c_BFu9s_Ui) C1{ Fc:0 Fs:9 Fi}



static void Test_BFu0c_BFu9s_Ui()
{
  {
    init_simple_test("BFu0c_BFu9s_Ui");
    static BFu0c_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Ui");
    check_field_offset(lv, v2, 4, "BFu0c_BFu9s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Ui(Test_BFu0c_BFu9s_Ui, "BFu0c_BFu9s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Ul  {
  unsigned char  :0;
  unsigned short v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0c_BFu9s_Ul) C1{ Fc:0 Fs:9 FL}



static void Test_BFu0c_BFu9s_Ul()
{
  {
    init_simple_test("BFu0c_BFu9s_Ul");
    static BFu0c_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Ul(Test_BFu0c_BFu9s_Ul, "BFu0c_BFu9s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Us  {
  unsigned char  :0;
  unsigned short v1:9;
  unsigned short v2;
};
//SIG(1 BFu0c_BFu9s_Us) C1{ Fc:0 Fs:9 Fs}



static void Test_BFu0c_BFu9s_Us()
{
  {
    init_simple_test("BFu0c_BFu9s_Us");
    static BFu0c_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Us");
    check_field_offset(lv, v2, 2, "BFu0c_BFu9s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Us(Test_BFu0c_BFu9s_Us, "BFu0c_BFu9s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_BFu9s_Vp  {
  unsigned char  :0;
  unsigned short v1:9;
  void *v2;
};
//SIG(1 BFu0c_BFu9s_Vp) C1{ Fc:0 Fs:9 Fp}



static void Test_BFu0c_BFu9s_Vp()
{
  {
    init_simple_test("BFu0c_BFu9s_Vp");
    static BFu0c_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0c_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0c_BFu9s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_BFu9s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_BFu9s_Vp(Test_BFu0c_BFu9s_Vp, "BFu0c_BFu9s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C  {
  unsigned char  :0;
  char v1;
};
//SIG(1 BFu0c_C) C1{ Fc:0 Fc}



static void Test_BFu0c_C()
{
  {
    init_simple_test("BFu0c_C");
    static BFu0c_C lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C)");
    check_field_offset(lv, v1, 0, "BFu0c_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_C(Test_BFu0c_C, "BFu0c_C", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu0c  {
  unsigned char  :0;
  char v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_C_BFu0c) C1{ Fc:0 Fc Fc:0}



static void Test_BFu0c_C_BFu0c()
{
  {
    init_simple_test("BFu0c_C_BFu0c");
    static BFu0c_C_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu0c(Test_BFu0c_C_BFu0c, "BFu0c_C_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu0i  {
  unsigned char  :0;
  char v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_C_BFu0i) C1{ Fc:0 Fc Fi:0}



static void Test_BFu0c_C_BFu0i()
{
  {
    init_simple_test("BFu0c_C_BFu0i");
    static BFu0c_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_C_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu0i(Test_BFu0c_C_BFu0i, "BFu0c_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu0ll  {
  unsigned char  :0;
  char v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_C_BFu0ll) C1{ Fc:0 Fc FL:0}



static void Test_BFu0c_C_BFu0ll()
{
  {
    init_simple_test("BFu0c_C_BFu0ll");
    static BFu0c_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu0ll(Test_BFu0c_C_BFu0ll, "BFu0c_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu0s  {
  unsigned char  :0;
  char v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_C_BFu0s) C1{ Fc:0 Fc Fs:0}



static void Test_BFu0c_C_BFu0s()
{
  {
    init_simple_test("BFu0c_C_BFu0s");
    static BFu0c_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_C_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu0s(Test_BFu0c_C_BFu0s, "BFu0c_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu15i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_C_BFu15i) C1{ Fc:0 Fc Fi:15}



static void Test_BFu0c_C_BFu15i()
{
  {
    init_simple_test("BFu0c_C_BFu15i");
    static BFu0c_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_C_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_C_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu15i(Test_BFu0c_C_BFu15i, "BFu0c_C_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu15ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_C_BFu15ll) C1{ Fc:0 Fc FL:15}



static void Test_BFu0c_C_BFu15ll()
{
  {
    init_simple_test("BFu0c_C_BFu15ll");
    static BFu0c_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_C_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_C_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu15ll(Test_BFu0c_C_BFu15ll, "BFu0c_C_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu15s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_C_BFu15s) C1{ Fc:0 Fc Fs:15}



static void Test_BFu0c_C_BFu15s()
{
  {
    init_simple_test("BFu0c_C_BFu15s");
    static BFu0c_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_C_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_C_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu15s(Test_BFu0c_C_BFu15s, "BFu0c_C_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu16i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_C_BFu16i) C1{ Fc:0 Fc Fi:16}



static void Test_BFu0c_C_BFu16i()
{
  {
    init_simple_test("BFu0c_C_BFu16i");
    static BFu0c_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_C_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_C_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu16i(Test_BFu0c_C_BFu16i, "BFu0c_C_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu16ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_C_BFu16ll) C1{ Fc:0 Fc FL:16}



static void Test_BFu0c_C_BFu16ll()
{
  {
    init_simple_test("BFu0c_C_BFu16ll");
    static BFu0c_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_C_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_C_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu16ll(Test_BFu0c_C_BFu16ll, "BFu0c_C_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu16s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_C_BFu16s) C1{ Fc:0 Fc Fs:16}



static void Test_BFu0c_C_BFu16s()
{
  {
    init_simple_test("BFu0c_C_BFu16s");
    static BFu0c_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_C_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_C_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu16s(Test_BFu0c_C_BFu16s, "BFu0c_C_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu17i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_C_BFu17i) C1{ Fc:0 Fc Fi:17}



static void Test_BFu0c_C_BFu17i()
{
  {
    init_simple_test("BFu0c_C_BFu17i");
    static BFu0c_C_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_C_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_C_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu17i(Test_BFu0c_C_BFu17i, "BFu0c_C_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu17ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_C_BFu17ll) C1{ Fc:0 Fc FL:17}



static void Test_BFu0c_C_BFu17ll()
{
  {
    init_simple_test("BFu0c_C_BFu17ll");
    static BFu0c_C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_C_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_C_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu17ll(Test_BFu0c_C_BFu17ll, "BFu0c_C_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu1c  {
  unsigned char  :0;
  char v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_C_BFu1c) C1{ Fc:0 Fc Fc:1}



static void Test_BFu0c_C_BFu1c()
{
  {
    init_simple_test("BFu0c_C_BFu1c");
    static BFu0c_C_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_C_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu1c(Test_BFu0c_C_BFu1c, "BFu0c_C_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu1i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_C_BFu1i) C1{ Fc:0 Fc Fi:1}



static void Test_BFu0c_C_BFu1i()
{
  {
    init_simple_test("BFu0c_C_BFu1i");
    static BFu0c_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_C_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu1i(Test_BFu0c_C_BFu1i, "BFu0c_C_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu1ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_C_BFu1ll) C1{ Fc:0 Fc FL:1}



static void Test_BFu0c_C_BFu1ll()
{
  {
    init_simple_test("BFu0c_C_BFu1ll");
    static BFu0c_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_C_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu1ll(Test_BFu0c_C_BFu1ll, "BFu0c_C_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu1s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_C_BFu1s) C1{ Fc:0 Fc Fs:1}



static void Test_BFu0c_C_BFu1s()
{
  {
    init_simple_test("BFu0c_C_BFu1s");
    static BFu0c_C_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_C_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu1s(Test_BFu0c_C_BFu1s, "BFu0c_C_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu31i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_C_BFu31i) C1{ Fc:0 Fc Fi:31}



static void Test_BFu0c_C_BFu31i()
{
  {
    init_simple_test("BFu0c_C_BFu31i");
    static BFu0c_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_C_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_C_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu31i(Test_BFu0c_C_BFu31i, "BFu0c_C_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu31ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_C_BFu31ll) C1{ Fc:0 Fc FL:31}



static void Test_BFu0c_C_BFu31ll()
{
  {
    init_simple_test("BFu0c_C_BFu31ll");
    static BFu0c_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_C_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_C_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu31ll(Test_BFu0c_C_BFu31ll, "BFu0c_C_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu32i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_C_BFu32i) C1{ Fc:0 Fc Fi:32}



static void Test_BFu0c_C_BFu32i()
{
  {
    init_simple_test("BFu0c_C_BFu32i");
    static BFu0c_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_C_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_C_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu32i(Test_BFu0c_C_BFu32i, "BFu0c_C_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu32ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_C_BFu32ll) C1{ Fc:0 Fc FL:32}



static void Test_BFu0c_C_BFu32ll()
{
  {
    init_simple_test("BFu0c_C_BFu32ll");
    static BFu0c_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_C_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_C_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu32ll(Test_BFu0c_C_BFu32ll, "BFu0c_C_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu33  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_C_BFu33) C1{ Fc:0 Fc FL:33}



static void Test_BFu0c_C_BFu33()
{
  {
    init_simple_test("BFu0c_C_BFu33");
    static BFu0c_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_C_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_C_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu33(Test_BFu0c_C_BFu33, "BFu0c_C_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu7c  {
  unsigned char  :0;
  char v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_C_BFu7c) C1{ Fc:0 Fc Fc:7}



static void Test_BFu0c_C_BFu7c()
{
  {
    init_simple_test("BFu0c_C_BFu7c");
    static BFu0c_C_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_C_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_C_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu7c(Test_BFu0c_C_BFu7c, "BFu0c_C_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu7i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_C_BFu7i) C1{ Fc:0 Fc Fi:7}



static void Test_BFu0c_C_BFu7i()
{
  {
    init_simple_test("BFu0c_C_BFu7i");
    static BFu0c_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_C_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_C_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu7i(Test_BFu0c_C_BFu7i, "BFu0c_C_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu7ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_C_BFu7ll) C1{ Fc:0 Fc FL:7}



static void Test_BFu0c_C_BFu7ll()
{
  {
    init_simple_test("BFu0c_C_BFu7ll");
    static BFu0c_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_C_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_C_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu7ll(Test_BFu0c_C_BFu7ll, "BFu0c_C_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu7s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_C_BFu7s) C1{ Fc:0 Fc Fs:7}



static void Test_BFu0c_C_BFu7s()
{
  {
    init_simple_test("BFu0c_C_BFu7s");
    static BFu0c_C_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_C_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_C_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu7s(Test_BFu0c_C_BFu7s, "BFu0c_C_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu8c  {
  unsigned char  :0;
  char v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_C_BFu8c) C1{ Fc:0 Fc Fc:8}



static void Test_BFu0c_C_BFu8c()
{
  {
    init_simple_test("BFu0c_C_BFu8c");
    static BFu0c_C_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_C_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_C_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu8c(Test_BFu0c_C_BFu8c, "BFu0c_C_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu8i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_C_BFu8i) C1{ Fc:0 Fc Fi:8}



static void Test_BFu0c_C_BFu8i()
{
  {
    init_simple_test("BFu0c_C_BFu8i");
    static BFu0c_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_C_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_C_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu8i(Test_BFu0c_C_BFu8i, "BFu0c_C_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu8ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_C_BFu8ll) C1{ Fc:0 Fc FL:8}



static void Test_BFu0c_C_BFu8ll()
{
  {
    init_simple_test("BFu0c_C_BFu8ll");
    static BFu0c_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_C_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_C_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu8ll(Test_BFu0c_C_BFu8ll, "BFu0c_C_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu8s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_C_BFu8s) C1{ Fc:0 Fc Fs:8}



static void Test_BFu0c_C_BFu8s()
{
  {
    init_simple_test("BFu0c_C_BFu8s");
    static BFu0c_C_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_C_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_C_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu8s(Test_BFu0c_C_BFu8s, "BFu0c_C_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu9i  {
  unsigned char  :0;
  char v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_C_BFu9i) C1{ Fc:0 Fc Fi:9}



static void Test_BFu0c_C_BFu9i()
{
  {
    init_simple_test("BFu0c_C_BFu9i");
    static BFu0c_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_C_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_C_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu9i(Test_BFu0c_C_BFu9i, "BFu0c_C_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu9ll  {
  unsigned char  :0;
  char v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_C_BFu9ll) C1{ Fc:0 Fc FL:9}



static void Test_BFu0c_C_BFu9ll()
{
  {
    init_simple_test("BFu0c_C_BFu9ll");
    static BFu0c_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_C_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_C_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu9ll(Test_BFu0c_C_BFu9ll, "BFu0c_C_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_BFu9s  {
  unsigned char  :0;
  char v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_C_BFu9s) C1{ Fc:0 Fc Fs:9}



static void Test_BFu0c_C_BFu9s()
{
  {
    init_simple_test("BFu0c_C_BFu9s");
    static BFu0c_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_C_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_C_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_C_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_C_BFu9s(Test_BFu0c_C_BFu9s, "BFu0c_C_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_C  {
  unsigned char  :0;
  char v1;
  char v2;
};
//SIG(1 BFu0c_C_C) C1{ Fc:0 Fc[2]}



static void Test_BFu0c_C_C()
{
  {
    init_simple_test("BFu0c_C_C");
    static BFu0c_C_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_C)");
    check_field_offset(lv, v1, 0, "BFu0c_C_C.v1");
    check_field_offset(lv, v2, 1, "BFu0c_C_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_C(Test_BFu0c_C_C, "BFu0c_C_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_D  {
  unsigned char  :0;
  char v1;
  double v2;
};
//SIG(1 BFu0c_C_D) C1{ Fc:0 Fc FL}



static void Test_BFu0c_C_D()
{
  {
    init_simple_test("BFu0c_C_D");
    static BFu0c_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_D)");
    check_field_offset(lv, v1, 0, "BFu0c_C_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_C_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_D(Test_BFu0c_C_D, "BFu0c_C_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_F  {
  unsigned char  :0;
  char v1;
  float v2;
};
//SIG(1 BFu0c_C_F) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_C_F()
{
  {
    init_simple_test("BFu0c_C_F");
    static BFu0c_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_F)");
    check_field_offset(lv, v1, 0, "BFu0c_C_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_C_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_F(Test_BFu0c_C_F, "BFu0c_C_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_I  {
  unsigned char  :0;
  char v1;
  int v2;
};
//SIG(1 BFu0c_C_I) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_C_I()
{
  {
    init_simple_test("BFu0c_C_I");
    static BFu0c_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_I)");
    check_field_offset(lv, v1, 0, "BFu0c_C_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_C_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_I(Test_BFu0c_C_I, "BFu0c_C_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Ip  {
  unsigned char  :0;
  char v1;
  int *v2;
};
//SIG(1 BFu0c_C_Ip) C1{ Fc:0 Fc Fp}



static void Test_BFu0c_C_Ip()
{
  {
    init_simple_test("BFu0c_C_Ip");
    static BFu0c_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_C_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Ip(Test_BFu0c_C_Ip, "BFu0c_C_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_L  {
  unsigned char  :0;
  char v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_C_L) C1{ Fc:0 Fc FL}



static void Test_BFu0c_C_L()
{
  {
    init_simple_test("BFu0c_C_L");
    static BFu0c_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_L)");
    check_field_offset(lv, v1, 0, "BFu0c_C_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_C_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_L(Test_BFu0c_C_L, "BFu0c_C_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_S  {
  unsigned char  :0;
  char v1;
  short v2;
};
//SIG(1 BFu0c_C_S) C1{ Fc:0 Fc Fs}



static void Test_BFu0c_C_S()
{
  {
    init_simple_test("BFu0c_C_S");
    static BFu0c_C_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_S)");
    check_field_offset(lv, v1, 0, "BFu0c_C_S.v1");
    check_field_offset(lv, v2, 2, "BFu0c_C_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_S(Test_BFu0c_C_S, "BFu0c_C_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Uc  {
  unsigned char  :0;
  char v1;
  unsigned char v2;
};
//SIG(1 BFu0c_C_Uc) C1{ Fc:0 Fc[2]}



static void Test_BFu0c_C_Uc()
{
  {
    init_simple_test("BFu0c_C_Uc");
    static BFu0c_C_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_C_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_C_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Uc.v1");
    check_field_offset(lv, v2, 1, "BFu0c_C_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Uc(Test_BFu0c_C_Uc, "BFu0c_C_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Ui  {
  unsigned char  :0;
  char v1;
  unsigned int v2;
};
//SIG(1 BFu0c_C_Ui) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_C_Ui()
{
  {
    init_simple_test("BFu0c_C_Ui");
    static BFu0c_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_C_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_C_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Ui(Test_BFu0c_C_Ui, "BFu0c_C_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Ul  {
  unsigned char  :0;
  char v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_C_Ul) C1{ Fc:0 Fc FL}



static void Test_BFu0c_C_Ul()
{
  {
    init_simple_test("BFu0c_C_Ul");
    static BFu0c_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_C_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Ul(Test_BFu0c_C_Ul, "BFu0c_C_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Us  {
  unsigned char  :0;
  char v1;
  unsigned short v2;
};
//SIG(1 BFu0c_C_Us) C1{ Fc:0 Fc Fs}



static void Test_BFu0c_C_Us()
{
  {
    init_simple_test("BFu0c_C_Us");
    static BFu0c_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_C_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0c_C_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Us(Test_BFu0c_C_Us, "BFu0c_C_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_C_Vp  {
  unsigned char  :0;
  char v1;
  void *v2;
};
//SIG(1 BFu0c_C_Vp) C1{ Fc:0 Fc Fp}



static void Test_BFu0c_C_Vp()
{
  {
    init_simple_test("BFu0c_C_Vp");
    static BFu0c_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_C_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_C_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_C_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_C_Vp(Test_BFu0c_C_Vp, "BFu0c_C_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D  {
  unsigned char  :0;
  double v1;
};
//SIG(1 BFu0c_D) C1{ Fc:0 FL}



static void Test_BFu0c_D()
{
  {
    init_simple_test("BFu0c_D");
    static BFu0c_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D)");
    check_field_offset(lv, v1, 0, "BFu0c_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_D(Test_BFu0c_D, "BFu0c_D", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu0c  {
  unsigned char  :0;
  double v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_D_BFu0c) C1{ Fc:0 FL Fc:0}



static void Test_BFu0c_D_BFu0c()
{
  {
    init_simple_test("BFu0c_D_BFu0c");
    static BFu0c_D_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu0c(Test_BFu0c_D_BFu0c, "BFu0c_D_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu0i  {
  unsigned char  :0;
  double v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_D_BFu0i) C1{ Fc:0 FL Fi:0}



static void Test_BFu0c_D_BFu0i()
{
  {
    init_simple_test("BFu0c_D_BFu0i");
    static BFu0c_D_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu0i(Test_BFu0c_D_BFu0i, "BFu0c_D_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu0ll  {
  unsigned char  :0;
  double v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_D_BFu0ll) C1{ Fc:0 FL FL:0}



static void Test_BFu0c_D_BFu0ll()
{
  {
    init_simple_test("BFu0c_D_BFu0ll");
    static BFu0c_D_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu0ll(Test_BFu0c_D_BFu0ll, "BFu0c_D_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu0s  {
  unsigned char  :0;
  double v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_D_BFu0s) C1{ Fc:0 FL Fs:0}



static void Test_BFu0c_D_BFu0s()
{
  {
    init_simple_test("BFu0c_D_BFu0s");
    static BFu0c_D_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu0s(Test_BFu0c_D_BFu0s, "BFu0c_D_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu15i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_D_BFu15i) C1{ Fc:0 FL Fi:15}



static void Test_BFu0c_D_BFu15i()
{
  {
    init_simple_test("BFu0c_D_BFu15i");
    static BFu0c_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_D_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_D_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu15i(Test_BFu0c_D_BFu15i, "BFu0c_D_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu15ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_D_BFu15ll) C1{ Fc:0 FL FL:15}



static void Test_BFu0c_D_BFu15ll()
{
  {
    init_simple_test("BFu0c_D_BFu15ll");
    static BFu0c_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_D_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_D_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu15ll(Test_BFu0c_D_BFu15ll, "BFu0c_D_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu15s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_D_BFu15s) C1{ Fc:0 FL Fs:15}



static void Test_BFu0c_D_BFu15s()
{
  {
    init_simple_test("BFu0c_D_BFu15s");
    static BFu0c_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_D_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_D_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu15s(Test_BFu0c_D_BFu15s, "BFu0c_D_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu16i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_D_BFu16i) C1{ Fc:0 FL Fi:16}



static void Test_BFu0c_D_BFu16i()
{
  {
    init_simple_test("BFu0c_D_BFu16i");
    static BFu0c_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_D_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_D_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu16i(Test_BFu0c_D_BFu16i, "BFu0c_D_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu16ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_D_BFu16ll) C1{ Fc:0 FL FL:16}



static void Test_BFu0c_D_BFu16ll()
{
  {
    init_simple_test("BFu0c_D_BFu16ll");
    static BFu0c_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_D_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_D_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu16ll(Test_BFu0c_D_BFu16ll, "BFu0c_D_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu16s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_D_BFu16s) C1{ Fc:0 FL Fs:16}



static void Test_BFu0c_D_BFu16s()
{
  {
    init_simple_test("BFu0c_D_BFu16s");
    static BFu0c_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_D_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_D_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu16s(Test_BFu0c_D_BFu16s, "BFu0c_D_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu17i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_D_BFu17i) C1{ Fc:0 FL Fi:17}



static void Test_BFu0c_D_BFu17i()
{
  {
    init_simple_test("BFu0c_D_BFu17i");
    static BFu0c_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_D_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_D_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu17i(Test_BFu0c_D_BFu17i, "BFu0c_D_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu17ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_D_BFu17ll) C1{ Fc:0 FL FL:17}



static void Test_BFu0c_D_BFu17ll()
{
  {
    init_simple_test("BFu0c_D_BFu17ll");
    static BFu0c_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_D_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_D_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu17ll(Test_BFu0c_D_BFu17ll, "BFu0c_D_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu1c  {
  unsigned char  :0;
  double v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_D_BFu1c) C1{ Fc:0 FL Fc:1}



static void Test_BFu0c_D_BFu1c()
{
  {
    init_simple_test("BFu0c_D_BFu1c");
    static BFu0c_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_D_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu1c(Test_BFu0c_D_BFu1c, "BFu0c_D_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu1i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_D_BFu1i) C1{ Fc:0 FL Fi:1}



static void Test_BFu0c_D_BFu1i()
{
  {
    init_simple_test("BFu0c_D_BFu1i");
    static BFu0c_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_D_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu1i(Test_BFu0c_D_BFu1i, "BFu0c_D_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu1ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_D_BFu1ll) C1{ Fc:0 FL FL:1}



static void Test_BFu0c_D_BFu1ll()
{
  {
    init_simple_test("BFu0c_D_BFu1ll");
    static BFu0c_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_D_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu1ll(Test_BFu0c_D_BFu1ll, "BFu0c_D_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu1s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_D_BFu1s) C1{ Fc:0 FL Fs:1}



static void Test_BFu0c_D_BFu1s()
{
  {
    init_simple_test("BFu0c_D_BFu1s");
    static BFu0c_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_D_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu1s(Test_BFu0c_D_BFu1s, "BFu0c_D_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu31i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_D_BFu31i) C1{ Fc:0 FL Fi:31}



static void Test_BFu0c_D_BFu31i()
{
  {
    init_simple_test("BFu0c_D_BFu31i");
    static BFu0c_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_D_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_D_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu31i(Test_BFu0c_D_BFu31i, "BFu0c_D_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu31ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_D_BFu31ll) C1{ Fc:0 FL FL:31}



static void Test_BFu0c_D_BFu31ll()
{
  {
    init_simple_test("BFu0c_D_BFu31ll");
    static BFu0c_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_D_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_D_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu31ll(Test_BFu0c_D_BFu31ll, "BFu0c_D_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu32i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_D_BFu32i) C1{ Fc:0 FL Fi:32}



static void Test_BFu0c_D_BFu32i()
{
  {
    init_simple_test("BFu0c_D_BFu32i");
    static BFu0c_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_D_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_D_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu32i(Test_BFu0c_D_BFu32i, "BFu0c_D_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu32ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_D_BFu32ll) C1{ Fc:0 FL FL:32}



static void Test_BFu0c_D_BFu32ll()
{
  {
    init_simple_test("BFu0c_D_BFu32ll");
    static BFu0c_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_D_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_D_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu32ll(Test_BFu0c_D_BFu32ll, "BFu0c_D_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu33  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_D_BFu33) C1{ Fc:0 FL FL:33}



static void Test_BFu0c_D_BFu33()
{
  {
    init_simple_test("BFu0c_D_BFu33");
    static BFu0c_D_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu0c_D_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu0c_D_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu33(Test_BFu0c_D_BFu33, "BFu0c_D_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu7c  {
  unsigned char  :0;
  double v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_D_BFu7c) C1{ Fc:0 FL Fc:7}



static void Test_BFu0c_D_BFu7c()
{
  {
    init_simple_test("BFu0c_D_BFu7c");
    static BFu0c_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_D_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_D_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu7c(Test_BFu0c_D_BFu7c, "BFu0c_D_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu7i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_D_BFu7i) C1{ Fc:0 FL Fi:7}



static void Test_BFu0c_D_BFu7i()
{
  {
    init_simple_test("BFu0c_D_BFu7i");
    static BFu0c_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_D_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_D_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu7i(Test_BFu0c_D_BFu7i, "BFu0c_D_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu7ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_D_BFu7ll) C1{ Fc:0 FL FL:7}



static void Test_BFu0c_D_BFu7ll()
{
  {
    init_simple_test("BFu0c_D_BFu7ll");
    static BFu0c_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_D_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_D_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu7ll(Test_BFu0c_D_BFu7ll, "BFu0c_D_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu7s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_D_BFu7s) C1{ Fc:0 FL Fs:7}



static void Test_BFu0c_D_BFu7s()
{
  {
    init_simple_test("BFu0c_D_BFu7s");
    static BFu0c_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_D_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_D_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu7s(Test_BFu0c_D_BFu7s, "BFu0c_D_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu8c  {
  unsigned char  :0;
  double v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_D_BFu8c) C1{ Fc:0 FL Fc:8}



static void Test_BFu0c_D_BFu8c()
{
  {
    init_simple_test("BFu0c_D_BFu8c");
    static BFu0c_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_D_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_D_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu8c(Test_BFu0c_D_BFu8c, "BFu0c_D_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu8i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_D_BFu8i) C1{ Fc:0 FL Fi:8}



static void Test_BFu0c_D_BFu8i()
{
  {
    init_simple_test("BFu0c_D_BFu8i");
    static BFu0c_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_D_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_D_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu8i(Test_BFu0c_D_BFu8i, "BFu0c_D_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu8ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_D_BFu8ll) C1{ Fc:0 FL FL:8}



static void Test_BFu0c_D_BFu8ll()
{
  {
    init_simple_test("BFu0c_D_BFu8ll");
    static BFu0c_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_D_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_D_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu8ll(Test_BFu0c_D_BFu8ll, "BFu0c_D_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu8s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_D_BFu8s) C1{ Fc:0 FL Fs:8}



static void Test_BFu0c_D_BFu8s()
{
  {
    init_simple_test("BFu0c_D_BFu8s");
    static BFu0c_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_D_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_D_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu8s(Test_BFu0c_D_BFu8s, "BFu0c_D_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu9i  {
  unsigned char  :0;
  double v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_D_BFu9i) C1{ Fc:0 FL Fi:9}



static void Test_BFu0c_D_BFu9i()
{
  {
    init_simple_test("BFu0c_D_BFu9i");
    static BFu0c_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_D_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_D_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu9i(Test_BFu0c_D_BFu9i, "BFu0c_D_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu9ll  {
  unsigned char  :0;
  double v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_D_BFu9ll) C1{ Fc:0 FL FL:9}



static void Test_BFu0c_D_BFu9ll()
{
  {
    init_simple_test("BFu0c_D_BFu9ll");
    static BFu0c_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_D_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_D_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu9ll(Test_BFu0c_D_BFu9ll, "BFu0c_D_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_BFu9s  {
  unsigned char  :0;
  double v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_D_BFu9s) C1{ Fc:0 FL Fs:9}



static void Test_BFu0c_D_BFu9s()
{
  {
    init_simple_test("BFu0c_D_BFu9s");
    static BFu0c_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_D_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_D_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_D_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_D_BFu9s(Test_BFu0c_D_BFu9s, "BFu0c_D_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_C  {
  unsigned char  :0;
  double v1;
  char v2;
};
//SIG(1 BFu0c_D_C) C1{ Fc:0 FL Fc}



static void Test_BFu0c_D_C()
{
  {
    init_simple_test("BFu0c_D_C");
    static BFu0c_D_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_C)");
    check_field_offset(lv, v1, 0, "BFu0c_D_C.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_C(Test_BFu0c_D_C, "BFu0c_D_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_D  {
  unsigned char  :0;
  double v1;
  double v2;
};
//SIG(1 BFu0c_D_D) C1{ Fc:0 FL[2]}



static void Test_BFu0c_D_D()
{
  {
    init_simple_test("BFu0c_D_D");
    static BFu0c_D_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_D)");
    check_field_offset(lv, v1, 0, "BFu0c_D_D.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_D(Test_BFu0c_D_D, "BFu0c_D_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_F  {
  unsigned char  :0;
  double v1;
  float v2;
};
//SIG(1 BFu0c_D_F) C1{ Fc:0 FL Fi}



static void Test_BFu0c_D_F()
{
  {
    init_simple_test("BFu0c_D_F");
    static BFu0c_D_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_F)");
    check_field_offset(lv, v1, 0, "BFu0c_D_F.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_F(Test_BFu0c_D_F, "BFu0c_D_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_I  {
  unsigned char  :0;
  double v1;
  int v2;
};
//SIG(1 BFu0c_D_I) C1{ Fc:0 FL Fi}



static void Test_BFu0c_D_I()
{
  {
    init_simple_test("BFu0c_D_I");
    static BFu0c_D_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_I)");
    check_field_offset(lv, v1, 0, "BFu0c_D_I.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_I(Test_BFu0c_D_I, "BFu0c_D_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Ip  {
  unsigned char  :0;
  double v1;
  int *v2;
};
//SIG(1 BFu0c_D_Ip) C1{ Fc:0 FL Fp}



static void Test_BFu0c_D_Ip()
{
  {
    init_simple_test("BFu0c_D_Ip");
    static BFu0c_D_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Ip(Test_BFu0c_D_Ip, "BFu0c_D_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_L  {
  unsigned char  :0;
  double v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_D_L) C1{ Fc:0 FL[2]}



static void Test_BFu0c_D_L()
{
  {
    init_simple_test("BFu0c_D_L");
    static BFu0c_D_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_L)");
    check_field_offset(lv, v1, 0, "BFu0c_D_L.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_L(Test_BFu0c_D_L, "BFu0c_D_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_S  {
  unsigned char  :0;
  double v1;
  short v2;
};
//SIG(1 BFu0c_D_S) C1{ Fc:0 FL Fs}



static void Test_BFu0c_D_S()
{
  {
    init_simple_test("BFu0c_D_S");
    static BFu0c_D_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_S)");
    check_field_offset(lv, v1, 0, "BFu0c_D_S.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_S(Test_BFu0c_D_S, "BFu0c_D_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Uc  {
  unsigned char  :0;
  double v1;
  unsigned char v2;
};
//SIG(1 BFu0c_D_Uc) C1{ Fc:0 FL Fc}



static void Test_BFu0c_D_Uc()
{
  {
    init_simple_test("BFu0c_D_Uc");
    static BFu0c_D_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Uc(Test_BFu0c_D_Uc, "BFu0c_D_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Ui  {
  unsigned char  :0;
  double v1;
  unsigned int v2;
};
//SIG(1 BFu0c_D_Ui) C1{ Fc:0 FL Fi}



static void Test_BFu0c_D_Ui()
{
  {
    init_simple_test("BFu0c_D_Ui");
    static BFu0c_D_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Ui(Test_BFu0c_D_Ui, "BFu0c_D_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Ul  {
  unsigned char  :0;
  double v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_D_Ul) C1{ Fc:0 FL[2]}



static void Test_BFu0c_D_Ul()
{
  {
    init_simple_test("BFu0c_D_Ul");
    static BFu0c_D_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Ul(Test_BFu0c_D_Ul, "BFu0c_D_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Us  {
  unsigned char  :0;
  double v1;
  unsigned short v2;
};
//SIG(1 BFu0c_D_Us) C1{ Fc:0 FL Fs}



static void Test_BFu0c_D_Us()
{
  {
    init_simple_test("BFu0c_D_Us");
    static BFu0c_D_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Us(Test_BFu0c_D_Us, "BFu0c_D_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_D_Vp  {
  unsigned char  :0;
  double v1;
  void *v2;
};
//SIG(1 BFu0c_D_Vp) C1{ Fc:0 FL Fp}



static void Test_BFu0c_D_Vp()
{
  {
    init_simple_test("BFu0c_D_Vp");
    static BFu0c_D_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_D_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_D_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0c_D_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_D_Vp(Test_BFu0c_D_Vp, "BFu0c_D_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F  {
  unsigned char  :0;
  float v1;
};
//SIG(1 BFu0c_F) C1{ Fc:0 Fi}



static void Test_BFu0c_F()
{
  {
    init_simple_test("BFu0c_F");
    static BFu0c_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F)");
    check_field_offset(lv, v1, 0, "BFu0c_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_F(Test_BFu0c_F, "BFu0c_F", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu0c  {
  unsigned char  :0;
  float v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_F_BFu0c) C1{ Fc:0 Fi Fc:0}



static void Test_BFu0c_F_BFu0c()
{
  {
    init_simple_test("BFu0c_F_BFu0c");
    static BFu0c_F_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu0c(Test_BFu0c_F_BFu0c, "BFu0c_F_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu0i  {
  unsigned char  :0;
  float v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_F_BFu0i) C1{ Fc:0 Fi Fi:0}



static void Test_BFu0c_F_BFu0i()
{
  {
    init_simple_test("BFu0c_F_BFu0i");
    static BFu0c_F_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu0i(Test_BFu0c_F_BFu0i, "BFu0c_F_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu0ll  {
  unsigned char  :0;
  float v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_F_BFu0ll) C1{ Fc:0 Fi FL:0}



static void Test_BFu0c_F_BFu0ll()
{
  {
    init_simple_test("BFu0c_F_BFu0ll");
    static BFu0c_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu0ll(Test_BFu0c_F_BFu0ll, "BFu0c_F_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu0s  {
  unsigned char  :0;
  float v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_F_BFu0s) C1{ Fc:0 Fi Fs:0}



static void Test_BFu0c_F_BFu0s()
{
  {
    init_simple_test("BFu0c_F_BFu0s");
    static BFu0c_F_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu0s(Test_BFu0c_F_BFu0s, "BFu0c_F_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu15i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_F_BFu15i) C1{ Fc:0 Fi Fi:15}



static void Test_BFu0c_F_BFu15i()
{
  {
    init_simple_test("BFu0c_F_BFu15i");
    static BFu0c_F_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_F_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_F_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu15i(Test_BFu0c_F_BFu15i, "BFu0c_F_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu15ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_F_BFu15ll) C1{ Fc:0 Fi FL:15}



static void Test_BFu0c_F_BFu15ll()
{
  {
    init_simple_test("BFu0c_F_BFu15ll");
    static BFu0c_F_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_F_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_F_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu15ll(Test_BFu0c_F_BFu15ll, "BFu0c_F_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu15s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_F_BFu15s) C1{ Fc:0 Fi Fs:15}



static void Test_BFu0c_F_BFu15s()
{
  {
    init_simple_test("BFu0c_F_BFu15s");
    static BFu0c_F_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_F_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_F_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu15s(Test_BFu0c_F_BFu15s, "BFu0c_F_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu16i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_F_BFu16i) C1{ Fc:0 Fi Fi:16}



static void Test_BFu0c_F_BFu16i()
{
  {
    init_simple_test("BFu0c_F_BFu16i");
    static BFu0c_F_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_F_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_F_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu16i(Test_BFu0c_F_BFu16i, "BFu0c_F_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu16ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_F_BFu16ll) C1{ Fc:0 Fi FL:16}



static void Test_BFu0c_F_BFu16ll()
{
  {
    init_simple_test("BFu0c_F_BFu16ll");
    static BFu0c_F_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_F_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_F_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu16ll(Test_BFu0c_F_BFu16ll, "BFu0c_F_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu16s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_F_BFu16s) C1{ Fc:0 Fi Fs:16}



static void Test_BFu0c_F_BFu16s()
{
  {
    init_simple_test("BFu0c_F_BFu16s");
    static BFu0c_F_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_F_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_F_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu16s(Test_BFu0c_F_BFu16s, "BFu0c_F_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu17i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_F_BFu17i) C1{ Fc:0 Fi Fi:17}



static void Test_BFu0c_F_BFu17i()
{
  {
    init_simple_test("BFu0c_F_BFu17i");
    static BFu0c_F_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_F_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_F_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu17i(Test_BFu0c_F_BFu17i, "BFu0c_F_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu17ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_F_BFu17ll) C1{ Fc:0 Fi FL:17}



static void Test_BFu0c_F_BFu17ll()
{
  {
    init_simple_test("BFu0c_F_BFu17ll");
    static BFu0c_F_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_F_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_F_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu17ll(Test_BFu0c_F_BFu17ll, "BFu0c_F_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu1c  {
  unsigned char  :0;
  float v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_F_BFu1c) C1{ Fc:0 Fi Fc:1}



static void Test_BFu0c_F_BFu1c()
{
  {
    init_simple_test("BFu0c_F_BFu1c");
    static BFu0c_F_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_F_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu1c(Test_BFu0c_F_BFu1c, "BFu0c_F_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu1i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_F_BFu1i) C1{ Fc:0 Fi Fi:1}



static void Test_BFu0c_F_BFu1i()
{
  {
    init_simple_test("BFu0c_F_BFu1i");
    static BFu0c_F_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_F_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu1i(Test_BFu0c_F_BFu1i, "BFu0c_F_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu1ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_F_BFu1ll) C1{ Fc:0 Fi FL:1}



static void Test_BFu0c_F_BFu1ll()
{
  {
    init_simple_test("BFu0c_F_BFu1ll");
    static BFu0c_F_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_F_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu1ll(Test_BFu0c_F_BFu1ll, "BFu0c_F_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu1s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_F_BFu1s) C1{ Fc:0 Fi Fs:1}



static void Test_BFu0c_F_BFu1s()
{
  {
    init_simple_test("BFu0c_F_BFu1s");
    static BFu0c_F_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_F_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu1s(Test_BFu0c_F_BFu1s, "BFu0c_F_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu31i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_F_BFu31i) C1{ Fc:0 Fi Fi:31}



static void Test_BFu0c_F_BFu31i()
{
  {
    init_simple_test("BFu0c_F_BFu31i");
    static BFu0c_F_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_F_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_F_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu31i(Test_BFu0c_F_BFu31i, "BFu0c_F_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu31ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_F_BFu31ll) C1{ Fc:0 Fi FL:31}



static void Test_BFu0c_F_BFu31ll()
{
  {
    init_simple_test("BFu0c_F_BFu31ll");
    static BFu0c_F_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_F_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_F_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu31ll(Test_BFu0c_F_BFu31ll, "BFu0c_F_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu32i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_F_BFu32i) C1{ Fc:0 Fi Fi:32}



static void Test_BFu0c_F_BFu32i()
{
  {
    init_simple_test("BFu0c_F_BFu32i");
    static BFu0c_F_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_F_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_F_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu32i(Test_BFu0c_F_BFu32i, "BFu0c_F_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu32ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_F_BFu32ll) C1{ Fc:0 Fi FL:32}



static void Test_BFu0c_F_BFu32ll()
{
  {
    init_simple_test("BFu0c_F_BFu32ll");
    static BFu0c_F_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_F_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_F_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu32ll(Test_BFu0c_F_BFu32ll, "BFu0c_F_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu33  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_F_BFu33) C1{ Fc:0 Fi FL:33}



static void Test_BFu0c_F_BFu33()
{
  {
    init_simple_test("BFu0c_F_BFu33");
    static BFu0c_F_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_F_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_F_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu33(Test_BFu0c_F_BFu33, "BFu0c_F_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu7c  {
  unsigned char  :0;
  float v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_F_BFu7c) C1{ Fc:0 Fi Fc:7}



static void Test_BFu0c_F_BFu7c()
{
  {
    init_simple_test("BFu0c_F_BFu7c");
    static BFu0c_F_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_F_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_F_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu7c(Test_BFu0c_F_BFu7c, "BFu0c_F_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu7i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_F_BFu7i) C1{ Fc:0 Fi Fi:7}



static void Test_BFu0c_F_BFu7i()
{
  {
    init_simple_test("BFu0c_F_BFu7i");
    static BFu0c_F_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_F_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_F_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu7i(Test_BFu0c_F_BFu7i, "BFu0c_F_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu7ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_F_BFu7ll) C1{ Fc:0 Fi FL:7}



static void Test_BFu0c_F_BFu7ll()
{
  {
    init_simple_test("BFu0c_F_BFu7ll");
    static BFu0c_F_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_F_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_F_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu7ll(Test_BFu0c_F_BFu7ll, "BFu0c_F_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu7s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_F_BFu7s) C1{ Fc:0 Fi Fs:7}



static void Test_BFu0c_F_BFu7s()
{
  {
    init_simple_test("BFu0c_F_BFu7s");
    static BFu0c_F_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_F_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_F_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu7s(Test_BFu0c_F_BFu7s, "BFu0c_F_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu8c  {
  unsigned char  :0;
  float v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_F_BFu8c) C1{ Fc:0 Fi Fc:8}



static void Test_BFu0c_F_BFu8c()
{
  {
    init_simple_test("BFu0c_F_BFu8c");
    static BFu0c_F_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_F_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_F_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu8c(Test_BFu0c_F_BFu8c, "BFu0c_F_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu8i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_F_BFu8i) C1{ Fc:0 Fi Fi:8}



static void Test_BFu0c_F_BFu8i()
{
  {
    init_simple_test("BFu0c_F_BFu8i");
    static BFu0c_F_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_F_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_F_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu8i(Test_BFu0c_F_BFu8i, "BFu0c_F_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu8ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_F_BFu8ll) C1{ Fc:0 Fi FL:8}



static void Test_BFu0c_F_BFu8ll()
{
  {
    init_simple_test("BFu0c_F_BFu8ll");
    static BFu0c_F_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_F_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_F_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu8ll(Test_BFu0c_F_BFu8ll, "BFu0c_F_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu8s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_F_BFu8s) C1{ Fc:0 Fi Fs:8}



static void Test_BFu0c_F_BFu8s()
{
  {
    init_simple_test("BFu0c_F_BFu8s");
    static BFu0c_F_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_F_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_F_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu8s(Test_BFu0c_F_BFu8s, "BFu0c_F_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu9i  {
  unsigned char  :0;
  float v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_F_BFu9i) C1{ Fc:0 Fi Fi:9}



static void Test_BFu0c_F_BFu9i()
{
  {
    init_simple_test("BFu0c_F_BFu9i");
    static BFu0c_F_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_F_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_F_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu9i(Test_BFu0c_F_BFu9i, "BFu0c_F_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu9ll  {
  unsigned char  :0;
  float v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_F_BFu9ll) C1{ Fc:0 Fi FL:9}



static void Test_BFu0c_F_BFu9ll()
{
  {
    init_simple_test("BFu0c_F_BFu9ll");
    static BFu0c_F_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_F_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_F_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu9ll(Test_BFu0c_F_BFu9ll, "BFu0c_F_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_BFu9s  {
  unsigned char  :0;
  float v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_F_BFu9s) C1{ Fc:0 Fi Fs:9}



static void Test_BFu0c_F_BFu9s()
{
  {
    init_simple_test("BFu0c_F_BFu9s");
    static BFu0c_F_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_F_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_F_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_F_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_F_BFu9s(Test_BFu0c_F_BFu9s, "BFu0c_F_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_C  {
  unsigned char  :0;
  float v1;
  char v2;
};
//SIG(1 BFu0c_F_C) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_F_C()
{
  {
    init_simple_test("BFu0c_F_C");
    static BFu0c_F_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_C)");
    check_field_offset(lv, v1, 0, "BFu0c_F_C.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_C(Test_BFu0c_F_C, "BFu0c_F_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_D  {
  unsigned char  :0;
  float v1;
  double v2;
};
//SIG(1 BFu0c_F_D) C1{ Fc:0 Fi FL}



static void Test_BFu0c_F_D()
{
  {
    init_simple_test("BFu0c_F_D");
    static BFu0c_F_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_D)");
    check_field_offset(lv, v1, 0, "BFu0c_F_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_F_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_D(Test_BFu0c_F_D, "BFu0c_F_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_F  {
  unsigned char  :0;
  float v1;
  float v2;
};
//SIG(1 BFu0c_F_F) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_F_F()
{
  {
    init_simple_test("BFu0c_F_F");
    static BFu0c_F_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_F)");
    check_field_offset(lv, v1, 0, "BFu0c_F_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_F(Test_BFu0c_F_F, "BFu0c_F_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_I  {
  unsigned char  :0;
  float v1;
  int v2;
};
//SIG(1 BFu0c_F_I) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_F_I()
{
  {
    init_simple_test("BFu0c_F_I");
    static BFu0c_F_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_I)");
    check_field_offset(lv, v1, 0, "BFu0c_F_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_I(Test_BFu0c_F_I, "BFu0c_F_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Ip  {
  unsigned char  :0;
  float v1;
  int *v2;
};
//SIG(1 BFu0c_F_Ip) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_F_Ip()
{
  {
    init_simple_test("BFu0c_F_Ip");
    static BFu0c_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_F_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Ip(Test_BFu0c_F_Ip, "BFu0c_F_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_L  {
  unsigned char  :0;
  float v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_F_L) C1{ Fc:0 Fi FL}



static void Test_BFu0c_F_L()
{
  {
    init_simple_test("BFu0c_F_L");
    static BFu0c_F_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_L)");
    check_field_offset(lv, v1, 0, "BFu0c_F_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_F_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_L(Test_BFu0c_F_L, "BFu0c_F_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_S  {
  unsigned char  :0;
  float v1;
  short v2;
};
//SIG(1 BFu0c_F_S) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_F_S()
{
  {
    init_simple_test("BFu0c_F_S");
    static BFu0c_F_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_S)");
    check_field_offset(lv, v1, 0, "BFu0c_F_S.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_S(Test_BFu0c_F_S, "BFu0c_F_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Uc  {
  unsigned char  :0;
  float v1;
  unsigned char v2;
};
//SIG(1 BFu0c_F_Uc) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_F_Uc()
{
  {
    init_simple_test("BFu0c_F_Uc");
    static BFu0c_F_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Uc(Test_BFu0c_F_Uc, "BFu0c_F_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Ui  {
  unsigned char  :0;
  float v1;
  unsigned int v2;
};
//SIG(1 BFu0c_F_Ui) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_F_Ui()
{
  {
    init_simple_test("BFu0c_F_Ui");
    static BFu0c_F_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Ui(Test_BFu0c_F_Ui, "BFu0c_F_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Ul  {
  unsigned char  :0;
  float v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_F_Ul) C1{ Fc:0 Fi FL}



static void Test_BFu0c_F_Ul()
{
  {
    init_simple_test("BFu0c_F_Ul");
    static BFu0c_F_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_F_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Ul(Test_BFu0c_F_Ul, "BFu0c_F_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Us  {
  unsigned char  :0;
  float v1;
  unsigned short v2;
};
//SIG(1 BFu0c_F_Us) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_F_Us()
{
  {
    init_simple_test("BFu0c_F_Us");
    static BFu0c_F_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_F_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0c_F_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Us(Test_BFu0c_F_Us, "BFu0c_F_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_F_Vp  {
  unsigned char  :0;
  float v1;
  void *v2;
};
//SIG(1 BFu0c_F_Vp) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_F_Vp()
{
  {
    init_simple_test("BFu0c_F_Vp");
    static BFu0c_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_F_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_F_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_F_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_F_Vp(Test_BFu0c_F_Vp, "BFu0c_F_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I  {
  unsigned char  :0;
  int v1;
};
//SIG(1 BFu0c_I) C1{ Fc:0 Fi}



static void Test_BFu0c_I()
{
  {
    init_simple_test("BFu0c_I");
    static BFu0c_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I)");
    check_field_offset(lv, v1, 0, "BFu0c_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_I(Test_BFu0c_I, "BFu0c_I", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu0c  {
  unsigned char  :0;
  int v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_I_BFu0c) C1{ Fc:0 Fi Fc:0}



static void Test_BFu0c_I_BFu0c()
{
  {
    init_simple_test("BFu0c_I_BFu0c");
    static BFu0c_I_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu0c(Test_BFu0c_I_BFu0c, "BFu0c_I_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu0i  {
  unsigned char  :0;
  int v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_I_BFu0i) C1{ Fc:0 Fi Fi:0}



static void Test_BFu0c_I_BFu0i()
{
  {
    init_simple_test("BFu0c_I_BFu0i");
    static BFu0c_I_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu0i(Test_BFu0c_I_BFu0i, "BFu0c_I_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu0ll  {
  unsigned char  :0;
  int v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_I_BFu0ll) C1{ Fc:0 Fi FL:0}



static void Test_BFu0c_I_BFu0ll()
{
  {
    init_simple_test("BFu0c_I_BFu0ll");
    static BFu0c_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu0ll(Test_BFu0c_I_BFu0ll, "BFu0c_I_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu0s  {
  unsigned char  :0;
  int v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_I_BFu0s) C1{ Fc:0 Fi Fs:0}



static void Test_BFu0c_I_BFu0s()
{
  {
    init_simple_test("BFu0c_I_BFu0s");
    static BFu0c_I_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu0s(Test_BFu0c_I_BFu0s, "BFu0c_I_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu15i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_I_BFu15i) C1{ Fc:0 Fi Fi:15}



static void Test_BFu0c_I_BFu15i()
{
  {
    init_simple_test("BFu0c_I_BFu15i");
    static BFu0c_I_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_I_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_I_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu15i(Test_BFu0c_I_BFu15i, "BFu0c_I_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu15ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_I_BFu15ll) C1{ Fc:0 Fi FL:15}



static void Test_BFu0c_I_BFu15ll()
{
  {
    init_simple_test("BFu0c_I_BFu15ll");
    static BFu0c_I_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_I_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_I_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu15ll(Test_BFu0c_I_BFu15ll, "BFu0c_I_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu15s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_I_BFu15s) C1{ Fc:0 Fi Fs:15}



static void Test_BFu0c_I_BFu15s()
{
  {
    init_simple_test("BFu0c_I_BFu15s");
    static BFu0c_I_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_I_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_I_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu15s(Test_BFu0c_I_BFu15s, "BFu0c_I_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu16i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_I_BFu16i) C1{ Fc:0 Fi Fi:16}



static void Test_BFu0c_I_BFu16i()
{
  {
    init_simple_test("BFu0c_I_BFu16i");
    static BFu0c_I_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_I_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_I_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu16i(Test_BFu0c_I_BFu16i, "BFu0c_I_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu16ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_I_BFu16ll) C1{ Fc:0 Fi FL:16}



static void Test_BFu0c_I_BFu16ll()
{
  {
    init_simple_test("BFu0c_I_BFu16ll");
    static BFu0c_I_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_I_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_I_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu16ll(Test_BFu0c_I_BFu16ll, "BFu0c_I_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu16s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_I_BFu16s) C1{ Fc:0 Fi Fs:16}



static void Test_BFu0c_I_BFu16s()
{
  {
    init_simple_test("BFu0c_I_BFu16s");
    static BFu0c_I_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_I_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_I_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu16s(Test_BFu0c_I_BFu16s, "BFu0c_I_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu17i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_I_BFu17i) C1{ Fc:0 Fi Fi:17}



static void Test_BFu0c_I_BFu17i()
{
  {
    init_simple_test("BFu0c_I_BFu17i");
    static BFu0c_I_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_I_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_I_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu17i(Test_BFu0c_I_BFu17i, "BFu0c_I_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu17ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_I_BFu17ll) C1{ Fc:0 Fi FL:17}



static void Test_BFu0c_I_BFu17ll()
{
  {
    init_simple_test("BFu0c_I_BFu17ll");
    static BFu0c_I_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_I_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_I_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu17ll(Test_BFu0c_I_BFu17ll, "BFu0c_I_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu1c  {
  unsigned char  :0;
  int v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_I_BFu1c) C1{ Fc:0 Fi Fc:1}



static void Test_BFu0c_I_BFu1c()
{
  {
    init_simple_test("BFu0c_I_BFu1c");
    static BFu0c_I_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_I_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu1c(Test_BFu0c_I_BFu1c, "BFu0c_I_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu1i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_I_BFu1i) C1{ Fc:0 Fi Fi:1}



static void Test_BFu0c_I_BFu1i()
{
  {
    init_simple_test("BFu0c_I_BFu1i");
    static BFu0c_I_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_I_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu1i(Test_BFu0c_I_BFu1i, "BFu0c_I_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu1ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_I_BFu1ll) C1{ Fc:0 Fi FL:1}



static void Test_BFu0c_I_BFu1ll()
{
  {
    init_simple_test("BFu0c_I_BFu1ll");
    static BFu0c_I_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_I_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu1ll(Test_BFu0c_I_BFu1ll, "BFu0c_I_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu1s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_I_BFu1s) C1{ Fc:0 Fi Fs:1}



static void Test_BFu0c_I_BFu1s()
{
  {
    init_simple_test("BFu0c_I_BFu1s");
    static BFu0c_I_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_I_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu1s(Test_BFu0c_I_BFu1s, "BFu0c_I_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu31i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_I_BFu31i) C1{ Fc:0 Fi Fi:31}



static void Test_BFu0c_I_BFu31i()
{
  {
    init_simple_test("BFu0c_I_BFu31i");
    static BFu0c_I_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_I_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_I_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu31i(Test_BFu0c_I_BFu31i, "BFu0c_I_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu31ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_I_BFu31ll) C1{ Fc:0 Fi FL:31}



static void Test_BFu0c_I_BFu31ll()
{
  {
    init_simple_test("BFu0c_I_BFu31ll");
    static BFu0c_I_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_I_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_I_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu31ll(Test_BFu0c_I_BFu31ll, "BFu0c_I_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu32i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_I_BFu32i) C1{ Fc:0 Fi Fi:32}



static void Test_BFu0c_I_BFu32i()
{
  {
    init_simple_test("BFu0c_I_BFu32i");
    static BFu0c_I_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_I_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_I_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu32i(Test_BFu0c_I_BFu32i, "BFu0c_I_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu32ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_I_BFu32ll) C1{ Fc:0 Fi FL:32}



static void Test_BFu0c_I_BFu32ll()
{
  {
    init_simple_test("BFu0c_I_BFu32ll");
    static BFu0c_I_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_I_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_I_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu32ll(Test_BFu0c_I_BFu32ll, "BFu0c_I_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu33  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_I_BFu33) C1{ Fc:0 Fi FL:33}



static void Test_BFu0c_I_BFu33()
{
  {
    init_simple_test("BFu0c_I_BFu33");
    static BFu0c_I_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_I_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_I_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu33(Test_BFu0c_I_BFu33, "BFu0c_I_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu7c  {
  unsigned char  :0;
  int v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_I_BFu7c) C1{ Fc:0 Fi Fc:7}



static void Test_BFu0c_I_BFu7c()
{
  {
    init_simple_test("BFu0c_I_BFu7c");
    static BFu0c_I_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_I_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_I_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu7c(Test_BFu0c_I_BFu7c, "BFu0c_I_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu7i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_I_BFu7i) C1{ Fc:0 Fi Fi:7}



static void Test_BFu0c_I_BFu7i()
{
  {
    init_simple_test("BFu0c_I_BFu7i");
    static BFu0c_I_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_I_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_I_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu7i(Test_BFu0c_I_BFu7i, "BFu0c_I_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu7ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_I_BFu7ll) C1{ Fc:0 Fi FL:7}



static void Test_BFu0c_I_BFu7ll()
{
  {
    init_simple_test("BFu0c_I_BFu7ll");
    static BFu0c_I_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_I_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_I_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu7ll(Test_BFu0c_I_BFu7ll, "BFu0c_I_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu7s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_I_BFu7s) C1{ Fc:0 Fi Fs:7}



static void Test_BFu0c_I_BFu7s()
{
  {
    init_simple_test("BFu0c_I_BFu7s");
    static BFu0c_I_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_I_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_I_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu7s(Test_BFu0c_I_BFu7s, "BFu0c_I_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu8c  {
  unsigned char  :0;
  int v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_I_BFu8c) C1{ Fc:0 Fi Fc:8}



static void Test_BFu0c_I_BFu8c()
{
  {
    init_simple_test("BFu0c_I_BFu8c");
    static BFu0c_I_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_I_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_I_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu8c(Test_BFu0c_I_BFu8c, "BFu0c_I_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu8i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_I_BFu8i) C1{ Fc:0 Fi Fi:8}



static void Test_BFu0c_I_BFu8i()
{
  {
    init_simple_test("BFu0c_I_BFu8i");
    static BFu0c_I_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_I_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_I_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu8i(Test_BFu0c_I_BFu8i, "BFu0c_I_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu8ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_I_BFu8ll) C1{ Fc:0 Fi FL:8}



static void Test_BFu0c_I_BFu8ll()
{
  {
    init_simple_test("BFu0c_I_BFu8ll");
    static BFu0c_I_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_I_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_I_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu8ll(Test_BFu0c_I_BFu8ll, "BFu0c_I_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu8s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_I_BFu8s) C1{ Fc:0 Fi Fs:8}



static void Test_BFu0c_I_BFu8s()
{
  {
    init_simple_test("BFu0c_I_BFu8s");
    static BFu0c_I_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_I_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_I_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu8s(Test_BFu0c_I_BFu8s, "BFu0c_I_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu9i  {
  unsigned char  :0;
  int v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_I_BFu9i) C1{ Fc:0 Fi Fi:9}



static void Test_BFu0c_I_BFu9i()
{
  {
    init_simple_test("BFu0c_I_BFu9i");
    static BFu0c_I_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_I_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_I_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu9i(Test_BFu0c_I_BFu9i, "BFu0c_I_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu9ll  {
  unsigned char  :0;
  int v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_I_BFu9ll) C1{ Fc:0 Fi FL:9}



static void Test_BFu0c_I_BFu9ll()
{
  {
    init_simple_test("BFu0c_I_BFu9ll");
    static BFu0c_I_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_I_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_I_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu9ll(Test_BFu0c_I_BFu9ll, "BFu0c_I_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_BFu9s  {
  unsigned char  :0;
  int v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_I_BFu9s) C1{ Fc:0 Fi Fs:9}



static void Test_BFu0c_I_BFu9s()
{
  {
    init_simple_test("BFu0c_I_BFu9s");
    static BFu0c_I_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_I_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_I_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_I_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_I_BFu9s(Test_BFu0c_I_BFu9s, "BFu0c_I_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_C  {
  unsigned char  :0;
  int v1;
  char v2;
};
//SIG(1 BFu0c_I_C) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_I_C()
{
  {
    init_simple_test("BFu0c_I_C");
    static BFu0c_I_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_C)");
    check_field_offset(lv, v1, 0, "BFu0c_I_C.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_C(Test_BFu0c_I_C, "BFu0c_I_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_D  {
  unsigned char  :0;
  int v1;
  double v2;
};
//SIG(1 BFu0c_I_D) C1{ Fc:0 Fi FL}



static void Test_BFu0c_I_D()
{
  {
    init_simple_test("BFu0c_I_D");
    static BFu0c_I_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_D)");
    check_field_offset(lv, v1, 0, "BFu0c_I_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_I_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_D(Test_BFu0c_I_D, "BFu0c_I_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_F  {
  unsigned char  :0;
  int v1;
  float v2;
};
//SIG(1 BFu0c_I_F) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_I_F()
{
  {
    init_simple_test("BFu0c_I_F");
    static BFu0c_I_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_F)");
    check_field_offset(lv, v1, 0, "BFu0c_I_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_F(Test_BFu0c_I_F, "BFu0c_I_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_I  {
  unsigned char  :0;
  int v1;
  int v2;
};
//SIG(1 BFu0c_I_I) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_I_I()
{
  {
    init_simple_test("BFu0c_I_I");
    static BFu0c_I_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_I)");
    check_field_offset(lv, v1, 0, "BFu0c_I_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_I(Test_BFu0c_I_I, "BFu0c_I_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Ip  {
  unsigned char  :0;
  int v1;
  int *v2;
};
//SIG(1 BFu0c_I_Ip) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_I_Ip()
{
  {
    init_simple_test("BFu0c_I_Ip");
    static BFu0c_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_I_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Ip(Test_BFu0c_I_Ip, "BFu0c_I_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_L  {
  unsigned char  :0;
  int v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_I_L) C1{ Fc:0 Fi FL}



static void Test_BFu0c_I_L()
{
  {
    init_simple_test("BFu0c_I_L");
    static BFu0c_I_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_L)");
    check_field_offset(lv, v1, 0, "BFu0c_I_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_I_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_L(Test_BFu0c_I_L, "BFu0c_I_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_S  {
  unsigned char  :0;
  int v1;
  short v2;
};
//SIG(1 BFu0c_I_S) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_I_S()
{
  {
    init_simple_test("BFu0c_I_S");
    static BFu0c_I_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_S)");
    check_field_offset(lv, v1, 0, "BFu0c_I_S.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_S(Test_BFu0c_I_S, "BFu0c_I_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Uc  {
  unsigned char  :0;
  int v1;
  unsigned char v2;
};
//SIG(1 BFu0c_I_Uc) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_I_Uc()
{
  {
    init_simple_test("BFu0c_I_Uc");
    static BFu0c_I_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Uc(Test_BFu0c_I_Uc, "BFu0c_I_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Ui  {
  unsigned char  :0;
  int v1;
  unsigned int v2;
};
//SIG(1 BFu0c_I_Ui) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_I_Ui()
{
  {
    init_simple_test("BFu0c_I_Ui");
    static BFu0c_I_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Ui(Test_BFu0c_I_Ui, "BFu0c_I_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Ul  {
  unsigned char  :0;
  int v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_I_Ul) C1{ Fc:0 Fi FL}



static void Test_BFu0c_I_Ul()
{
  {
    init_simple_test("BFu0c_I_Ul");
    static BFu0c_I_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_I_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Ul(Test_BFu0c_I_Ul, "BFu0c_I_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Us  {
  unsigned char  :0;
  int v1;
  unsigned short v2;
};
//SIG(1 BFu0c_I_Us) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_I_Us()
{
  {
    init_simple_test("BFu0c_I_Us");
    static BFu0c_I_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_I_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0c_I_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Us(Test_BFu0c_I_Us, "BFu0c_I_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_I_Vp  {
  unsigned char  :0;
  int v1;
  void *v2;
};
//SIG(1 BFu0c_I_Vp) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_I_Vp()
{
  {
    init_simple_test("BFu0c_I_Vp");
    static BFu0c_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_I_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_I_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_I_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_I_Vp(Test_BFu0c_I_Vp, "BFu0c_I_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip  {
  unsigned char  :0;
  int *v1;
};
//SIG(1 BFu0c_Ip) C1{ Fc:0 Fp}



static void Test_BFu0c_Ip()
{
  {
    init_simple_test("BFu0c_Ip");
    static BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip(Test_BFu0c_Ip, "BFu0c_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu0c  {
  unsigned char  :0;
  int *v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Ip_BFu0c) C1{ Fc:0 Fp Fc:0}



static void Test_BFu0c_Ip_BFu0c()
{
  {
    init_simple_test("BFu0c_Ip_BFu0c");
    static BFu0c_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu0c(Test_BFu0c_Ip_BFu0c, "BFu0c_Ip_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu0i  {
  unsigned char  :0;
  int *v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Ip_BFu0i) C1{ Fc:0 Fp Fi:0}



static void Test_BFu0c_Ip_BFu0i()
{
  {
    init_simple_test("BFu0c_Ip_BFu0i");
    static BFu0c_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu0i(Test_BFu0c_Ip_BFu0i, "BFu0c_Ip_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu0ll  {
  unsigned char  :0;
  int *v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Ip_BFu0ll) C1{ Fc:0 Fp FL:0}



static void Test_BFu0c_Ip_BFu0ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu0ll");
    static BFu0c_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu0ll(Test_BFu0c_Ip_BFu0ll, "BFu0c_Ip_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu0s  {
  unsigned char  :0;
  int *v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Ip_BFu0s) C1{ Fc:0 Fp Fs:0}



static void Test_BFu0c_Ip_BFu0s()
{
  {
    init_simple_test("BFu0c_Ip_BFu0s");
    static BFu0c_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu0s(Test_BFu0c_Ip_BFu0s, "BFu0c_Ip_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu15i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Ip_BFu15i) C1{ Fc:0 Fp Fi:15}



static void Test_BFu0c_Ip_BFu15i()
{
  {
    init_simple_test("BFu0c_Ip_BFu15i");
    static BFu0c_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Ip_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Ip_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu15i(Test_BFu0c_Ip_BFu15i, "BFu0c_Ip_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu15ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Ip_BFu15ll) C1{ Fc:0 Fp FL:15}



static void Test_BFu0c_Ip_BFu15ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu15ll");
    static BFu0c_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Ip_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Ip_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu15ll(Test_BFu0c_Ip_BFu15ll, "BFu0c_Ip_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu15s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Ip_BFu15s) C1{ Fc:0 Fp Fs:15}



static void Test_BFu0c_Ip_BFu15s()
{
  {
    init_simple_test("BFu0c_Ip_BFu15s");
    static BFu0c_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Ip_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Ip_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu15s(Test_BFu0c_Ip_BFu15s, "BFu0c_Ip_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu16i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Ip_BFu16i) C1{ Fc:0 Fp Fi:16}



static void Test_BFu0c_Ip_BFu16i()
{
  {
    init_simple_test("BFu0c_Ip_BFu16i");
    static BFu0c_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Ip_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Ip_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu16i(Test_BFu0c_Ip_BFu16i, "BFu0c_Ip_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu16ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Ip_BFu16ll) C1{ Fc:0 Fp FL:16}



static void Test_BFu0c_Ip_BFu16ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu16ll");
    static BFu0c_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Ip_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Ip_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu16ll(Test_BFu0c_Ip_BFu16ll, "BFu0c_Ip_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu16s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Ip_BFu16s) C1{ Fc:0 Fp Fs:16}



static void Test_BFu0c_Ip_BFu16s()
{
  {
    init_simple_test("BFu0c_Ip_BFu16s");
    static BFu0c_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Ip_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Ip_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu16s(Test_BFu0c_Ip_BFu16s, "BFu0c_Ip_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu17i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Ip_BFu17i) C1{ Fc:0 Fp Fi:17}



static void Test_BFu0c_Ip_BFu17i()
{
  {
    init_simple_test("BFu0c_Ip_BFu17i");
    static BFu0c_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0c_Ip_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0c_Ip_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu17i(Test_BFu0c_Ip_BFu17i, "BFu0c_Ip_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu17ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Ip_BFu17ll) C1{ Fc:0 Fp FL:17}



static void Test_BFu0c_Ip_BFu17ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu17ll");
    static BFu0c_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0c_Ip_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0c_Ip_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu17ll(Test_BFu0c_Ip_BFu17ll, "BFu0c_Ip_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu1c  {
  unsigned char  :0;
  int *v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Ip_BFu1c) C1{ Fc:0 Fp Fc:1}



static void Test_BFu0c_Ip_BFu1c()
{
  {
    init_simple_test("BFu0c_Ip_BFu1c");
    static BFu0c_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Ip_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu1c(Test_BFu0c_Ip_BFu1c, "BFu0c_Ip_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu1i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Ip_BFu1i) C1{ Fc:0 Fp Fi:1}



static void Test_BFu0c_Ip_BFu1i()
{
  {
    init_simple_test("BFu0c_Ip_BFu1i");
    static BFu0c_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Ip_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu1i(Test_BFu0c_Ip_BFu1i, "BFu0c_Ip_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu1ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Ip_BFu1ll) C1{ Fc:0 Fp FL:1}



static void Test_BFu0c_Ip_BFu1ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu1ll");
    static BFu0c_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Ip_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu1ll(Test_BFu0c_Ip_BFu1ll, "BFu0c_Ip_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu1s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Ip_BFu1s) C1{ Fc:0 Fp Fs:1}



static void Test_BFu0c_Ip_BFu1s()
{
  {
    init_simple_test("BFu0c_Ip_BFu1s");
    static BFu0c_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Ip_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu1s(Test_BFu0c_Ip_BFu1s, "BFu0c_Ip_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu31i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Ip_BFu31i) C1{ Fc:0 Fp Fi:31}



static void Test_BFu0c_Ip_BFu31i()
{
  {
    init_simple_test("BFu0c_Ip_BFu31i");
    static BFu0c_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0c_Ip_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0c_Ip_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu31i(Test_BFu0c_Ip_BFu31i, "BFu0c_Ip_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu31ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Ip_BFu31ll) C1{ Fc:0 Fp FL:31}



static void Test_BFu0c_Ip_BFu31ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu31ll");
    static BFu0c_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0c_Ip_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0c_Ip_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu31ll(Test_BFu0c_Ip_BFu31ll, "BFu0c_Ip_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu32i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Ip_BFu32i) C1{ Fc:0 Fp Fi:32}



static void Test_BFu0c_Ip_BFu32i()
{
  {
    init_simple_test("BFu0c_Ip_BFu32i");
    static BFu0c_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0c_Ip_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0c_Ip_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu32i(Test_BFu0c_Ip_BFu32i, "BFu0c_Ip_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu32ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Ip_BFu32ll) C1{ Fc:0 Fp FL:32}



static void Test_BFu0c_Ip_BFu32ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu32ll");
    static BFu0c_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0c_Ip_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0c_Ip_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu32ll(Test_BFu0c_Ip_BFu32ll, "BFu0c_Ip_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu33  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Ip_BFu33) C1{ Fc:0 Fp FL:33}



static void Test_BFu0c_Ip_BFu33()
{
  {
    init_simple_test("BFu0c_Ip_BFu33");
    static BFu0c_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_Ip_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_Ip_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu33(Test_BFu0c_Ip_BFu33, "BFu0c_Ip_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu7c  {
  unsigned char  :0;
  int *v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Ip_BFu7c) C1{ Fc:0 Fp Fc:7}



static void Test_BFu0c_Ip_BFu7c()
{
  {
    init_simple_test("BFu0c_Ip_BFu7c");
    static BFu0c_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Ip_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Ip_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu7c(Test_BFu0c_Ip_BFu7c, "BFu0c_Ip_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu7i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Ip_BFu7i) C1{ Fc:0 Fp Fi:7}



static void Test_BFu0c_Ip_BFu7i()
{
  {
    init_simple_test("BFu0c_Ip_BFu7i");
    static BFu0c_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Ip_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Ip_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu7i(Test_BFu0c_Ip_BFu7i, "BFu0c_Ip_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu7ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Ip_BFu7ll) C1{ Fc:0 Fp FL:7}



static void Test_BFu0c_Ip_BFu7ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu7ll");
    static BFu0c_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Ip_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Ip_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu7ll(Test_BFu0c_Ip_BFu7ll, "BFu0c_Ip_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu7s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Ip_BFu7s) C1{ Fc:0 Fp Fs:7}



static void Test_BFu0c_Ip_BFu7s()
{
  {
    init_simple_test("BFu0c_Ip_BFu7s");
    static BFu0c_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Ip_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Ip_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu7s(Test_BFu0c_Ip_BFu7s, "BFu0c_Ip_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu8c  {
  unsigned char  :0;
  int *v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Ip_BFu8c) C1{ Fc:0 Fp Fc:8}



static void Test_BFu0c_Ip_BFu8c()
{
  {
    init_simple_test("BFu0c_Ip_BFu8c");
    static BFu0c_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Ip_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Ip_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu8c(Test_BFu0c_Ip_BFu8c, "BFu0c_Ip_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu8i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Ip_BFu8i) C1{ Fc:0 Fp Fi:8}



static void Test_BFu0c_Ip_BFu8i()
{
  {
    init_simple_test("BFu0c_Ip_BFu8i");
    static BFu0c_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Ip_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Ip_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu8i(Test_BFu0c_Ip_BFu8i, "BFu0c_Ip_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu8ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Ip_BFu8ll) C1{ Fc:0 Fp FL:8}



static void Test_BFu0c_Ip_BFu8ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu8ll");
    static BFu0c_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Ip_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Ip_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu8ll(Test_BFu0c_Ip_BFu8ll, "BFu0c_Ip_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu8s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Ip_BFu8s) C1{ Fc:0 Fp Fs:8}



static void Test_BFu0c_Ip_BFu8s()
{
  {
    init_simple_test("BFu0c_Ip_BFu8s");
    static BFu0c_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Ip_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Ip_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu8s(Test_BFu0c_Ip_BFu8s, "BFu0c_Ip_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu9i  {
  unsigned char  :0;
  int *v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Ip_BFu9i) C1{ Fc:0 Fp Fi:9}



static void Test_BFu0c_Ip_BFu9i()
{
  {
    init_simple_test("BFu0c_Ip_BFu9i");
    static BFu0c_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Ip_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Ip_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu9i(Test_BFu0c_Ip_BFu9i, "BFu0c_Ip_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu9ll  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Ip_BFu9ll) C1{ Fc:0 Fp FL:9}



static void Test_BFu0c_Ip_BFu9ll()
{
  {
    init_simple_test("BFu0c_Ip_BFu9ll");
    static BFu0c_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Ip_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Ip_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu9ll(Test_BFu0c_Ip_BFu9ll, "BFu0c_Ip_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_BFu9s  {
  unsigned char  :0;
  int *v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Ip_BFu9s) C1{ Fc:0 Fp Fs:9}



static void Test_BFu0c_Ip_BFu9s()
{
  {
    init_simple_test("BFu0c_Ip_BFu9s");
    static BFu0c_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Ip_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Ip_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_BFu9s(Test_BFu0c_Ip_BFu9s, "BFu0c_Ip_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_C  {
  unsigned char  :0;
  int *v1;
  char v2;
};
//SIG(1 BFu0c_Ip_C) C1{ Fc:0 Fp Fc}



static void Test_BFu0c_Ip_C()
{
  {
    init_simple_test("BFu0c_Ip_C");
    static BFu0c_Ip_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_C(Test_BFu0c_Ip_C, "BFu0c_Ip_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_D  {
  unsigned char  :0;
  int *v1;
  double v2;
};
//SIG(1 BFu0c_Ip_D) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Ip_D()
{
  {
    init_simple_test("BFu0c_Ip_D");
    static BFu0c_Ip_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_D(Test_BFu0c_Ip_D, "BFu0c_Ip_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_F  {
  unsigned char  :0;
  int *v1;
  float v2;
};
//SIG(1 BFu0c_Ip_F) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Ip_F()
{
  {
    init_simple_test("BFu0c_Ip_F");
    static BFu0c_Ip_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_F(Test_BFu0c_Ip_F, "BFu0c_Ip_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_I  {
  unsigned char  :0;
  int *v1;
  int v2;
};
//SIG(1 BFu0c_Ip_I) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Ip_I()
{
  {
    init_simple_test("BFu0c_Ip_I");
    static BFu0c_Ip_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_I(Test_BFu0c_Ip_I, "BFu0c_Ip_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Ip  {
  unsigned char  :0;
  int *v1;
  int *v2;
};
//SIG(1 BFu0c_Ip_Ip) C1{ Fc:0 Fp[2]}



static void Test_BFu0c_Ip_Ip()
{
  {
    init_simple_test("BFu0c_Ip_Ip");
    static BFu0c_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Ip(Test_BFu0c_Ip_Ip, "BFu0c_Ip_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_L  {
  unsigned char  :0;
  int *v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Ip_L) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Ip_L()
{
  {
    init_simple_test("BFu0c_Ip_L");
    static BFu0c_Ip_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_L(Test_BFu0c_Ip_L, "BFu0c_Ip_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_S  {
  unsigned char  :0;
  int *v1;
  short v2;
};
//SIG(1 BFu0c_Ip_S) C1{ Fc:0 Fp Fs}



static void Test_BFu0c_Ip_S()
{
  {
    init_simple_test("BFu0c_Ip_S");
    static BFu0c_Ip_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_S(Test_BFu0c_Ip_S, "BFu0c_Ip_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Uc  {
  unsigned char  :0;
  int *v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Ip_Uc) C1{ Fc:0 Fp Fc}



static void Test_BFu0c_Ip_Uc()
{
  {
    init_simple_test("BFu0c_Ip_Uc");
    static BFu0c_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Uc(Test_BFu0c_Ip_Uc, "BFu0c_Ip_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Ui  {
  unsigned char  :0;
  int *v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Ip_Ui) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Ip_Ui()
{
  {
    init_simple_test("BFu0c_Ip_Ui");
    static BFu0c_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Ui(Test_BFu0c_Ip_Ui, "BFu0c_Ip_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Ul  {
  unsigned char  :0;
  int *v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Ip_Ul) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Ip_Ul()
{
  {
    init_simple_test("BFu0c_Ip_Ul");
    static BFu0c_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Ul(Test_BFu0c_Ip_Ul, "BFu0c_Ip_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Us  {
  unsigned char  :0;
  int *v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Ip_Us) C1{ Fc:0 Fp Fs}



static void Test_BFu0c_Ip_Us()
{
  {
    init_simple_test("BFu0c_Ip_Us");
    static BFu0c_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Us(Test_BFu0c_Ip_Us, "BFu0c_Ip_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ip_Vp  {
  unsigned char  :0;
  int *v1;
  void *v2;
};
//SIG(1 BFu0c_Ip_Vp) C1{ Fc:0 Fp[2]}



static void Test_BFu0c_Ip_Vp()
{
  {
    init_simple_test("BFu0c_Ip_Vp");
    static BFu0c_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ip_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Ip_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ip_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ip_Vp(Test_BFu0c_Ip_Vp, "BFu0c_Ip_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L  {
  unsigned char  :0;
  __tsi64 v1;
};
//SIG(1 BFu0c_L) C1{ Fc:0 FL}



static void Test_BFu0c_L()
{
  {
    init_simple_test("BFu0c_L");
    static BFu0c_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L)");
    check_field_offset(lv, v1, 0, "BFu0c_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_L(Test_BFu0c_L, "BFu0c_L", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu0c  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_L_BFu0c) C1{ Fc:0 FL Fc:0}



static void Test_BFu0c_L_BFu0c()
{
  {
    init_simple_test("BFu0c_L_BFu0c");
    static BFu0c_L_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu0c(Test_BFu0c_L_BFu0c, "BFu0c_L_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu0i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_L_BFu0i) C1{ Fc:0 FL Fi:0}



static void Test_BFu0c_L_BFu0i()
{
  {
    init_simple_test("BFu0c_L_BFu0i");
    static BFu0c_L_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu0i(Test_BFu0c_L_BFu0i, "BFu0c_L_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu0ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_L_BFu0ll) C1{ Fc:0 FL FL:0}



static void Test_BFu0c_L_BFu0ll()
{
  {
    init_simple_test("BFu0c_L_BFu0ll");
    static BFu0c_L_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu0ll(Test_BFu0c_L_BFu0ll, "BFu0c_L_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu0s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_L_BFu0s) C1{ Fc:0 FL Fs:0}



static void Test_BFu0c_L_BFu0s()
{
  {
    init_simple_test("BFu0c_L_BFu0s");
    static BFu0c_L_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu0s(Test_BFu0c_L_BFu0s, "BFu0c_L_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu15i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_L_BFu15i) C1{ Fc:0 FL Fi:15}



static void Test_BFu0c_L_BFu15i()
{
  {
    init_simple_test("BFu0c_L_BFu15i");
    static BFu0c_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_L_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_L_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu15i(Test_BFu0c_L_BFu15i, "BFu0c_L_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu15ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_L_BFu15ll) C1{ Fc:0 FL FL:15}



static void Test_BFu0c_L_BFu15ll()
{
  {
    init_simple_test("BFu0c_L_BFu15ll");
    static BFu0c_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_L_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_L_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu15ll(Test_BFu0c_L_BFu15ll, "BFu0c_L_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu15s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_L_BFu15s) C1{ Fc:0 FL Fs:15}



static void Test_BFu0c_L_BFu15s()
{
  {
    init_simple_test("BFu0c_L_BFu15s");
    static BFu0c_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_L_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_L_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu15s(Test_BFu0c_L_BFu15s, "BFu0c_L_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu16i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_L_BFu16i) C1{ Fc:0 FL Fi:16}



static void Test_BFu0c_L_BFu16i()
{
  {
    init_simple_test("BFu0c_L_BFu16i");
    static BFu0c_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_L_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_L_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu16i(Test_BFu0c_L_BFu16i, "BFu0c_L_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu16ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_L_BFu16ll) C1{ Fc:0 FL FL:16}



static void Test_BFu0c_L_BFu16ll()
{
  {
    init_simple_test("BFu0c_L_BFu16ll");
    static BFu0c_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_L_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_L_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu16ll(Test_BFu0c_L_BFu16ll, "BFu0c_L_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu16s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_L_BFu16s) C1{ Fc:0 FL Fs:16}



static void Test_BFu0c_L_BFu16s()
{
  {
    init_simple_test("BFu0c_L_BFu16s");
    static BFu0c_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_L_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_L_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu16s(Test_BFu0c_L_BFu16s, "BFu0c_L_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu17i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_L_BFu17i) C1{ Fc:0 FL Fi:17}



static void Test_BFu0c_L_BFu17i()
{
  {
    init_simple_test("BFu0c_L_BFu17i");
    static BFu0c_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_L_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_L_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu17i(Test_BFu0c_L_BFu17i, "BFu0c_L_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu17ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_L_BFu17ll) C1{ Fc:0 FL FL:17}



static void Test_BFu0c_L_BFu17ll()
{
  {
    init_simple_test("BFu0c_L_BFu17ll");
    static BFu0c_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_L_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_L_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu17ll(Test_BFu0c_L_BFu17ll, "BFu0c_L_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu1c  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_L_BFu1c) C1{ Fc:0 FL Fc:1}



static void Test_BFu0c_L_BFu1c()
{
  {
    init_simple_test("BFu0c_L_BFu1c");
    static BFu0c_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_L_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu1c(Test_BFu0c_L_BFu1c, "BFu0c_L_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu1i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_L_BFu1i) C1{ Fc:0 FL Fi:1}



static void Test_BFu0c_L_BFu1i()
{
  {
    init_simple_test("BFu0c_L_BFu1i");
    static BFu0c_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_L_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu1i(Test_BFu0c_L_BFu1i, "BFu0c_L_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu1ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_L_BFu1ll) C1{ Fc:0 FL FL:1}



static void Test_BFu0c_L_BFu1ll()
{
  {
    init_simple_test("BFu0c_L_BFu1ll");
    static BFu0c_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_L_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu1ll(Test_BFu0c_L_BFu1ll, "BFu0c_L_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu1s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_L_BFu1s) C1{ Fc:0 FL Fs:1}



static void Test_BFu0c_L_BFu1s()
{
  {
    init_simple_test("BFu0c_L_BFu1s");
    static BFu0c_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_L_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu1s(Test_BFu0c_L_BFu1s, "BFu0c_L_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu31i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_L_BFu31i) C1{ Fc:0 FL Fi:31}



static void Test_BFu0c_L_BFu31i()
{
  {
    init_simple_test("BFu0c_L_BFu31i");
    static BFu0c_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_L_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_L_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu31i(Test_BFu0c_L_BFu31i, "BFu0c_L_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu31ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_L_BFu31ll) C1{ Fc:0 FL FL:31}



static void Test_BFu0c_L_BFu31ll()
{
  {
    init_simple_test("BFu0c_L_BFu31ll");
    static BFu0c_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_L_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_L_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu31ll(Test_BFu0c_L_BFu31ll, "BFu0c_L_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu32i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_L_BFu32i) C1{ Fc:0 FL Fi:32}



static void Test_BFu0c_L_BFu32i()
{
  {
    init_simple_test("BFu0c_L_BFu32i");
    static BFu0c_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_L_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_L_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu32i(Test_BFu0c_L_BFu32i, "BFu0c_L_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu32ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_L_BFu32ll) C1{ Fc:0 FL FL:32}



static void Test_BFu0c_L_BFu32ll()
{
  {
    init_simple_test("BFu0c_L_BFu32ll");
    static BFu0c_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_L_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_L_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu32ll(Test_BFu0c_L_BFu32ll, "BFu0c_L_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu33  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_L_BFu33) C1{ Fc:0 FL FL:33}



static void Test_BFu0c_L_BFu33()
{
  {
    init_simple_test("BFu0c_L_BFu33");
    static BFu0c_L_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu0c_L_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu0c_L_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu33(Test_BFu0c_L_BFu33, "BFu0c_L_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu7c  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_L_BFu7c) C1{ Fc:0 FL Fc:7}



static void Test_BFu0c_L_BFu7c()
{
  {
    init_simple_test("BFu0c_L_BFu7c");
    static BFu0c_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_L_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_L_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu7c(Test_BFu0c_L_BFu7c, "BFu0c_L_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu7i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_L_BFu7i) C1{ Fc:0 FL Fi:7}



static void Test_BFu0c_L_BFu7i()
{
  {
    init_simple_test("BFu0c_L_BFu7i");
    static BFu0c_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_L_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_L_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu7i(Test_BFu0c_L_BFu7i, "BFu0c_L_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu7ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_L_BFu7ll) C1{ Fc:0 FL FL:7}



static void Test_BFu0c_L_BFu7ll()
{
  {
    init_simple_test("BFu0c_L_BFu7ll");
    static BFu0c_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_L_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_L_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu7ll(Test_BFu0c_L_BFu7ll, "BFu0c_L_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu7s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_L_BFu7s) C1{ Fc:0 FL Fs:7}



static void Test_BFu0c_L_BFu7s()
{
  {
    init_simple_test("BFu0c_L_BFu7s");
    static BFu0c_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_L_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_L_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu7s(Test_BFu0c_L_BFu7s, "BFu0c_L_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu8c  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_L_BFu8c) C1{ Fc:0 FL Fc:8}



static void Test_BFu0c_L_BFu8c()
{
  {
    init_simple_test("BFu0c_L_BFu8c");
    static BFu0c_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_L_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_L_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu8c(Test_BFu0c_L_BFu8c, "BFu0c_L_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu8i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_L_BFu8i) C1{ Fc:0 FL Fi:8}



static void Test_BFu0c_L_BFu8i()
{
  {
    init_simple_test("BFu0c_L_BFu8i");
    static BFu0c_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_L_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_L_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu8i(Test_BFu0c_L_BFu8i, "BFu0c_L_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu8ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_L_BFu8ll) C1{ Fc:0 FL FL:8}



static void Test_BFu0c_L_BFu8ll()
{
  {
    init_simple_test("BFu0c_L_BFu8ll");
    static BFu0c_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_L_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_L_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu8ll(Test_BFu0c_L_BFu8ll, "BFu0c_L_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu8s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_L_BFu8s) C1{ Fc:0 FL Fs:8}



static void Test_BFu0c_L_BFu8s()
{
  {
    init_simple_test("BFu0c_L_BFu8s");
    static BFu0c_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_L_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_L_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu8s(Test_BFu0c_L_BFu8s, "BFu0c_L_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu9i  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_L_BFu9i) C1{ Fc:0 FL Fi:9}



static void Test_BFu0c_L_BFu9i()
{
  {
    init_simple_test("BFu0c_L_BFu9i");
    static BFu0c_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_L_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_L_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu9i(Test_BFu0c_L_BFu9i, "BFu0c_L_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu9ll  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_L_BFu9ll) C1{ Fc:0 FL FL:9}



static void Test_BFu0c_L_BFu9ll()
{
  {
    init_simple_test("BFu0c_L_BFu9ll");
    static BFu0c_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_L_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_L_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu9ll(Test_BFu0c_L_BFu9ll, "BFu0c_L_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_BFu9s  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_L_BFu9s) C1{ Fc:0 FL Fs:9}



static void Test_BFu0c_L_BFu9s()
{
  {
    init_simple_test("BFu0c_L_BFu9s");
    static BFu0c_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_L_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_L_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_L_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_L_BFu9s(Test_BFu0c_L_BFu9s, "BFu0c_L_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_C  {
  unsigned char  :0;
  __tsi64 v1;
  char v2;
};
//SIG(1 BFu0c_L_C) C1{ Fc:0 FL Fc}



static void Test_BFu0c_L_C()
{
  {
    init_simple_test("BFu0c_L_C");
    static BFu0c_L_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_C)");
    check_field_offset(lv, v1, 0, "BFu0c_L_C.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_C(Test_BFu0c_L_C, "BFu0c_L_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_D  {
  unsigned char  :0;
  __tsi64 v1;
  double v2;
};
//SIG(1 BFu0c_L_D) C1{ Fc:0 FL[2]}



static void Test_BFu0c_L_D()
{
  {
    init_simple_test("BFu0c_L_D");
    static BFu0c_L_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_D)");
    check_field_offset(lv, v1, 0, "BFu0c_L_D.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_D(Test_BFu0c_L_D, "BFu0c_L_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_F  {
  unsigned char  :0;
  __tsi64 v1;
  float v2;
};
//SIG(1 BFu0c_L_F) C1{ Fc:0 FL Fi}



static void Test_BFu0c_L_F()
{
  {
    init_simple_test("BFu0c_L_F");
    static BFu0c_L_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_F)");
    check_field_offset(lv, v1, 0, "BFu0c_L_F.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_F(Test_BFu0c_L_F, "BFu0c_L_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_I  {
  unsigned char  :0;
  __tsi64 v1;
  int v2;
};
//SIG(1 BFu0c_L_I) C1{ Fc:0 FL Fi}



static void Test_BFu0c_L_I()
{
  {
    init_simple_test("BFu0c_L_I");
    static BFu0c_L_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_I)");
    check_field_offset(lv, v1, 0, "BFu0c_L_I.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_I(Test_BFu0c_L_I, "BFu0c_L_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Ip  {
  unsigned char  :0;
  __tsi64 v1;
  int *v2;
};
//SIG(1 BFu0c_L_Ip) C1{ Fc:0 FL Fp}



static void Test_BFu0c_L_Ip()
{
  {
    init_simple_test("BFu0c_L_Ip");
    static BFu0c_L_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Ip(Test_BFu0c_L_Ip, "BFu0c_L_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_L  {
  unsigned char  :0;
  __tsi64 v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_L_L) C1{ Fc:0 FL[2]}



static void Test_BFu0c_L_L()
{
  {
    init_simple_test("BFu0c_L_L");
    static BFu0c_L_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_L)");
    check_field_offset(lv, v1, 0, "BFu0c_L_L.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_L(Test_BFu0c_L_L, "BFu0c_L_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_S  {
  unsigned char  :0;
  __tsi64 v1;
  short v2;
};
//SIG(1 BFu0c_L_S) C1{ Fc:0 FL Fs}



static void Test_BFu0c_L_S()
{
  {
    init_simple_test("BFu0c_L_S");
    static BFu0c_L_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_S)");
    check_field_offset(lv, v1, 0, "BFu0c_L_S.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_S(Test_BFu0c_L_S, "BFu0c_L_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Uc  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned char v2;
};
//SIG(1 BFu0c_L_Uc) C1{ Fc:0 FL Fc}



static void Test_BFu0c_L_Uc()
{
  {
    init_simple_test("BFu0c_L_Uc");
    static BFu0c_L_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Uc(Test_BFu0c_L_Uc, "BFu0c_L_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Ui  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned int v2;
};
//SIG(1 BFu0c_L_Ui) C1{ Fc:0 FL Fi}



static void Test_BFu0c_L_Ui()
{
  {
    init_simple_test("BFu0c_L_Ui");
    static BFu0c_L_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Ui(Test_BFu0c_L_Ui, "BFu0c_L_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Ul  {
  unsigned char  :0;
  __tsi64 v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_L_Ul) C1{ Fc:0 FL[2]}



static void Test_BFu0c_L_Ul()
{
  {
    init_simple_test("BFu0c_L_Ul");
    static BFu0c_L_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Ul(Test_BFu0c_L_Ul, "BFu0c_L_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Us  {
  unsigned char  :0;
  __tsi64 v1;
  unsigned short v2;
};
//SIG(1 BFu0c_L_Us) C1{ Fc:0 FL Fs}



static void Test_BFu0c_L_Us()
{
  {
    init_simple_test("BFu0c_L_Us");
    static BFu0c_L_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Us(Test_BFu0c_L_Us, "BFu0c_L_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_L_Vp  {
  unsigned char  :0;
  __tsi64 v1;
  void *v2;
};
//SIG(1 BFu0c_L_Vp) C1{ Fc:0 FL Fp}



static void Test_BFu0c_L_Vp()
{
  {
    init_simple_test("BFu0c_L_Vp");
    static BFu0c_L_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_L_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_L_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0c_L_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_L_Vp(Test_BFu0c_L_Vp, "BFu0c_L_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S  {
  unsigned char  :0;
  short v1;
};
//SIG(1 BFu0c_S) C1{ Fc:0 Fs}



static void Test_BFu0c_S()
{
  {
    init_simple_test("BFu0c_S");
    static BFu0c_S lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S)");
    check_field_offset(lv, v1, 0, "BFu0c_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_S(Test_BFu0c_S, "BFu0c_S", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu0c  {
  unsigned char  :0;
  short v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_S_BFu0c) C1{ Fc:0 Fs Fc:0}



static void Test_BFu0c_S_BFu0c()
{
  {
    init_simple_test("BFu0c_S_BFu0c");
    static BFu0c_S_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu0c(Test_BFu0c_S_BFu0c, "BFu0c_S_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu0i  {
  unsigned char  :0;
  short v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_S_BFu0i) C1{ Fc:0 Fs Fi:0}



static void Test_BFu0c_S_BFu0i()
{
  {
    init_simple_test("BFu0c_S_BFu0i");
    static BFu0c_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_S_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu0i(Test_BFu0c_S_BFu0i, "BFu0c_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu0ll  {
  unsigned char  :0;
  short v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_S_BFu0ll) C1{ Fc:0 Fs FL:0}



static void Test_BFu0c_S_BFu0ll()
{
  {
    init_simple_test("BFu0c_S_BFu0ll");
    static BFu0c_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu0ll(Test_BFu0c_S_BFu0ll, "BFu0c_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu0s  {
  unsigned char  :0;
  short v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_S_BFu0s) C1{ Fc:0 Fs Fs:0}



static void Test_BFu0c_S_BFu0s()
{
  {
    init_simple_test("BFu0c_S_BFu0s");
    static BFu0c_S_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu0s(Test_BFu0c_S_BFu0s, "BFu0c_S_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu15i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_S_BFu15i) C1{ Fc:0 Fs Fi:15}



static void Test_BFu0c_S_BFu15i()
{
  {
    init_simple_test("BFu0c_S_BFu15i");
    static BFu0c_S_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_S_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_S_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu15i(Test_BFu0c_S_BFu15i, "BFu0c_S_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu15ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_S_BFu15ll) C1{ Fc:0 Fs FL:15}



static void Test_BFu0c_S_BFu15ll()
{
  {
    init_simple_test("BFu0c_S_BFu15ll");
    static BFu0c_S_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_S_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_S_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu15ll(Test_BFu0c_S_BFu15ll, "BFu0c_S_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu15s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_S_BFu15s) C1{ Fc:0 Fs Fs:15}



static void Test_BFu0c_S_BFu15s()
{
  {
    init_simple_test("BFu0c_S_BFu15s");
    static BFu0c_S_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_S_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_S_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu15s(Test_BFu0c_S_BFu15s, "BFu0c_S_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu16i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_S_BFu16i) C1{ Fc:0 Fs Fi:16}



static void Test_BFu0c_S_BFu16i()
{
  {
    init_simple_test("BFu0c_S_BFu16i");
    static BFu0c_S_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_S_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_S_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu16i(Test_BFu0c_S_BFu16i, "BFu0c_S_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu16ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_S_BFu16ll) C1{ Fc:0 Fs FL:16}



static void Test_BFu0c_S_BFu16ll()
{
  {
    init_simple_test("BFu0c_S_BFu16ll");
    static BFu0c_S_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_S_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_S_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu16ll(Test_BFu0c_S_BFu16ll, "BFu0c_S_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu16s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_S_BFu16s) C1{ Fc:0 Fs Fs:16}



static void Test_BFu0c_S_BFu16s()
{
  {
    init_simple_test("BFu0c_S_BFu16s");
    static BFu0c_S_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_S_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_S_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu16s(Test_BFu0c_S_BFu16s, "BFu0c_S_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu17i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_S_BFu17i) C1{ Fc:0 Fs Fi:17}



static void Test_BFu0c_S_BFu17i()
{
  {
    init_simple_test("BFu0c_S_BFu17i");
    static BFu0c_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_S_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_S_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu17i(Test_BFu0c_S_BFu17i, "BFu0c_S_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu17ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_S_BFu17ll) C1{ Fc:0 Fs FL:17}



static void Test_BFu0c_S_BFu17ll()
{
  {
    init_simple_test("BFu0c_S_BFu17ll");
    static BFu0c_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0c_S_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0c_S_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu17ll(Test_BFu0c_S_BFu17ll, "BFu0c_S_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu1c  {
  unsigned char  :0;
  short v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_S_BFu1c) C1{ Fc:0 Fs Fc:1}



static void Test_BFu0c_S_BFu1c()
{
  {
    init_simple_test("BFu0c_S_BFu1c");
    static BFu0c_S_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_S_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu1c(Test_BFu0c_S_BFu1c, "BFu0c_S_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu1i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_S_BFu1i) C1{ Fc:0 Fs Fi:1}



static void Test_BFu0c_S_BFu1i()
{
  {
    init_simple_test("BFu0c_S_BFu1i");
    static BFu0c_S_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_S_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu1i(Test_BFu0c_S_BFu1i, "BFu0c_S_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu1ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_S_BFu1ll) C1{ Fc:0 Fs FL:1}



static void Test_BFu0c_S_BFu1ll()
{
  {
    init_simple_test("BFu0c_S_BFu1ll");
    static BFu0c_S_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_S_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu1ll(Test_BFu0c_S_BFu1ll, "BFu0c_S_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu1s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_S_BFu1s) C1{ Fc:0 Fs Fs:1}



static void Test_BFu0c_S_BFu1s()
{
  {
    init_simple_test("BFu0c_S_BFu1s");
    static BFu0c_S_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_S_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu1s(Test_BFu0c_S_BFu1s, "BFu0c_S_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu31i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_S_BFu31i) C1{ Fc:0 Fs Fi:31}



static void Test_BFu0c_S_BFu31i()
{
  {
    init_simple_test("BFu0c_S_BFu31i");
    static BFu0c_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_S_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_S_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu31i(Test_BFu0c_S_BFu31i, "BFu0c_S_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu31ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_S_BFu31ll) C1{ Fc:0 Fs FL:31}



static void Test_BFu0c_S_BFu31ll()
{
  {
    init_simple_test("BFu0c_S_BFu31ll");
    static BFu0c_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0c_S_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0c_S_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu31ll(Test_BFu0c_S_BFu31ll, "BFu0c_S_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu32i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_S_BFu32i) C1{ Fc:0 Fs Fi:32}



static void Test_BFu0c_S_BFu32i()
{
  {
    init_simple_test("BFu0c_S_BFu32i");
    static BFu0c_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_S_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_S_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu32i(Test_BFu0c_S_BFu32i, "BFu0c_S_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu32ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_S_BFu32ll) C1{ Fc:0 Fs FL:32}



static void Test_BFu0c_S_BFu32ll()
{
  {
    init_simple_test("BFu0c_S_BFu32ll");
    static BFu0c_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0c_S_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0c_S_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu32ll(Test_BFu0c_S_BFu32ll, "BFu0c_S_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu33  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_S_BFu33) C1{ Fc:0 Fs FL:33}



static void Test_BFu0c_S_BFu33()
{
  {
    init_simple_test("BFu0c_S_BFu33");
    static BFu0c_S_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0c_S_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0c_S_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu33(Test_BFu0c_S_BFu33, "BFu0c_S_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu7c  {
  unsigned char  :0;
  short v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_S_BFu7c) C1{ Fc:0 Fs Fc:7}



static void Test_BFu0c_S_BFu7c()
{
  {
    init_simple_test("BFu0c_S_BFu7c");
    static BFu0c_S_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_S_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_S_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu7c(Test_BFu0c_S_BFu7c, "BFu0c_S_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu7i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_S_BFu7i) C1{ Fc:0 Fs Fi:7}



static void Test_BFu0c_S_BFu7i()
{
  {
    init_simple_test("BFu0c_S_BFu7i");
    static BFu0c_S_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_S_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_S_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu7i(Test_BFu0c_S_BFu7i, "BFu0c_S_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu7ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_S_BFu7ll) C1{ Fc:0 Fs FL:7}



static void Test_BFu0c_S_BFu7ll()
{
  {
    init_simple_test("BFu0c_S_BFu7ll");
    static BFu0c_S_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_S_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_S_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu7ll(Test_BFu0c_S_BFu7ll, "BFu0c_S_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu7s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_S_BFu7s) C1{ Fc:0 Fs Fs:7}



static void Test_BFu0c_S_BFu7s()
{
  {
    init_simple_test("BFu0c_S_BFu7s");
    static BFu0c_S_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_S_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_S_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu7s(Test_BFu0c_S_BFu7s, "BFu0c_S_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu8c  {
  unsigned char  :0;
  short v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_S_BFu8c) C1{ Fc:0 Fs Fc:8}



static void Test_BFu0c_S_BFu8c()
{
  {
    init_simple_test("BFu0c_S_BFu8c");
    static BFu0c_S_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_S_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_S_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu8c(Test_BFu0c_S_BFu8c, "BFu0c_S_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu8i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_S_BFu8i) C1{ Fc:0 Fs Fi:8}



static void Test_BFu0c_S_BFu8i()
{
  {
    init_simple_test("BFu0c_S_BFu8i");
    static BFu0c_S_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_S_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_S_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu8i(Test_BFu0c_S_BFu8i, "BFu0c_S_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu8ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_S_BFu8ll) C1{ Fc:0 Fs FL:8}



static void Test_BFu0c_S_BFu8ll()
{
  {
    init_simple_test("BFu0c_S_BFu8ll");
    static BFu0c_S_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_S_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_S_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu8ll(Test_BFu0c_S_BFu8ll, "BFu0c_S_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu8s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_S_BFu8s) C1{ Fc:0 Fs Fs:8}



static void Test_BFu0c_S_BFu8s()
{
  {
    init_simple_test("BFu0c_S_BFu8s");
    static BFu0c_S_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_S_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_S_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu8s(Test_BFu0c_S_BFu8s, "BFu0c_S_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu9i  {
  unsigned char  :0;
  short v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_S_BFu9i) C1{ Fc:0 Fs Fi:9}



static void Test_BFu0c_S_BFu9i()
{
  {
    init_simple_test("BFu0c_S_BFu9i");
    static BFu0c_S_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_S_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_S_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu9i(Test_BFu0c_S_BFu9i, "BFu0c_S_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu9ll  {
  unsigned char  :0;
  short v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_S_BFu9ll) C1{ Fc:0 Fs FL:9}



static void Test_BFu0c_S_BFu9ll()
{
  {
    init_simple_test("BFu0c_S_BFu9ll");
    static BFu0c_S_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_S_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_S_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu9ll(Test_BFu0c_S_BFu9ll, "BFu0c_S_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_BFu9s  {
  unsigned char  :0;
  short v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_S_BFu9s) C1{ Fc:0 Fs Fs:9}



static void Test_BFu0c_S_BFu9s()
{
  {
    init_simple_test("BFu0c_S_BFu9s");
    static BFu0c_S_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_S_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_S_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_S_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_S_BFu9s(Test_BFu0c_S_BFu9s, "BFu0c_S_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_C  {
  unsigned char  :0;
  short v1;
  char v2;
};
//SIG(1 BFu0c_S_C) C1{ Fc:0 Fs Fc}



static void Test_BFu0c_S_C()
{
  {
    init_simple_test("BFu0c_S_C");
    static BFu0c_S_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_C)");
    check_field_offset(lv, v1, 0, "BFu0c_S_C.v1");
    check_field_offset(lv, v2, 2, "BFu0c_S_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_C(Test_BFu0c_S_C, "BFu0c_S_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_D  {
  unsigned char  :0;
  short v1;
  double v2;
};
//SIG(1 BFu0c_S_D) C1{ Fc:0 Fs FL}



static void Test_BFu0c_S_D()
{
  {
    init_simple_test("BFu0c_S_D");
    static BFu0c_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_D)");
    check_field_offset(lv, v1, 0, "BFu0c_S_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_S_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_D(Test_BFu0c_S_D, "BFu0c_S_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_F  {
  unsigned char  :0;
  short v1;
  float v2;
};
//SIG(1 BFu0c_S_F) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_S_F()
{
  {
    init_simple_test("BFu0c_S_F");
    static BFu0c_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_F)");
    check_field_offset(lv, v1, 0, "BFu0c_S_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_S_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_F(Test_BFu0c_S_F, "BFu0c_S_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_I  {
  unsigned char  :0;
  short v1;
  int v2;
};
//SIG(1 BFu0c_S_I) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_S_I()
{
  {
    init_simple_test("BFu0c_S_I");
    static BFu0c_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_I)");
    check_field_offset(lv, v1, 0, "BFu0c_S_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_S_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_I(Test_BFu0c_S_I, "BFu0c_S_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Ip  {
  unsigned char  :0;
  short v1;
  int *v2;
};
//SIG(1 BFu0c_S_Ip) C1{ Fc:0 Fs Fp}



static void Test_BFu0c_S_Ip()
{
  {
    init_simple_test("BFu0c_S_Ip");
    static BFu0c_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_S_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Ip(Test_BFu0c_S_Ip, "BFu0c_S_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_L  {
  unsigned char  :0;
  short v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_S_L) C1{ Fc:0 Fs FL}



static void Test_BFu0c_S_L()
{
  {
    init_simple_test("BFu0c_S_L");
    static BFu0c_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_L)");
    check_field_offset(lv, v1, 0, "BFu0c_S_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_S_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_L(Test_BFu0c_S_L, "BFu0c_S_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_S  {
  unsigned char  :0;
  short v1;
  short v2;
};
//SIG(1 BFu0c_S_S) C1{ Fc:0 Fs[2]}



static void Test_BFu0c_S_S()
{
  {
    init_simple_test("BFu0c_S_S");
    static BFu0c_S_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_S)");
    check_field_offset(lv, v1, 0, "BFu0c_S_S.v1");
    check_field_offset(lv, v2, 2, "BFu0c_S_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_S(Test_BFu0c_S_S, "BFu0c_S_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Uc  {
  unsigned char  :0;
  short v1;
  unsigned char v2;
};
//SIG(1 BFu0c_S_Uc) C1{ Fc:0 Fs Fc}



static void Test_BFu0c_S_Uc()
{
  {
    init_simple_test("BFu0c_S_Uc");
    static BFu0c_S_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Uc.v1");
    check_field_offset(lv, v2, 2, "BFu0c_S_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Uc(Test_BFu0c_S_Uc, "BFu0c_S_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Ui  {
  unsigned char  :0;
  short v1;
  unsigned int v2;
};
//SIG(1 BFu0c_S_Ui) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_S_Ui()
{
  {
    init_simple_test("BFu0c_S_Ui");
    static BFu0c_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_S_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_S_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Ui(Test_BFu0c_S_Ui, "BFu0c_S_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Ul  {
  unsigned char  :0;
  short v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_S_Ul) C1{ Fc:0 Fs FL}



static void Test_BFu0c_S_Ul()
{
  {
    init_simple_test("BFu0c_S_Ul");
    static BFu0c_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_S_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Ul(Test_BFu0c_S_Ul, "BFu0c_S_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Us  {
  unsigned char  :0;
  short v1;
  unsigned short v2;
};
//SIG(1 BFu0c_S_Us) C1{ Fc:0 Fs[2]}



static void Test_BFu0c_S_Us()
{
  {
    init_simple_test("BFu0c_S_Us");
    static BFu0c_S_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_S_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0c_S_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Us(Test_BFu0c_S_Us, "BFu0c_S_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_S_Vp  {
  unsigned char  :0;
  short v1;
  void *v2;
};
//SIG(1 BFu0c_S_Vp) C1{ Fc:0 Fs Fp}



static void Test_BFu0c_S_Vp()
{
  {
    init_simple_test("BFu0c_S_Vp");
    static BFu0c_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_S_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_S_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_S_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_S_Vp(Test_BFu0c_S_Vp, "BFu0c_S_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc  {
  unsigned char  :0;
  unsigned char v1;
};
//SIG(1 BFu0c_Uc) C1{ Fc:0 Fc}



static void Test_BFu0c_Uc()
{
  {
    init_simple_test("BFu0c_Uc");
    static BFu0c_Uc lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc(Test_BFu0c_Uc, "BFu0c_Uc", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu0c  {
  unsigned char  :0;
  unsigned char v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Uc_BFu0c) C1{ Fc:0 Fc Fc:0}



static void Test_BFu0c_Uc_BFu0c()
{
  {
    init_simple_test("BFu0c_Uc_BFu0c");
    static BFu0c_Uc_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu0c_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu0c(Test_BFu0c_Uc_BFu0c, "BFu0c_Uc_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu0i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Uc_BFu0i) C1{ Fc:0 Fc Fi:0}



static void Test_BFu0c_Uc_BFu0i()
{
  {
    init_simple_test("BFu0c_Uc_BFu0i");
    static BFu0c_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu0i(Test_BFu0c_Uc_BFu0i, "BFu0c_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu0ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Uc_BFu0ll) C1{ Fc:0 Fc FL:0}



static void Test_BFu0c_Uc_BFu0ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu0ll");
    static BFu0c_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu0ll(Test_BFu0c_Uc_BFu0ll, "BFu0c_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu0s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Uc_BFu0s) C1{ Fc:0 Fc Fs:0}



static void Test_BFu0c_Uc_BFu0s()
{
  {
    init_simple_test("BFu0c_Uc_BFu0s");
    static BFu0c_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu0s(Test_BFu0c_Uc_BFu0s, "BFu0c_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu15i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Uc_BFu15i) C1{ Fc:0 Fc Fi:15}



static void Test_BFu0c_Uc_BFu15i()
{
  {
    init_simple_test("BFu0c_Uc_BFu15i");
    static BFu0c_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_Uc_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_Uc_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu15i(Test_BFu0c_Uc_BFu15i, "BFu0c_Uc_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu15ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Uc_BFu15ll) C1{ Fc:0 Fc FL:15}



static void Test_BFu0c_Uc_BFu15ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu15ll");
    static BFu0c_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0c_Uc_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0c_Uc_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu15ll(Test_BFu0c_Uc_BFu15ll, "BFu0c_Uc_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu15s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Uc_BFu15s) C1{ Fc:0 Fc Fs:15}



static void Test_BFu0c_Uc_BFu15s()
{
  {
    init_simple_test("BFu0c_Uc_BFu15s");
    static BFu0c_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_Uc_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_Uc_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu15s(Test_BFu0c_Uc_BFu15s, "BFu0c_Uc_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu16i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Uc_BFu16i) C1{ Fc:0 Fc Fi:16}



static void Test_BFu0c_Uc_BFu16i()
{
  {
    init_simple_test("BFu0c_Uc_BFu16i");
    static BFu0c_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_Uc_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_Uc_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu16i(Test_BFu0c_Uc_BFu16i, "BFu0c_Uc_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu16ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Uc_BFu16ll) C1{ Fc:0 Fc FL:16}



static void Test_BFu0c_Uc_BFu16ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu16ll");
    static BFu0c_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0c_Uc_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0c_Uc_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu16ll(Test_BFu0c_Uc_BFu16ll, "BFu0c_Uc_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu16s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Uc_BFu16s) C1{ Fc:0 Fc Fs:16}



static void Test_BFu0c_Uc_BFu16s()
{
  {
    init_simple_test("BFu0c_Uc_BFu16s");
    static BFu0c_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_Uc_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_Uc_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu16s(Test_BFu0c_Uc_BFu16s, "BFu0c_Uc_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu17i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Uc_BFu17i) C1{ Fc:0 Fc Fi:17}



static void Test_BFu0c_Uc_BFu17i()
{
  {
    init_simple_test("BFu0c_Uc_BFu17i");
    static BFu0c_Uc_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_Uc_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_Uc_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu17i(Test_BFu0c_Uc_BFu17i, "BFu0c_Uc_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu17ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Uc_BFu17ll) C1{ Fc:0 Fc FL:17}



static void Test_BFu0c_Uc_BFu17ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu17ll");
    static BFu0c_Uc_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0c_Uc_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0c_Uc_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu17ll(Test_BFu0c_Uc_BFu17ll, "BFu0c_Uc_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu1c  {
  unsigned char  :0;
  unsigned char v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Uc_BFu1c) C1{ Fc:0 Fc Fc:1}



static void Test_BFu0c_Uc_BFu1c()
{
  {
    init_simple_test("BFu0c_Uc_BFu1c");
    static BFu0c_Uc_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_Uc_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu1c(Test_BFu0c_Uc_BFu1c, "BFu0c_Uc_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu1i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Uc_BFu1i) C1{ Fc:0 Fc Fi:1}



static void Test_BFu0c_Uc_BFu1i()
{
  {
    init_simple_test("BFu0c_Uc_BFu1i");
    static BFu0c_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_Uc_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu1i(Test_BFu0c_Uc_BFu1i, "BFu0c_Uc_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu1ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Uc_BFu1ll) C1{ Fc:0 Fc FL:1}



static void Test_BFu0c_Uc_BFu1ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu1ll");
    static BFu0c_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_Uc_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu1ll(Test_BFu0c_Uc_BFu1ll, "BFu0c_Uc_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu1s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Uc_BFu1s) C1{ Fc:0 Fc Fs:1}



static void Test_BFu0c_Uc_BFu1s()
{
  {
    init_simple_test("BFu0c_Uc_BFu1s");
    static BFu0c_Uc_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0c_Uc_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu1s(Test_BFu0c_Uc_BFu1s, "BFu0c_Uc_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu31i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Uc_BFu31i) C1{ Fc:0 Fc Fi:31}



static void Test_BFu0c_Uc_BFu31i()
{
  {
    init_simple_test("BFu0c_Uc_BFu31i");
    static BFu0c_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_Uc_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_Uc_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu31i(Test_BFu0c_Uc_BFu31i, "BFu0c_Uc_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu31ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Uc_BFu31ll) C1{ Fc:0 Fc FL:31}



static void Test_BFu0c_Uc_BFu31ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu31ll");
    static BFu0c_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0c_Uc_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0c_Uc_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu31ll(Test_BFu0c_Uc_BFu31ll, "BFu0c_Uc_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu32i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Uc_BFu32i) C1{ Fc:0 Fc Fi:32}



static void Test_BFu0c_Uc_BFu32i()
{
  {
    init_simple_test("BFu0c_Uc_BFu32i");
    static BFu0c_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_Uc_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_Uc_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu32i(Test_BFu0c_Uc_BFu32i, "BFu0c_Uc_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu32ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Uc_BFu32ll) C1{ Fc:0 Fc FL:32}



static void Test_BFu0c_Uc_BFu32ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu32ll");
    static BFu0c_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0c_Uc_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0c_Uc_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu32ll(Test_BFu0c_Uc_BFu32ll, "BFu0c_Uc_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu33  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Uc_BFu33) C1{ Fc:0 Fc FL:33}



static void Test_BFu0c_Uc_BFu33()
{
  {
    init_simple_test("BFu0c_Uc_BFu33");
    static BFu0c_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0c_Uc_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0c_Uc_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu33(Test_BFu0c_Uc_BFu33, "BFu0c_Uc_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu7c  {
  unsigned char  :0;
  unsigned char v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Uc_BFu7c) C1{ Fc:0 Fc Fc:7}



static void Test_BFu0c_Uc_BFu7c()
{
  {
    init_simple_test("BFu0c_Uc_BFu7c");
    static BFu0c_Uc_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_Uc_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_Uc_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu7c(Test_BFu0c_Uc_BFu7c, "BFu0c_Uc_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu7i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Uc_BFu7i) C1{ Fc:0 Fc Fi:7}



static void Test_BFu0c_Uc_BFu7i()
{
  {
    init_simple_test("BFu0c_Uc_BFu7i");
    static BFu0c_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_Uc_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_Uc_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu7i(Test_BFu0c_Uc_BFu7i, "BFu0c_Uc_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu7ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Uc_BFu7ll) C1{ Fc:0 Fc FL:7}



static void Test_BFu0c_Uc_BFu7ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu7ll");
    static BFu0c_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_Uc_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_Uc_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu7ll(Test_BFu0c_Uc_BFu7ll, "BFu0c_Uc_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu7s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Uc_BFu7s) C1{ Fc:0 Fc Fs:7}



static void Test_BFu0c_Uc_BFu7s()
{
  {
    init_simple_test("BFu0c_Uc_BFu7s");
    static BFu0c_Uc_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0c_Uc_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0c_Uc_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu7s(Test_BFu0c_Uc_BFu7s, "BFu0c_Uc_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu8c  {
  unsigned char  :0;
  unsigned char v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Uc_BFu8c) C1{ Fc:0 Fc Fc:8}



static void Test_BFu0c_Uc_BFu8c()
{
  {
    init_simple_test("BFu0c_Uc_BFu8c");
    static BFu0c_Uc_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_Uc_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_Uc_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu8c(Test_BFu0c_Uc_BFu8c, "BFu0c_Uc_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu8i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Uc_BFu8i) C1{ Fc:0 Fc Fi:8}



static void Test_BFu0c_Uc_BFu8i()
{
  {
    init_simple_test("BFu0c_Uc_BFu8i");
    static BFu0c_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_Uc_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_Uc_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu8i(Test_BFu0c_Uc_BFu8i, "BFu0c_Uc_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu8ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Uc_BFu8ll) C1{ Fc:0 Fc FL:8}



static void Test_BFu0c_Uc_BFu8ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu8ll");
    static BFu0c_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_Uc_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_Uc_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu8ll(Test_BFu0c_Uc_BFu8ll, "BFu0c_Uc_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu8s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Uc_BFu8s) C1{ Fc:0 Fc Fs:8}



static void Test_BFu0c_Uc_BFu8s()
{
  {
    init_simple_test("BFu0c_Uc_BFu8s");
    static BFu0c_Uc_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0c_Uc_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0c_Uc_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu8s(Test_BFu0c_Uc_BFu8s, "BFu0c_Uc_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu9i  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Uc_BFu9i) C1{ Fc:0 Fc Fi:9}



static void Test_BFu0c_Uc_BFu9i()
{
  {
    init_simple_test("BFu0c_Uc_BFu9i");
    static BFu0c_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_Uc_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_Uc_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu9i(Test_BFu0c_Uc_BFu9i, "BFu0c_Uc_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu9ll  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Uc_BFu9ll) C1{ Fc:0 Fc FL:9}



static void Test_BFu0c_Uc_BFu9ll()
{
  {
    init_simple_test("BFu0c_Uc_BFu9ll");
    static BFu0c_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0c_Uc_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0c_Uc_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu9ll(Test_BFu0c_Uc_BFu9ll, "BFu0c_Uc_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_BFu9s  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Uc_BFu9s) C1{ Fc:0 Fc Fs:9}



static void Test_BFu0c_Uc_BFu9s()
{
  {
    init_simple_test("BFu0c_Uc_BFu9s");
    static BFu0c_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_Uc_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_Uc_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_BFu9s(Test_BFu0c_Uc_BFu9s, "BFu0c_Uc_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_C  {
  unsigned char  :0;
  unsigned char v1;
  char v2;
};
//SIG(1 BFu0c_Uc_C) C1{ Fc:0 Fc[2]}



static void Test_BFu0c_Uc_C()
{
  {
    init_simple_test("BFu0c_Uc_C");
    static BFu0c_Uc_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_C.v1");
    check_field_offset(lv, v2, 1, "BFu0c_Uc_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_C(Test_BFu0c_Uc_C, "BFu0c_Uc_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_D  {
  unsigned char  :0;
  unsigned char v1;
  double v2;
};
//SIG(1 BFu0c_Uc_D) C1{ Fc:0 Fc FL}



static void Test_BFu0c_Uc_D()
{
  {
    init_simple_test("BFu0c_Uc_D");
    static BFu0c_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Uc_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_D(Test_BFu0c_Uc_D, "BFu0c_Uc_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_F  {
  unsigned char  :0;
  unsigned char v1;
  float v2;
};
//SIG(1 BFu0c_Uc_F) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_Uc_F()
{
  {
    init_simple_test("BFu0c_Uc_F");
    static BFu0c_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Uc_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_F(Test_BFu0c_Uc_F, "BFu0c_Uc_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_I  {
  unsigned char  :0;
  unsigned char v1;
  int v2;
};
//SIG(1 BFu0c_Uc_I) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_Uc_I()
{
  {
    init_simple_test("BFu0c_Uc_I");
    static BFu0c_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Uc_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_I(Test_BFu0c_Uc_I, "BFu0c_Uc_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Ip  {
  unsigned char  :0;
  unsigned char v1;
  int *v2;
};
//SIG(1 BFu0c_Uc_Ip) C1{ Fc:0 Fc Fp}



static void Test_BFu0c_Uc_Ip()
{
  {
    init_simple_test("BFu0c_Uc_Ip");
    static BFu0c_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Uc_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Ip(Test_BFu0c_Uc_Ip, "BFu0c_Uc_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_L  {
  unsigned char  :0;
  unsigned char v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Uc_L) C1{ Fc:0 Fc FL}



static void Test_BFu0c_Uc_L()
{
  {
    init_simple_test("BFu0c_Uc_L");
    static BFu0c_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Uc_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_L(Test_BFu0c_Uc_L, "BFu0c_Uc_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_S  {
  unsigned char  :0;
  unsigned char v1;
  short v2;
};
//SIG(1 BFu0c_Uc_S) C1{ Fc:0 Fc Fs}



static void Test_BFu0c_Uc_S()
{
  {
    init_simple_test("BFu0c_Uc_S");
    static BFu0c_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_S.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Uc_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_S(Test_BFu0c_Uc_S, "BFu0c_Uc_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Uc  {
  unsigned char  :0;
  unsigned char v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Uc_Uc) C1{ Fc:0 Fc[2]}



static void Test_BFu0c_Uc_Uc()
{
  {
    init_simple_test("BFu0c_Uc_Uc");
    static BFu0c_Uc_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Uc_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu0c_Uc_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Uc.v1");
    check_field_offset(lv, v2, 1, "BFu0c_Uc_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Uc(Test_BFu0c_Uc_Uc, "BFu0c_Uc_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Ui  {
  unsigned char  :0;
  unsigned char v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Uc_Ui) C1{ Fc:0 Fc Fi}



static void Test_BFu0c_Uc_Ui()
{
  {
    init_simple_test("BFu0c_Uc_Ui");
    static BFu0c_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Uc_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Uc_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Ui(Test_BFu0c_Uc_Ui, "BFu0c_Uc_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Ul  {
  unsigned char  :0;
  unsigned char v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Uc_Ul) C1{ Fc:0 Fc FL}



static void Test_BFu0c_Uc_Ul()
{
  {
    init_simple_test("BFu0c_Uc_Ul");
    static BFu0c_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Uc_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Ul(Test_BFu0c_Uc_Ul, "BFu0c_Uc_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Us  {
  unsigned char  :0;
  unsigned char v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Uc_Us) C1{ Fc:0 Fc Fs}



static void Test_BFu0c_Uc_Us()
{
  {
    init_simple_test("BFu0c_Uc_Us");
    static BFu0c_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Uc_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Uc_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Us(Test_BFu0c_Uc_Us, "BFu0c_Uc_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Uc_Vp  {
  unsigned char  :0;
  unsigned char v1;
  void *v2;
};
//SIG(1 BFu0c_Uc_Vp) C1{ Fc:0 Fc Fp}



static void Test_BFu0c_Uc_Vp()
{
  {
    init_simple_test("BFu0c_Uc_Vp");
    static BFu0c_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Uc_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Uc_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Uc_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Uc_Vp(Test_BFu0c_Uc_Vp, "BFu0c_Uc_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui  {
  unsigned char  :0;
  unsigned int v1;
};
//SIG(1 BFu0c_Ui) C1{ Fc:0 Fi}



static void Test_BFu0c_Ui()
{
  {
    init_simple_test("BFu0c_Ui");
    static BFu0c_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui(Test_BFu0c_Ui, "BFu0c_Ui", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu0c  {
  unsigned char  :0;
  unsigned int v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Ui_BFu0c) C1{ Fc:0 Fi Fc:0}



static void Test_BFu0c_Ui_BFu0c()
{
  {
    init_simple_test("BFu0c_Ui_BFu0c");
    static BFu0c_Ui_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu0c(Test_BFu0c_Ui_BFu0c, "BFu0c_Ui_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu0i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Ui_BFu0i) C1{ Fc:0 Fi Fi:0}



static void Test_BFu0c_Ui_BFu0i()
{
  {
    init_simple_test("BFu0c_Ui_BFu0i");
    static BFu0c_Ui_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu0i(Test_BFu0c_Ui_BFu0i, "BFu0c_Ui_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu0ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Ui_BFu0ll) C1{ Fc:0 Fi FL:0}



static void Test_BFu0c_Ui_BFu0ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu0ll");
    static BFu0c_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0c_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu0ll(Test_BFu0c_Ui_BFu0ll, "BFu0c_Ui_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu0s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Ui_BFu0s) C1{ Fc:0 Fi Fs:0}



static void Test_BFu0c_Ui_BFu0s()
{
  {
    init_simple_test("BFu0c_Ui_BFu0s");
    static BFu0c_Ui_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu0s(Test_BFu0c_Ui_BFu0s, "BFu0c_Ui_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu15i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Ui_BFu15i) C1{ Fc:0 Fi Fi:15}



static void Test_BFu0c_Ui_BFu15i()
{
  {
    init_simple_test("BFu0c_Ui_BFu15i");
    static BFu0c_Ui_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_Ui_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_Ui_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu15i(Test_BFu0c_Ui_BFu15i, "BFu0c_Ui_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu15ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Ui_BFu15ll) C1{ Fc:0 Fi FL:15}



static void Test_BFu0c_Ui_BFu15ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu15ll");
    static BFu0c_Ui_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_Ui_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_Ui_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu15ll(Test_BFu0c_Ui_BFu15ll, "BFu0c_Ui_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu15s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Ui_BFu15s) C1{ Fc:0 Fi Fs:15}



static void Test_BFu0c_Ui_BFu15s()
{
  {
    init_simple_test("BFu0c_Ui_BFu15s");
    static BFu0c_Ui_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0c_Ui_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0c_Ui_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu15s(Test_BFu0c_Ui_BFu15s, "BFu0c_Ui_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu16i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Ui_BFu16i) C1{ Fc:0 Fi Fi:16}



static void Test_BFu0c_Ui_BFu16i()
{
  {
    init_simple_test("BFu0c_Ui_BFu16i");
    static BFu0c_Ui_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_Ui_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_Ui_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu16i(Test_BFu0c_Ui_BFu16i, "BFu0c_Ui_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu16ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Ui_BFu16ll) C1{ Fc:0 Fi FL:16}



static void Test_BFu0c_Ui_BFu16ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu16ll");
    static BFu0c_Ui_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_Ui_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_Ui_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu16ll(Test_BFu0c_Ui_BFu16ll, "BFu0c_Ui_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu16s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Ui_BFu16s) C1{ Fc:0 Fi Fs:16}



static void Test_BFu0c_Ui_BFu16s()
{
  {
    init_simple_test("BFu0c_Ui_BFu16s");
    static BFu0c_Ui_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0c_Ui_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0c_Ui_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu16s(Test_BFu0c_Ui_BFu16s, "BFu0c_Ui_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu17i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Ui_BFu17i) C1{ Fc:0 Fi Fi:17}



static void Test_BFu0c_Ui_BFu17i()
{
  {
    init_simple_test("BFu0c_Ui_BFu17i");
    static BFu0c_Ui_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_Ui_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_Ui_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu17i(Test_BFu0c_Ui_BFu17i, "BFu0c_Ui_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu17ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Ui_BFu17ll) C1{ Fc:0 Fi FL:17}



static void Test_BFu0c_Ui_BFu17ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu17ll");
    static BFu0c_Ui_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_Ui_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_Ui_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu17ll(Test_BFu0c_Ui_BFu17ll, "BFu0c_Ui_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu1c  {
  unsigned char  :0;
  unsigned int v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Ui_BFu1c) C1{ Fc:0 Fi Fc:1}



static void Test_BFu0c_Ui_BFu1c()
{
  {
    init_simple_test("BFu0c_Ui_BFu1c");
    static BFu0c_Ui_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_Ui_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu1c(Test_BFu0c_Ui_BFu1c, "BFu0c_Ui_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu1i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Ui_BFu1i) C1{ Fc:0 Fi Fi:1}



static void Test_BFu0c_Ui_BFu1i()
{
  {
    init_simple_test("BFu0c_Ui_BFu1i");
    static BFu0c_Ui_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_Ui_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu1i(Test_BFu0c_Ui_BFu1i, "BFu0c_Ui_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu1ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Ui_BFu1ll) C1{ Fc:0 Fi FL:1}



static void Test_BFu0c_Ui_BFu1ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu1ll");
    static BFu0c_Ui_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_Ui_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu1ll(Test_BFu0c_Ui_BFu1ll, "BFu0c_Ui_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu1s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Ui_BFu1s) C1{ Fc:0 Fi Fs:1}



static void Test_BFu0c_Ui_BFu1s()
{
  {
    init_simple_test("BFu0c_Ui_BFu1s");
    static BFu0c_Ui_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0c_Ui_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu1s(Test_BFu0c_Ui_BFu1s, "BFu0c_Ui_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu31i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Ui_BFu31i) C1{ Fc:0 Fi Fi:31}



static void Test_BFu0c_Ui_BFu31i()
{
  {
    init_simple_test("BFu0c_Ui_BFu31i");
    static BFu0c_Ui_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_Ui_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_Ui_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu31i(Test_BFu0c_Ui_BFu31i, "BFu0c_Ui_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu31ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Ui_BFu31ll) C1{ Fc:0 Fi FL:31}



static void Test_BFu0c_Ui_BFu31ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu31ll");
    static BFu0c_Ui_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_Ui_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_Ui_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu31ll(Test_BFu0c_Ui_BFu31ll, "BFu0c_Ui_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu32i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Ui_BFu32i) C1{ Fc:0 Fi Fi:32}



static void Test_BFu0c_Ui_BFu32i()
{
  {
    init_simple_test("BFu0c_Ui_BFu32i");
    static BFu0c_Ui_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_Ui_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_Ui_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu32i(Test_BFu0c_Ui_BFu32i, "BFu0c_Ui_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu32ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Ui_BFu32ll) C1{ Fc:0 Fi FL:32}



static void Test_BFu0c_Ui_BFu32ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu32ll");
    static BFu0c_Ui_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_Ui_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_Ui_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu32ll(Test_BFu0c_Ui_BFu32ll, "BFu0c_Ui_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu33  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Ui_BFu33) C1{ Fc:0 Fi FL:33}



static void Test_BFu0c_Ui_BFu33()
{
  {
    init_simple_test("BFu0c_Ui_BFu33");
    static BFu0c_Ui_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_Ui_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_Ui_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu33(Test_BFu0c_Ui_BFu33, "BFu0c_Ui_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu7c  {
  unsigned char  :0;
  unsigned int v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Ui_BFu7c) C1{ Fc:0 Fi Fc:7}



static void Test_BFu0c_Ui_BFu7c()
{
  {
    init_simple_test("BFu0c_Ui_BFu7c");
    static BFu0c_Ui_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_Ui_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_Ui_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu7c(Test_BFu0c_Ui_BFu7c, "BFu0c_Ui_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu7i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Ui_BFu7i) C1{ Fc:0 Fi Fi:7}



static void Test_BFu0c_Ui_BFu7i()
{
  {
    init_simple_test("BFu0c_Ui_BFu7i");
    static BFu0c_Ui_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_Ui_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_Ui_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu7i(Test_BFu0c_Ui_BFu7i, "BFu0c_Ui_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu7ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Ui_BFu7ll) C1{ Fc:0 Fi FL:7}



static void Test_BFu0c_Ui_BFu7ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu7ll");
    static BFu0c_Ui_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_Ui_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_Ui_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu7ll(Test_BFu0c_Ui_BFu7ll, "BFu0c_Ui_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu7s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Ui_BFu7s) C1{ Fc:0 Fi Fs:7}



static void Test_BFu0c_Ui_BFu7s()
{
  {
    init_simple_test("BFu0c_Ui_BFu7s");
    static BFu0c_Ui_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0c_Ui_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0c_Ui_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu7s(Test_BFu0c_Ui_BFu7s, "BFu0c_Ui_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu8c  {
  unsigned char  :0;
  unsigned int v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Ui_BFu8c) C1{ Fc:0 Fi Fc:8}



static void Test_BFu0c_Ui_BFu8c()
{
  {
    init_simple_test("BFu0c_Ui_BFu8c");
    static BFu0c_Ui_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_Ui_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_Ui_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu8c(Test_BFu0c_Ui_BFu8c, "BFu0c_Ui_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu8i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Ui_BFu8i) C1{ Fc:0 Fi Fi:8}



static void Test_BFu0c_Ui_BFu8i()
{
  {
    init_simple_test("BFu0c_Ui_BFu8i");
    static BFu0c_Ui_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_Ui_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_Ui_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu8i(Test_BFu0c_Ui_BFu8i, "BFu0c_Ui_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu8ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Ui_BFu8ll) C1{ Fc:0 Fi FL:8}



static void Test_BFu0c_Ui_BFu8ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu8ll");
    static BFu0c_Ui_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_Ui_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_Ui_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu8ll(Test_BFu0c_Ui_BFu8ll, "BFu0c_Ui_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu8s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Ui_BFu8s) C1{ Fc:0 Fi Fs:8}



static void Test_BFu0c_Ui_BFu8s()
{
  {
    init_simple_test("BFu0c_Ui_BFu8s");
    static BFu0c_Ui_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0c_Ui_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0c_Ui_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu8s(Test_BFu0c_Ui_BFu8s, "BFu0c_Ui_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu9i  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Ui_BFu9i) C1{ Fc:0 Fi Fi:9}



static void Test_BFu0c_Ui_BFu9i()
{
  {
    init_simple_test("BFu0c_Ui_BFu9i");
    static BFu0c_Ui_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_Ui_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_Ui_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu9i(Test_BFu0c_Ui_BFu9i, "BFu0c_Ui_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu9ll  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Ui_BFu9ll) C1{ Fc:0 Fi FL:9}



static void Test_BFu0c_Ui_BFu9ll()
{
  {
    init_simple_test("BFu0c_Ui_BFu9ll");
    static BFu0c_Ui_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_Ui_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_Ui_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu9ll(Test_BFu0c_Ui_BFu9ll, "BFu0c_Ui_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_BFu9s  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Ui_BFu9s) C1{ Fc:0 Fi Fs:9}



static void Test_BFu0c_Ui_BFu9s()
{
  {
    init_simple_test("BFu0c_Ui_BFu9s");
    static BFu0c_Ui_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0c_Ui_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0c_Ui_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_BFu9s(Test_BFu0c_Ui_BFu9s, "BFu0c_Ui_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_C  {
  unsigned char  :0;
  unsigned int v1;
  char v2;
};
//SIG(1 BFu0c_Ui_C) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_Ui_C()
{
  {
    init_simple_test("BFu0c_Ui_C");
    static BFu0c_Ui_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_C.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_C(Test_BFu0c_Ui_C, "BFu0c_Ui_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_D  {
  unsigned char  :0;
  unsigned int v1;
  double v2;
};
//SIG(1 BFu0c_Ui_D) C1{ Fc:0 Fi FL}



static void Test_BFu0c_Ui_D()
{
  {
    init_simple_test("BFu0c_Ui_D");
    static BFu0c_Ui_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ui_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_D(Test_BFu0c_Ui_D, "BFu0c_Ui_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_F  {
  unsigned char  :0;
  unsigned int v1;
  float v2;
};
//SIG(1 BFu0c_Ui_F) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_Ui_F()
{
  {
    init_simple_test("BFu0c_Ui_F");
    static BFu0c_Ui_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_F(Test_BFu0c_Ui_F, "BFu0c_Ui_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_I  {
  unsigned char  :0;
  unsigned int v1;
  int v2;
};
//SIG(1 BFu0c_Ui_I) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_Ui_I()
{
  {
    init_simple_test("BFu0c_Ui_I");
    static BFu0c_Ui_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_I(Test_BFu0c_Ui_I, "BFu0c_Ui_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Ip  {
  unsigned char  :0;
  unsigned int v1;
  int *v2;
};
//SIG(1 BFu0c_Ui_Ip) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_Ui_Ip()
{
  {
    init_simple_test("BFu0c_Ui_Ip");
    static BFu0c_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ui_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Ip(Test_BFu0c_Ui_Ip, "BFu0c_Ui_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_L  {
  unsigned char  :0;
  unsigned int v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Ui_L) C1{ Fc:0 Fi FL}



static void Test_BFu0c_Ui_L()
{
  {
    init_simple_test("BFu0c_Ui_L");
    static BFu0c_Ui_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ui_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_L(Test_BFu0c_Ui_L, "BFu0c_Ui_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_S  {
  unsigned char  :0;
  unsigned int v1;
  short v2;
};
//SIG(1 BFu0c_Ui_S) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_Ui_S()
{
  {
    init_simple_test("BFu0c_Ui_S");
    static BFu0c_Ui_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_S.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_S(Test_BFu0c_Ui_S, "BFu0c_Ui_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Uc  {
  unsigned char  :0;
  unsigned int v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Ui_Uc) C1{ Fc:0 Fi Fc}



static void Test_BFu0c_Ui_Uc()
{
  {
    init_simple_test("BFu0c_Ui_Uc");
    static BFu0c_Ui_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Uc(Test_BFu0c_Ui_Uc, "BFu0c_Ui_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Ui  {
  unsigned char  :0;
  unsigned int v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Ui_Ui) C1{ Fc:0 Fi[2]}



static void Test_BFu0c_Ui_Ui()
{
  {
    init_simple_test("BFu0c_Ui_Ui");
    static BFu0c_Ui_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Ui(Test_BFu0c_Ui_Ui, "BFu0c_Ui_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Ul  {
  unsigned char  :0;
  unsigned int v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Ui_Ul) C1{ Fc:0 Fi FL}



static void Test_BFu0c_Ui_Ul()
{
  {
    init_simple_test("BFu0c_Ui_Ul");
    static BFu0c_Ui_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ui_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Ul(Test_BFu0c_Ui_Ul, "BFu0c_Ui_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Us  {
  unsigned char  :0;
  unsigned int v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Ui_Us) C1{ Fc:0 Fi Fs}



static void Test_BFu0c_Ui_Us()
{
  {
    init_simple_test("BFu0c_Ui_Us");
    static BFu0c_Ui_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Ui_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Ui_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Us(Test_BFu0c_Ui_Us, "BFu0c_Ui_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ui_Vp  {
  unsigned char  :0;
  unsigned int v1;
  void *v2;
};
//SIG(1 BFu0c_Ui_Vp) C1{ Fc:0 Fi Fp}



static void Test_BFu0c_Ui_Vp()
{
  {
    init_simple_test("BFu0c_Ui_Vp");
    static BFu0c_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ui_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Ui_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Ui_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ui_Vp(Test_BFu0c_Ui_Vp, "BFu0c_Ui_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul  {
  unsigned char  :0;
  __tsu64 v1;
};
//SIG(1 BFu0c_Ul) C1{ Fc:0 FL}



static void Test_BFu0c_Ul()
{
  {
    init_simple_test("BFu0c_Ul");
    static BFu0c_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul(Test_BFu0c_Ul, "BFu0c_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu0c  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Ul_BFu0c) C1{ Fc:0 FL Fc:0}



static void Test_BFu0c_Ul_BFu0c()
{
  {
    init_simple_test("BFu0c_Ul_BFu0c");
    static BFu0c_Ul_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu0c(Test_BFu0c_Ul_BFu0c, "BFu0c_Ul_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu0i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Ul_BFu0i) C1{ Fc:0 FL Fi:0}



static void Test_BFu0c_Ul_BFu0i()
{
  {
    init_simple_test("BFu0c_Ul_BFu0i");
    static BFu0c_Ul_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu0i(Test_BFu0c_Ul_BFu0i, "BFu0c_Ul_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu0ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Ul_BFu0ll) C1{ Fc:0 FL FL:0}



static void Test_BFu0c_Ul_BFu0ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu0ll");
    static BFu0c_Ul_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu0ll(Test_BFu0c_Ul_BFu0ll, "BFu0c_Ul_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu0s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Ul_BFu0s) C1{ Fc:0 FL Fs:0}



static void Test_BFu0c_Ul_BFu0s()
{
  {
    init_simple_test("BFu0c_Ul_BFu0s");
    static BFu0c_Ul_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu0s(Test_BFu0c_Ul_BFu0s, "BFu0c_Ul_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu15i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Ul_BFu15i) C1{ Fc:0 FL Fi:15}



static void Test_BFu0c_Ul_BFu15i()
{
  {
    init_simple_test("BFu0c_Ul_BFu15i");
    static BFu0c_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_Ul_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_Ul_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu15i(Test_BFu0c_Ul_BFu15i, "BFu0c_Ul_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu15ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Ul_BFu15ll) C1{ Fc:0 FL FL:15}



static void Test_BFu0c_Ul_BFu15ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu15ll");
    static BFu0c_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_Ul_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_Ul_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu15ll(Test_BFu0c_Ul_BFu15ll, "BFu0c_Ul_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu15s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Ul_BFu15s) C1{ Fc:0 FL Fs:15}



static void Test_BFu0c_Ul_BFu15s()
{
  {
    init_simple_test("BFu0c_Ul_BFu15s");
    static BFu0c_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0c_Ul_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0c_Ul_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu15s(Test_BFu0c_Ul_BFu15s, "BFu0c_Ul_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu16i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Ul_BFu16i) C1{ Fc:0 FL Fi:16}



static void Test_BFu0c_Ul_BFu16i()
{
  {
    init_simple_test("BFu0c_Ul_BFu16i");
    static BFu0c_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_Ul_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_Ul_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu16i(Test_BFu0c_Ul_BFu16i, "BFu0c_Ul_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu16ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Ul_BFu16ll) C1{ Fc:0 FL FL:16}



static void Test_BFu0c_Ul_BFu16ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu16ll");
    static BFu0c_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_Ul_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_Ul_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu16ll(Test_BFu0c_Ul_BFu16ll, "BFu0c_Ul_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu16s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Ul_BFu16s) C1{ Fc:0 FL Fs:16}



static void Test_BFu0c_Ul_BFu16s()
{
  {
    init_simple_test("BFu0c_Ul_BFu16s");
    static BFu0c_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0c_Ul_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0c_Ul_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu16s(Test_BFu0c_Ul_BFu16s, "BFu0c_Ul_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu17i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Ul_BFu17i) C1{ Fc:0 FL Fi:17}



static void Test_BFu0c_Ul_BFu17i()
{
  {
    init_simple_test("BFu0c_Ul_BFu17i");
    static BFu0c_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_Ul_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_Ul_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu17i(Test_BFu0c_Ul_BFu17i, "BFu0c_Ul_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu17ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Ul_BFu17ll) C1{ Fc:0 FL FL:17}



static void Test_BFu0c_Ul_BFu17ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu17ll");
    static BFu0c_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0c_Ul_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0c_Ul_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu17ll(Test_BFu0c_Ul_BFu17ll, "BFu0c_Ul_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu1c  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Ul_BFu1c) C1{ Fc:0 FL Fc:1}



static void Test_BFu0c_Ul_BFu1c()
{
  {
    init_simple_test("BFu0c_Ul_BFu1c");
    static BFu0c_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_Ul_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu1c(Test_BFu0c_Ul_BFu1c, "BFu0c_Ul_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu1i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Ul_BFu1i) C1{ Fc:0 FL Fi:1}



static void Test_BFu0c_Ul_BFu1i()
{
  {
    init_simple_test("BFu0c_Ul_BFu1i");
    static BFu0c_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_Ul_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu1i(Test_BFu0c_Ul_BFu1i, "BFu0c_Ul_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu1ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Ul_BFu1ll) C1{ Fc:0 FL FL:1}



static void Test_BFu0c_Ul_BFu1ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu1ll");
    static BFu0c_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_Ul_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu1ll(Test_BFu0c_Ul_BFu1ll, "BFu0c_Ul_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu1s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Ul_BFu1s) C1{ Fc:0 FL Fs:1}



static void Test_BFu0c_Ul_BFu1s()
{
  {
    init_simple_test("BFu0c_Ul_BFu1s");
    static BFu0c_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0c_Ul_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu1s(Test_BFu0c_Ul_BFu1s, "BFu0c_Ul_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu31i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Ul_BFu31i) C1{ Fc:0 FL Fi:31}



static void Test_BFu0c_Ul_BFu31i()
{
  {
    init_simple_test("BFu0c_Ul_BFu31i");
    static BFu0c_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_Ul_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_Ul_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu31i(Test_BFu0c_Ul_BFu31i, "BFu0c_Ul_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu31ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Ul_BFu31ll) C1{ Fc:0 FL FL:31}



static void Test_BFu0c_Ul_BFu31ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu31ll");
    static BFu0c_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0c_Ul_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0c_Ul_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu31ll(Test_BFu0c_Ul_BFu31ll, "BFu0c_Ul_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu32i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Ul_BFu32i) C1{ Fc:0 FL Fi:32}



static void Test_BFu0c_Ul_BFu32i()
{
  {
    init_simple_test("BFu0c_Ul_BFu32i");
    static BFu0c_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_Ul_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_Ul_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu32i(Test_BFu0c_Ul_BFu32i, "BFu0c_Ul_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu32ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Ul_BFu32ll) C1{ Fc:0 FL FL:32}



static void Test_BFu0c_Ul_BFu32ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu32ll");
    static BFu0c_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0c_Ul_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0c_Ul_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu32ll(Test_BFu0c_Ul_BFu32ll, "BFu0c_Ul_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu33  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Ul_BFu33) C1{ Fc:0 FL FL:33}



static void Test_BFu0c_Ul_BFu33()
{
  {
    init_simple_test("BFu0c_Ul_BFu33");
    static BFu0c_Ul_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu0c_Ul_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu0c_Ul_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu33(Test_BFu0c_Ul_BFu33, "BFu0c_Ul_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu7c  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Ul_BFu7c) C1{ Fc:0 FL Fc:7}



static void Test_BFu0c_Ul_BFu7c()
{
  {
    init_simple_test("BFu0c_Ul_BFu7c");
    static BFu0c_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_Ul_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_Ul_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu7c(Test_BFu0c_Ul_BFu7c, "BFu0c_Ul_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu7i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Ul_BFu7i) C1{ Fc:0 FL Fi:7}



static void Test_BFu0c_Ul_BFu7i()
{
  {
    init_simple_test("BFu0c_Ul_BFu7i");
    static BFu0c_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_Ul_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_Ul_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu7i(Test_BFu0c_Ul_BFu7i, "BFu0c_Ul_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu7ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Ul_BFu7ll) C1{ Fc:0 FL FL:7}



static void Test_BFu0c_Ul_BFu7ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu7ll");
    static BFu0c_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_Ul_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_Ul_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu7ll(Test_BFu0c_Ul_BFu7ll, "BFu0c_Ul_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu7s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Ul_BFu7s) C1{ Fc:0 FL Fs:7}



static void Test_BFu0c_Ul_BFu7s()
{
  {
    init_simple_test("BFu0c_Ul_BFu7s");
    static BFu0c_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0c_Ul_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0c_Ul_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu7s(Test_BFu0c_Ul_BFu7s, "BFu0c_Ul_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu8c  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Ul_BFu8c) C1{ Fc:0 FL Fc:8}



static void Test_BFu0c_Ul_BFu8c()
{
  {
    init_simple_test("BFu0c_Ul_BFu8c");
    static BFu0c_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_Ul_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_Ul_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu8c(Test_BFu0c_Ul_BFu8c, "BFu0c_Ul_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu8i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Ul_BFu8i) C1{ Fc:0 FL Fi:8}



static void Test_BFu0c_Ul_BFu8i()
{
  {
    init_simple_test("BFu0c_Ul_BFu8i");
    static BFu0c_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_Ul_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_Ul_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu8i(Test_BFu0c_Ul_BFu8i, "BFu0c_Ul_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu8ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Ul_BFu8ll) C1{ Fc:0 FL FL:8}



static void Test_BFu0c_Ul_BFu8ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu8ll");
    static BFu0c_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_Ul_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_Ul_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu8ll(Test_BFu0c_Ul_BFu8ll, "BFu0c_Ul_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu8s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Ul_BFu8s) C1{ Fc:0 FL Fs:8}



static void Test_BFu0c_Ul_BFu8s()
{
  {
    init_simple_test("BFu0c_Ul_BFu8s");
    static BFu0c_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0c_Ul_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0c_Ul_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu8s(Test_BFu0c_Ul_BFu8s, "BFu0c_Ul_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu9i  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Ul_BFu9i) C1{ Fc:0 FL Fi:9}



static void Test_BFu0c_Ul_BFu9i()
{
  {
    init_simple_test("BFu0c_Ul_BFu9i");
    static BFu0c_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_Ul_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_Ul_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu9i(Test_BFu0c_Ul_BFu9i, "BFu0c_Ul_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu9ll  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Ul_BFu9ll) C1{ Fc:0 FL FL:9}



static void Test_BFu0c_Ul_BFu9ll()
{
  {
    init_simple_test("BFu0c_Ul_BFu9ll");
    static BFu0c_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_Ul_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_Ul_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu9ll(Test_BFu0c_Ul_BFu9ll, "BFu0c_Ul_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_BFu9s  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Ul_BFu9s) C1{ Fc:0 FL Fs:9}



static void Test_BFu0c_Ul_BFu9s()
{
  {
    init_simple_test("BFu0c_Ul_BFu9s");
    static BFu0c_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0c_Ul_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0c_Ul_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_BFu9s(Test_BFu0c_Ul_BFu9s, "BFu0c_Ul_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_C  {
  unsigned char  :0;
  __tsu64 v1;
  char v2;
};
//SIG(1 BFu0c_Ul_C) C1{ Fc:0 FL Fc}



static void Test_BFu0c_Ul_C()
{
  {
    init_simple_test("BFu0c_Ul_C");
    static BFu0c_Ul_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_C.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_C(Test_BFu0c_Ul_C, "BFu0c_Ul_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_D  {
  unsigned char  :0;
  __tsu64 v1;
  double v2;
};
//SIG(1 BFu0c_Ul_D) C1{ Fc:0 FL[2]}



static void Test_BFu0c_Ul_D()
{
  {
    init_simple_test("BFu0c_Ul_D");
    static BFu0c_Ul_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_D.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_D(Test_BFu0c_Ul_D, "BFu0c_Ul_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_F  {
  unsigned char  :0;
  __tsu64 v1;
  float v2;
};
//SIG(1 BFu0c_Ul_F) C1{ Fc:0 FL Fi}



static void Test_BFu0c_Ul_F()
{
  {
    init_simple_test("BFu0c_Ul_F");
    static BFu0c_Ul_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_F.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_F(Test_BFu0c_Ul_F, "BFu0c_Ul_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_I  {
  unsigned char  :0;
  __tsu64 v1;
  int v2;
};
//SIG(1 BFu0c_Ul_I) C1{ Fc:0 FL Fi}



static void Test_BFu0c_Ul_I()
{
  {
    init_simple_test("BFu0c_Ul_I");
    static BFu0c_Ul_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_I.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_I(Test_BFu0c_Ul_I, "BFu0c_Ul_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Ip  {
  unsigned char  :0;
  __tsu64 v1;
  int *v2;
};
//SIG(1 BFu0c_Ul_Ip) C1{ Fc:0 FL Fp}



static void Test_BFu0c_Ul_Ip()
{
  {
    init_simple_test("BFu0c_Ul_Ip");
    static BFu0c_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Ip(Test_BFu0c_Ul_Ip, "BFu0c_Ul_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_L  {
  unsigned char  :0;
  __tsu64 v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Ul_L) C1{ Fc:0 FL[2]}



static void Test_BFu0c_Ul_L()
{
  {
    init_simple_test("BFu0c_Ul_L");
    static BFu0c_Ul_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_L.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_L(Test_BFu0c_Ul_L, "BFu0c_Ul_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_S  {
  unsigned char  :0;
  __tsu64 v1;
  short v2;
};
//SIG(1 BFu0c_Ul_S) C1{ Fc:0 FL Fs}



static void Test_BFu0c_Ul_S()
{
  {
    init_simple_test("BFu0c_Ul_S");
    static BFu0c_Ul_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_S.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_S(Test_BFu0c_Ul_S, "BFu0c_Ul_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Uc  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Ul_Uc) C1{ Fc:0 FL Fc}



static void Test_BFu0c_Ul_Uc()
{
  {
    init_simple_test("BFu0c_Ul_Uc");
    static BFu0c_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Uc(Test_BFu0c_Ul_Uc, "BFu0c_Ul_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Ui  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Ul_Ui) C1{ Fc:0 FL Fi}



static void Test_BFu0c_Ul_Ui()
{
  {
    init_simple_test("BFu0c_Ul_Ui");
    static BFu0c_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Ui(Test_BFu0c_Ul_Ui, "BFu0c_Ul_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Ul  {
  unsigned char  :0;
  __tsu64 v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Ul_Ul) C1{ Fc:0 FL[2]}



static void Test_BFu0c_Ul_Ul()
{
  {
    init_simple_test("BFu0c_Ul_Ul");
    static BFu0c_Ul_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0c_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Ul(Test_BFu0c_Ul_Ul, "BFu0c_Ul_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Us  {
  unsigned char  :0;
  __tsu64 v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Ul_Us) C1{ Fc:0 FL Fs}



static void Test_BFu0c_Ul_Us()
{
  {
    init_simple_test("BFu0c_Ul_Us");
    static BFu0c_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Us(Test_BFu0c_Ul_Us, "BFu0c_Ul_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Ul_Vp  {
  unsigned char  :0;
  __tsu64 v1;
  void *v2;
};
//SIG(1 BFu0c_Ul_Vp) C1{ Fc:0 FL Fp}



static void Test_BFu0c_Ul_Vp()
{
  {
    init_simple_test("BFu0c_Ul_Vp");
    static BFu0c_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Ul_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Ul_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0c_Ul_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Ul_Vp(Test_BFu0c_Ul_Vp, "BFu0c_Ul_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us  {
  unsigned char  :0;
  unsigned short v1;
};
//SIG(1 BFu0c_Us) C1{ Fc:0 Fs}



static void Test_BFu0c_Us()
{
  {
    init_simple_test("BFu0c_Us");
    static BFu0c_Us lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Us(Test_BFu0c_Us, "BFu0c_Us", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu0c  {
  unsigned char  :0;
  unsigned short v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Us_BFu0c) C1{ Fc:0 Fs Fc:0}



static void Test_BFu0c_Us_BFu0c()
{
  {
    init_simple_test("BFu0c_Us_BFu0c");
    static BFu0c_Us_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu0c(Test_BFu0c_Us_BFu0c, "BFu0c_Us_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu0i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Us_BFu0i) C1{ Fc:0 Fs Fi:0}



static void Test_BFu0c_Us_BFu0i()
{
  {
    init_simple_test("BFu0c_Us_BFu0i");
    static BFu0c_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu0i(Test_BFu0c_Us_BFu0i, "BFu0c_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu0ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Us_BFu0ll) C1{ Fc:0 Fs FL:0}



static void Test_BFu0c_Us_BFu0ll()
{
  {
    init_simple_test("BFu0c_Us_BFu0ll");
    static BFu0c_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0c_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu0ll(Test_BFu0c_Us_BFu0ll, "BFu0c_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu0s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Us_BFu0s) C1{ Fc:0 Fs Fs:0}



static void Test_BFu0c_Us_BFu0s()
{
  {
    init_simple_test("BFu0c_Us_BFu0s");
    static BFu0c_Us_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0c_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu0s(Test_BFu0c_Us_BFu0s, "BFu0c_Us_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu15i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Us_BFu15i) C1{ Fc:0 Fs Fi:15}



static void Test_BFu0c_Us_BFu15i()
{
  {
    init_simple_test("BFu0c_Us_BFu15i");
    static BFu0c_Us_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_Us_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_Us_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu15i(Test_BFu0c_Us_BFu15i, "BFu0c_Us_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu15ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Us_BFu15ll) C1{ Fc:0 Fs FL:15}



static void Test_BFu0c_Us_BFu15ll()
{
  {
    init_simple_test("BFu0c_Us_BFu15ll");
    static BFu0c_Us_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_Us_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_Us_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu15ll(Test_BFu0c_Us_BFu15ll, "BFu0c_Us_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu15s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Us_BFu15s) C1{ Fc:0 Fs Fs:15}



static void Test_BFu0c_Us_BFu15s()
{
  {
    init_simple_test("BFu0c_Us_BFu15s");
    static BFu0c_Us_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0c_Us_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0c_Us_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu15s(Test_BFu0c_Us_BFu15s, "BFu0c_Us_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu16i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Us_BFu16i) C1{ Fc:0 Fs Fi:16}



static void Test_BFu0c_Us_BFu16i()
{
  {
    init_simple_test("BFu0c_Us_BFu16i");
    static BFu0c_Us_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_Us_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_Us_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu16i(Test_BFu0c_Us_BFu16i, "BFu0c_Us_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu16ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Us_BFu16ll) C1{ Fc:0 Fs FL:16}



static void Test_BFu0c_Us_BFu16ll()
{
  {
    init_simple_test("BFu0c_Us_BFu16ll");
    static BFu0c_Us_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_Us_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_Us_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu16ll(Test_BFu0c_Us_BFu16ll, "BFu0c_Us_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu16s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Us_BFu16s) C1{ Fc:0 Fs Fs:16}



static void Test_BFu0c_Us_BFu16s()
{
  {
    init_simple_test("BFu0c_Us_BFu16s");
    static BFu0c_Us_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0c_Us_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0c_Us_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu16s(Test_BFu0c_Us_BFu16s, "BFu0c_Us_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu17i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Us_BFu17i) C1{ Fc:0 Fs Fi:17}



static void Test_BFu0c_Us_BFu17i()
{
  {
    init_simple_test("BFu0c_Us_BFu17i");
    static BFu0c_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0c_Us_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0c_Us_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu17i(Test_BFu0c_Us_BFu17i, "BFu0c_Us_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu17ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Us_BFu17ll) C1{ Fc:0 Fs FL:17}



static void Test_BFu0c_Us_BFu17ll()
{
  {
    init_simple_test("BFu0c_Us_BFu17ll");
    static BFu0c_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0c_Us_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0c_Us_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu17ll(Test_BFu0c_Us_BFu17ll, "BFu0c_Us_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu1c  {
  unsigned char  :0;
  unsigned short v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Us_BFu1c) C1{ Fc:0 Fs Fc:1}



static void Test_BFu0c_Us_BFu1c()
{
  {
    init_simple_test("BFu0c_Us_BFu1c");
    static BFu0c_Us_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_Us_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu1c(Test_BFu0c_Us_BFu1c, "BFu0c_Us_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu1i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Us_BFu1i) C1{ Fc:0 Fs Fi:1}



static void Test_BFu0c_Us_BFu1i()
{
  {
    init_simple_test("BFu0c_Us_BFu1i");
    static BFu0c_Us_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_Us_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu1i(Test_BFu0c_Us_BFu1i, "BFu0c_Us_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu1ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Us_BFu1ll) C1{ Fc:0 Fs FL:1}



static void Test_BFu0c_Us_BFu1ll()
{
  {
    init_simple_test("BFu0c_Us_BFu1ll");
    static BFu0c_Us_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_Us_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu1ll(Test_BFu0c_Us_BFu1ll, "BFu0c_Us_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu1s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Us_BFu1s) C1{ Fc:0 Fs Fs:1}



static void Test_BFu0c_Us_BFu1s()
{
  {
    init_simple_test("BFu0c_Us_BFu1s");
    static BFu0c_Us_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0c_Us_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu1s(Test_BFu0c_Us_BFu1s, "BFu0c_Us_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu31i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Us_BFu31i) C1{ Fc:0 Fs Fi:31}



static void Test_BFu0c_Us_BFu31i()
{
  {
    init_simple_test("BFu0c_Us_BFu31i");
    static BFu0c_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0c_Us_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0c_Us_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu31i(Test_BFu0c_Us_BFu31i, "BFu0c_Us_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu31ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Us_BFu31ll) C1{ Fc:0 Fs FL:31}



static void Test_BFu0c_Us_BFu31ll()
{
  {
    init_simple_test("BFu0c_Us_BFu31ll");
    static BFu0c_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0c_Us_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0c_Us_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu31ll(Test_BFu0c_Us_BFu31ll, "BFu0c_Us_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu32i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Us_BFu32i) C1{ Fc:0 Fs Fi:32}



static void Test_BFu0c_Us_BFu32i()
{
  {
    init_simple_test("BFu0c_Us_BFu32i");
    static BFu0c_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0c_Us_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0c_Us_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu32i(Test_BFu0c_Us_BFu32i, "BFu0c_Us_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu32ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Us_BFu32ll) C1{ Fc:0 Fs FL:32}



static void Test_BFu0c_Us_BFu32ll()
{
  {
    init_simple_test("BFu0c_Us_BFu32ll");
    static BFu0c_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0c_Us_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0c_Us_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu32ll(Test_BFu0c_Us_BFu32ll, "BFu0c_Us_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu33  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Us_BFu33) C1{ Fc:0 Fs FL:33}



static void Test_BFu0c_Us_BFu33()
{
  {
    init_simple_test("BFu0c_Us_BFu33");
    static BFu0c_Us_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0c_Us_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0c_Us_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu33(Test_BFu0c_Us_BFu33, "BFu0c_Us_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu7c  {
  unsigned char  :0;
  unsigned short v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Us_BFu7c) C1{ Fc:0 Fs Fc:7}



static void Test_BFu0c_Us_BFu7c()
{
  {
    init_simple_test("BFu0c_Us_BFu7c");
    static BFu0c_Us_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_Us_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_Us_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu7c(Test_BFu0c_Us_BFu7c, "BFu0c_Us_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu7i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Us_BFu7i) C1{ Fc:0 Fs Fi:7}



static void Test_BFu0c_Us_BFu7i()
{
  {
    init_simple_test("BFu0c_Us_BFu7i");
    static BFu0c_Us_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_Us_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_Us_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu7i(Test_BFu0c_Us_BFu7i, "BFu0c_Us_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu7ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Us_BFu7ll) C1{ Fc:0 Fs FL:7}



static void Test_BFu0c_Us_BFu7ll()
{
  {
    init_simple_test("BFu0c_Us_BFu7ll");
    static BFu0c_Us_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_Us_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_Us_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu7ll(Test_BFu0c_Us_BFu7ll, "BFu0c_Us_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu7s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Us_BFu7s) C1{ Fc:0 Fs Fs:7}



static void Test_BFu0c_Us_BFu7s()
{
  {
    init_simple_test("BFu0c_Us_BFu7s");
    static BFu0c_Us_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0c_Us_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0c_Us_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu7s(Test_BFu0c_Us_BFu7s, "BFu0c_Us_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu8c  {
  unsigned char  :0;
  unsigned short v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Us_BFu8c) C1{ Fc:0 Fs Fc:8}



static void Test_BFu0c_Us_BFu8c()
{
  {
    init_simple_test("BFu0c_Us_BFu8c");
    static BFu0c_Us_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_Us_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_Us_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu8c(Test_BFu0c_Us_BFu8c, "BFu0c_Us_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu8i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Us_BFu8i) C1{ Fc:0 Fs Fi:8}



static void Test_BFu0c_Us_BFu8i()
{
  {
    init_simple_test("BFu0c_Us_BFu8i");
    static BFu0c_Us_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_Us_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_Us_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu8i(Test_BFu0c_Us_BFu8i, "BFu0c_Us_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu8ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Us_BFu8ll) C1{ Fc:0 Fs FL:8}



static void Test_BFu0c_Us_BFu8ll()
{
  {
    init_simple_test("BFu0c_Us_BFu8ll");
    static BFu0c_Us_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_Us_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_Us_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu8ll(Test_BFu0c_Us_BFu8ll, "BFu0c_Us_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu8s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Us_BFu8s) C1{ Fc:0 Fs Fs:8}



static void Test_BFu0c_Us_BFu8s()
{
  {
    init_simple_test("BFu0c_Us_BFu8s");
    static BFu0c_Us_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0c_Us_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0c_Us_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu8s(Test_BFu0c_Us_BFu8s, "BFu0c_Us_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu9i  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Us_BFu9i) C1{ Fc:0 Fs Fi:9}



static void Test_BFu0c_Us_BFu9i()
{
  {
    init_simple_test("BFu0c_Us_BFu9i");
    static BFu0c_Us_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_Us_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_Us_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu9i(Test_BFu0c_Us_BFu9i, "BFu0c_Us_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu9ll  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Us_BFu9ll) C1{ Fc:0 Fs FL:9}



static void Test_BFu0c_Us_BFu9ll()
{
  {
    init_simple_test("BFu0c_Us_BFu9ll");
    static BFu0c_Us_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_Us_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_Us_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu9ll(Test_BFu0c_Us_BFu9ll, "BFu0c_Us_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_BFu9s  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Us_BFu9s) C1{ Fc:0 Fs Fs:9}



static void Test_BFu0c_Us_BFu9s()
{
  {
    init_simple_test("BFu0c_Us_BFu9s");
    static BFu0c_Us_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0c_Us_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0c_Us_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_BFu9s(Test_BFu0c_Us_BFu9s, "BFu0c_Us_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_C  {
  unsigned char  :0;
  unsigned short v1;
  char v2;
};
//SIG(1 BFu0c_Us_C) C1{ Fc:0 Fs Fc}



static void Test_BFu0c_Us_C()
{
  {
    init_simple_test("BFu0c_Us_C");
    static BFu0c_Us_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_C.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Us_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_C(Test_BFu0c_Us_C, "BFu0c_Us_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_D  {
  unsigned char  :0;
  unsigned short v1;
  double v2;
};
//SIG(1 BFu0c_Us_D) C1{ Fc:0 Fs FL}



static void Test_BFu0c_Us_D()
{
  {
    init_simple_test("BFu0c_Us_D");
    static BFu0c_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Us_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_D(Test_BFu0c_Us_D, "BFu0c_Us_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_F  {
  unsigned char  :0;
  unsigned short v1;
  float v2;
};
//SIG(1 BFu0c_Us_F) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_Us_F()
{
  {
    init_simple_test("BFu0c_Us_F");
    static BFu0c_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_F.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Us_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_F(Test_BFu0c_Us_F, "BFu0c_Us_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_I  {
  unsigned char  :0;
  unsigned short v1;
  int v2;
};
//SIG(1 BFu0c_Us_I) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_Us_I()
{
  {
    init_simple_test("BFu0c_Us_I");
    static BFu0c_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_I.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Us_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_I(Test_BFu0c_Us_I, "BFu0c_Us_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Ip  {
  unsigned char  :0;
  unsigned short v1;
  int *v2;
};
//SIG(1 BFu0c_Us_Ip) C1{ Fc:0 Fs Fp}



static void Test_BFu0c_Us_Ip()
{
  {
    init_simple_test("BFu0c_Us_Ip");
    static BFu0c_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Us_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Ip(Test_BFu0c_Us_Ip, "BFu0c_Us_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_L  {
  unsigned char  :0;
  unsigned short v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Us_L) C1{ Fc:0 Fs FL}



static void Test_BFu0c_Us_L()
{
  {
    init_simple_test("BFu0c_Us_L");
    static BFu0c_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Us_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_L(Test_BFu0c_Us_L, "BFu0c_Us_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_S  {
  unsigned char  :0;
  unsigned short v1;
  short v2;
};
//SIG(1 BFu0c_Us_S) C1{ Fc:0 Fs[2]}



static void Test_BFu0c_Us_S()
{
  {
    init_simple_test("BFu0c_Us_S");
    static BFu0c_Us_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_S.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Us_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_S(Test_BFu0c_Us_S, "BFu0c_Us_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Uc  {
  unsigned char  :0;
  unsigned short v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Us_Uc) C1{ Fc:0 Fs Fc}



static void Test_BFu0c_Us_Uc()
{
  {
    init_simple_test("BFu0c_Us_Uc");
    static BFu0c_Us_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Uc.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Us_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Uc(Test_BFu0c_Us_Uc, "BFu0c_Us_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Ui  {
  unsigned char  :0;
  unsigned short v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Us_Ui) C1{ Fc:0 Fs Fi}



static void Test_BFu0c_Us_Ui()
{
  {
    init_simple_test("BFu0c_Us_Ui");
    static BFu0c_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0c_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0c_Us_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0c_Us_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Ui(Test_BFu0c_Us_Ui, "BFu0c_Us_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Ul  {
  unsigned char  :0;
  unsigned short v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Us_Ul) C1{ Fc:0 Fs FL}



static void Test_BFu0c_Us_Ul()
{
  {
    init_simple_test("BFu0c_Us_Ul");
    static BFu0c_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Us_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Ul(Test_BFu0c_Us_Ul, "BFu0c_Us_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Us  {
  unsigned char  :0;
  unsigned short v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Us_Us) C1{ Fc:0 Fs[2]}



static void Test_BFu0c_Us_Us()
{
  {
    init_simple_test("BFu0c_Us_Us");
    static BFu0c_Us_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0c_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0c_Us_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0c_Us_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Us(Test_BFu0c_Us_Us, "BFu0c_Us_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Us_Vp  {
  unsigned char  :0;
  unsigned short v1;
  void *v2;
};
//SIG(1 BFu0c_Us_Vp) C1{ Fc:0 Fs Fp}



static void Test_BFu0c_Us_Vp()
{
  {
    init_simple_test("BFu0c_Us_Vp");
    static BFu0c_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Us_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Us_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Us_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Us_Vp(Test_BFu0c_Us_Vp, "BFu0c_Us_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp  {
  unsigned char  :0;
  void *v1;
};
//SIG(1 BFu0c_Vp) C1{ Fc:0 Fp}



static void Test_BFu0c_Vp()
{
  {
    init_simple_test("BFu0c_Vp");
    static BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp(Test_BFu0c_Vp, "BFu0c_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu0c  {
  unsigned char  :0;
  void *v1;
  unsigned char  :0;
};
//SIG(1 BFu0c_Vp_BFu0c) C1{ Fc:0 Fp Fc:0}



static void Test_BFu0c_Vp_BFu0c()
{
  {
    init_simple_test("BFu0c_Vp_BFu0c");
    static BFu0c_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu0c(Test_BFu0c_Vp_BFu0c, "BFu0c_Vp_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu0i  {
  unsigned char  :0;
  void *v1;
  unsigned int  :0;
};
//SIG(1 BFu0c_Vp_BFu0i) C1{ Fc:0 Fp Fi:0}



static void Test_BFu0c_Vp_BFu0i()
{
  {
    init_simple_test("BFu0c_Vp_BFu0i");
    static BFu0c_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu0i(Test_BFu0c_Vp_BFu0i, "BFu0c_Vp_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu0ll  {
  unsigned char  :0;
  void *v1;
  __tsu64  :0;
};
//SIG(1 BFu0c_Vp_BFu0ll) C1{ Fc:0 Fp FL:0}



static void Test_BFu0c_Vp_BFu0ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu0ll");
    static BFu0c_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu0ll(Test_BFu0c_Vp_BFu0ll, "BFu0c_Vp_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu0s  {
  unsigned char  :0;
  void *v1;
  unsigned short  :0;
};
//SIG(1 BFu0c_Vp_BFu0s) C1{ Fc:0 Fp Fs:0}



static void Test_BFu0c_Vp_BFu0s()
{
  {
    init_simple_test("BFu0c_Vp_BFu0s");
    static BFu0c_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0c_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu0s(Test_BFu0c_Vp_BFu0s, "BFu0c_Vp_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu15i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:15;
};
//SIG(1 BFu0c_Vp_BFu15i) C1{ Fc:0 Fp Fi:15}



static void Test_BFu0c_Vp_BFu15i()
{
  {
    init_simple_test("BFu0c_Vp_BFu15i");
    static BFu0c_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Vp_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Vp_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu15i(Test_BFu0c_Vp_BFu15i, "BFu0c_Vp_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu15ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0c_Vp_BFu15ll) C1{ Fc:0 Fp FL:15}



static void Test_BFu0c_Vp_BFu15ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu15ll");
    static BFu0c_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Vp_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Vp_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu15ll(Test_BFu0c_Vp_BFu15ll, "BFu0c_Vp_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu15s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:15;
};
//SIG(1 BFu0c_Vp_BFu15s) C1{ Fc:0 Fp Fs:15}



static void Test_BFu0c_Vp_BFu15s()
{
  {
    init_simple_test("BFu0c_Vp_BFu15s");
    static BFu0c_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0c_Vp_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0c_Vp_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu15s(Test_BFu0c_Vp_BFu15s, "BFu0c_Vp_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu16i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:16;
};
//SIG(1 BFu0c_Vp_BFu16i) C1{ Fc:0 Fp Fi:16}



static void Test_BFu0c_Vp_BFu16i()
{
  {
    init_simple_test("BFu0c_Vp_BFu16i");
    static BFu0c_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Vp_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Vp_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu16i(Test_BFu0c_Vp_BFu16i, "BFu0c_Vp_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu16ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0c_Vp_BFu16ll) C1{ Fc:0 Fp FL:16}



static void Test_BFu0c_Vp_BFu16ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu16ll");
    static BFu0c_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Vp_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Vp_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu16ll(Test_BFu0c_Vp_BFu16ll, "BFu0c_Vp_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu16s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:16;
};
//SIG(1 BFu0c_Vp_BFu16s) C1{ Fc:0 Fp Fs:16}



static void Test_BFu0c_Vp_BFu16s()
{
  {
    init_simple_test("BFu0c_Vp_BFu16s");
    static BFu0c_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0c_Vp_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0c_Vp_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu16s(Test_BFu0c_Vp_BFu16s, "BFu0c_Vp_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu17i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:17;
};
//SIG(1 BFu0c_Vp_BFu17i) C1{ Fc:0 Fp Fi:17}



static void Test_BFu0c_Vp_BFu17i()
{
  {
    init_simple_test("BFu0c_Vp_BFu17i");
    static BFu0c_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0c_Vp_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0c_Vp_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu17i(Test_BFu0c_Vp_BFu17i, "BFu0c_Vp_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu17ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0c_Vp_BFu17ll) C1{ Fc:0 Fp FL:17}



static void Test_BFu0c_Vp_BFu17ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu17ll");
    static BFu0c_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0c_Vp_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0c_Vp_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu17ll(Test_BFu0c_Vp_BFu17ll, "BFu0c_Vp_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu1c  {
  unsigned char  :0;
  void *v1;
  unsigned char v2:1;
};
//SIG(1 BFu0c_Vp_BFu1c) C1{ Fc:0 Fp Fc:1}



static void Test_BFu0c_Vp_BFu1c()
{
  {
    init_simple_test("BFu0c_Vp_BFu1c");
    static BFu0c_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Vp_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu1c(Test_BFu0c_Vp_BFu1c, "BFu0c_Vp_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu1i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:1;
};
//SIG(1 BFu0c_Vp_BFu1i) C1{ Fc:0 Fp Fi:1}



static void Test_BFu0c_Vp_BFu1i()
{
  {
    init_simple_test("BFu0c_Vp_BFu1i");
    static BFu0c_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Vp_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu1i(Test_BFu0c_Vp_BFu1i, "BFu0c_Vp_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu1ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0c_Vp_BFu1ll) C1{ Fc:0 Fp FL:1}



static void Test_BFu0c_Vp_BFu1ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu1ll");
    static BFu0c_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Vp_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu1ll(Test_BFu0c_Vp_BFu1ll, "BFu0c_Vp_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu1s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:1;
};
//SIG(1 BFu0c_Vp_BFu1s) C1{ Fc:0 Fp Fs:1}



static void Test_BFu0c_Vp_BFu1s()
{
  {
    init_simple_test("BFu0c_Vp_BFu1s");
    static BFu0c_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0c_Vp_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu1s(Test_BFu0c_Vp_BFu1s, "BFu0c_Vp_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu31i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:31;
};
//SIG(1 BFu0c_Vp_BFu31i) C1{ Fc:0 Fp Fi:31}



static void Test_BFu0c_Vp_BFu31i()
{
  {
    init_simple_test("BFu0c_Vp_BFu31i");
    static BFu0c_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0c_Vp_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0c_Vp_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu31i(Test_BFu0c_Vp_BFu31i, "BFu0c_Vp_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu31ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0c_Vp_BFu31ll) C1{ Fc:0 Fp FL:31}



static void Test_BFu0c_Vp_BFu31ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu31ll");
    static BFu0c_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0c_Vp_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0c_Vp_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu31ll(Test_BFu0c_Vp_BFu31ll, "BFu0c_Vp_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu32i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:32;
};
//SIG(1 BFu0c_Vp_BFu32i) C1{ Fc:0 Fp Fi:32}



static void Test_BFu0c_Vp_BFu32i()
{
  {
    init_simple_test("BFu0c_Vp_BFu32i");
    static BFu0c_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0c_Vp_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0c_Vp_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu32i(Test_BFu0c_Vp_BFu32i, "BFu0c_Vp_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu32ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0c_Vp_BFu32ll) C1{ Fc:0 Fp FL:32}



static void Test_BFu0c_Vp_BFu32ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu32ll");
    static BFu0c_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0c_Vp_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0c_Vp_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu32ll(Test_BFu0c_Vp_BFu32ll, "BFu0c_Vp_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu33  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0c_Vp_BFu33) C1{ Fc:0 Fp FL:33}



static void Test_BFu0c_Vp_BFu33()
{
  {
    init_simple_test("BFu0c_Vp_BFu33");
    static BFu0c_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0c_Vp_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0c_Vp_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu33(Test_BFu0c_Vp_BFu33, "BFu0c_Vp_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu7c  {
  unsigned char  :0;
  void *v1;
  unsigned char v2:7;
};
//SIG(1 BFu0c_Vp_BFu7c) C1{ Fc:0 Fp Fc:7}



static void Test_BFu0c_Vp_BFu7c()
{
  {
    init_simple_test("BFu0c_Vp_BFu7c");
    static BFu0c_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Vp_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Vp_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu7c(Test_BFu0c_Vp_BFu7c, "BFu0c_Vp_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu7i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:7;
};
//SIG(1 BFu0c_Vp_BFu7i) C1{ Fc:0 Fp Fi:7}



static void Test_BFu0c_Vp_BFu7i()
{
  {
    init_simple_test("BFu0c_Vp_BFu7i");
    static BFu0c_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Vp_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Vp_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu7i(Test_BFu0c_Vp_BFu7i, "BFu0c_Vp_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu7ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0c_Vp_BFu7ll) C1{ Fc:0 Fp FL:7}



static void Test_BFu0c_Vp_BFu7ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu7ll");
    static BFu0c_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Vp_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Vp_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu7ll(Test_BFu0c_Vp_BFu7ll, "BFu0c_Vp_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu7s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:7;
};
//SIG(1 BFu0c_Vp_BFu7s) C1{ Fc:0 Fp Fs:7}



static void Test_BFu0c_Vp_BFu7s()
{
  {
    init_simple_test("BFu0c_Vp_BFu7s");
    static BFu0c_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0c_Vp_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0c_Vp_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu7s(Test_BFu0c_Vp_BFu7s, "BFu0c_Vp_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu8c  {
  unsigned char  :0;
  void *v1;
  unsigned char v2:8;
};
//SIG(1 BFu0c_Vp_BFu8c) C1{ Fc:0 Fp Fc:8}



static void Test_BFu0c_Vp_BFu8c()
{
  {
    init_simple_test("BFu0c_Vp_BFu8c");
    static BFu0c_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Vp_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Vp_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu8c(Test_BFu0c_Vp_BFu8c, "BFu0c_Vp_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu8i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:8;
};
//SIG(1 BFu0c_Vp_BFu8i) C1{ Fc:0 Fp Fi:8}



static void Test_BFu0c_Vp_BFu8i()
{
  {
    init_simple_test("BFu0c_Vp_BFu8i");
    static BFu0c_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Vp_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Vp_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu8i(Test_BFu0c_Vp_BFu8i, "BFu0c_Vp_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu8ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0c_Vp_BFu8ll) C1{ Fc:0 Fp FL:8}



static void Test_BFu0c_Vp_BFu8ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu8ll");
    static BFu0c_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Vp_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Vp_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu8ll(Test_BFu0c_Vp_BFu8ll, "BFu0c_Vp_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu8s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:8;
};
//SIG(1 BFu0c_Vp_BFu8s) C1{ Fc:0 Fp Fs:8}



static void Test_BFu0c_Vp_BFu8s()
{
  {
    init_simple_test("BFu0c_Vp_BFu8s");
    static BFu0c_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0c_Vp_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0c_Vp_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu8s(Test_BFu0c_Vp_BFu8s, "BFu0c_Vp_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu9i  {
  unsigned char  :0;
  void *v1;
  unsigned int v2:9;
};
//SIG(1 BFu0c_Vp_BFu9i) C1{ Fc:0 Fp Fi:9}



static void Test_BFu0c_Vp_BFu9i()
{
  {
    init_simple_test("BFu0c_Vp_BFu9i");
    static BFu0c_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Vp_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Vp_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu9i(Test_BFu0c_Vp_BFu9i, "BFu0c_Vp_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu9ll  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0c_Vp_BFu9ll) C1{ Fc:0 Fp FL:9}



static void Test_BFu0c_Vp_BFu9ll()
{
  {
    init_simple_test("BFu0c_Vp_BFu9ll");
    static BFu0c_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Vp_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Vp_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu9ll(Test_BFu0c_Vp_BFu9ll, "BFu0c_Vp_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_BFu9s  {
  unsigned char  :0;
  void *v1;
  unsigned short v2:9;
};
//SIG(1 BFu0c_Vp_BFu9s) C1{ Fc:0 Fp Fs:9}



static void Test_BFu0c_Vp_BFu9s()
{
  {
    init_simple_test("BFu0c_Vp_BFu9s");
    static BFu0c_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0c_Vp_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0c_Vp_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_BFu9s(Test_BFu0c_Vp_BFu9s, "BFu0c_Vp_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_C  {
  unsigned char  :0;
  void *v1;
  char v2;
};
//SIG(1 BFu0c_Vp_C) C1{ Fc:0 Fp Fc}



static void Test_BFu0c_Vp_C()
{
  {
    init_simple_test("BFu0c_Vp_C");
    static BFu0c_Vp_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_C)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_C(Test_BFu0c_Vp_C, "BFu0c_Vp_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_D  {
  unsigned char  :0;
  void *v1;
  double v2;
};
//SIG(1 BFu0c_Vp_D) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Vp_D()
{
  {
    init_simple_test("BFu0c_Vp_D");
    static BFu0c_Vp_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_D)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_D(Test_BFu0c_Vp_D, "BFu0c_Vp_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_F  {
  unsigned char  :0;
  void *v1;
  float v2;
};
//SIG(1 BFu0c_Vp_F) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Vp_F()
{
  {
    init_simple_test("BFu0c_Vp_F");
    static BFu0c_Vp_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_F)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_F(Test_BFu0c_Vp_F, "BFu0c_Vp_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_I  {
  unsigned char  :0;
  void *v1;
  int v2;
};
//SIG(1 BFu0c_Vp_I) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Vp_I()
{
  {
    init_simple_test("BFu0c_Vp_I");
    static BFu0c_Vp_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_I)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_I(Test_BFu0c_Vp_I, "BFu0c_Vp_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Ip  {
  unsigned char  :0;
  void *v1;
  int *v2;
};
//SIG(1 BFu0c_Vp_Ip) C1{ Fc:0 Fp[2]}



static void Test_BFu0c_Vp_Ip()
{
  {
    init_simple_test("BFu0c_Vp_Ip");
    static BFu0c_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Ip)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Ip(Test_BFu0c_Vp_Ip, "BFu0c_Vp_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_L  {
  unsigned char  :0;
  void *v1;
  __tsi64 v2;
};
//SIG(1 BFu0c_Vp_L) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Vp_L()
{
  {
    init_simple_test("BFu0c_Vp_L");
    static BFu0c_Vp_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_L)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_L(Test_BFu0c_Vp_L, "BFu0c_Vp_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_S  {
  unsigned char  :0;
  void *v1;
  short v2;
};
//SIG(1 BFu0c_Vp_S) C1{ Fc:0 Fp Fs}



static void Test_BFu0c_Vp_S()
{
  {
    init_simple_test("BFu0c_Vp_S");
    static BFu0c_Vp_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_S)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_S(Test_BFu0c_Vp_S, "BFu0c_Vp_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Uc  {
  unsigned char  :0;
  void *v1;
  unsigned char v2;
};
//SIG(1 BFu0c_Vp_Uc) C1{ Fc:0 Fp Fc}



static void Test_BFu0c_Vp_Uc()
{
  {
    init_simple_test("BFu0c_Vp_Uc");
    static BFu0c_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Uc)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Uc(Test_BFu0c_Vp_Uc, "BFu0c_Vp_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Ui  {
  unsigned char  :0;
  void *v1;
  unsigned int v2;
};
//SIG(1 BFu0c_Vp_Ui) C1{ Fc:0 Fp Fi}



static void Test_BFu0c_Vp_Ui()
{
  {
    init_simple_test("BFu0c_Vp_Ui");
    static BFu0c_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Ui)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Ui(Test_BFu0c_Vp_Ui, "BFu0c_Vp_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Ul  {
  unsigned char  :0;
  void *v1;
  __tsu64 v2;
};
//SIG(1 BFu0c_Vp_Ul) C1{ Fc:0 Fp FL}



static void Test_BFu0c_Vp_Ul()
{
  {
    init_simple_test("BFu0c_Vp_Ul");
    static BFu0c_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0c_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Ul)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Ul(Test_BFu0c_Vp_Ul, "BFu0c_Vp_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Us  {
  unsigned char  :0;
  void *v1;
  unsigned short v2;
};
//SIG(1 BFu0c_Vp_Us) C1{ Fc:0 Fp Fs}



static void Test_BFu0c_Vp_Us()
{
  {
    init_simple_test("BFu0c_Vp_Us");
    static BFu0c_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Us)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Us(Test_BFu0c_Vp_Us, "BFu0c_Vp_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0c_Vp_Vp  {
  unsigned char  :0;
  void *v1;
  void *v2;
};
//SIG(1 BFu0c_Vp_Vp) C1{ Fc:0 Fp[2]}



static void Test_BFu0c_Vp_Vp()
{
  {
    init_simple_test("BFu0c_Vp_Vp");
    static BFu0c_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0c_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0c_Vp_Vp)");
    check_field_offset(lv, v1, 0, "BFu0c_Vp_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0c_Vp_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0c_Vp_Vp(Test_BFu0c_Vp_Vp, "BFu0c_Vp_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i  {
  unsigned int  :0;
};
//SIG(1 BFu0i) C1{ Fi:0}



static void Test_BFu0i()
{
  {
    init_simple_test("BFu0i");
    static BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i(Test_BFu0i, "BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c  {
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c) C1{ Fi:0 Fc:0}



static void Test_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c");
    static BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c(Test_BFu0i_BFs0c, "BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c");
    static BFu0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c(Test_BFu0i_BFs0c_BFs0c, "BFu0i_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFs0c");
    static BFu0i_BFs0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFs0c(Test_BFu0i_BFs0c_BFs0c_BFs0c, "BFu0i_BFs0c_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFs0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFs0i");
    static BFu0i_BFs0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFs0i(Test_BFu0i_BFs0c_BFs0c_BFs0i, "BFu0i_BFs0c_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFs0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFs0ll");
    static BFu0i_BFs0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFs0ll(Test_BFu0i_BFs0c_BFs0c_BFs0ll, "BFu0i_BFs0c_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFs0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFs0s");
    static BFu0i_BFs0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFs0s(Test_BFu0i_BFs0c_BFs0c_BFs0s, "BFu0i_BFs0c_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFu0c");
    static BFu0i_BFs0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFu0c(Test_BFu0i_BFs0c_BFs0c_BFu0c, "BFu0i_BFs0c_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFu0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFu0i");
    static BFu0i_BFs0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFu0i(Test_BFu0i_BFs0c_BFs0c_BFu0i, "BFu0i_BFs0c_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFu0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFu0ll");
    static BFu0i_BFs0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFu0ll(Test_BFu0i_BFs0c_BFs0c_BFu0ll, "BFu0i_BFs0c_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0c_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0c_BFu0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0c_BFu0s");
    static BFu0i_BFs0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0c_BFu0s(Test_BFu0i_BFs0c_BFs0c_BFu0s, "BFu0i_BFs0c_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i) C1{ Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i");
    static BFu0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i(Test_BFu0i_BFs0c_BFs0i, "BFu0i_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFs0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFs0c");
    static BFu0i_BFs0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFs0c(Test_BFu0i_BFs0c_BFs0i_BFs0c, "BFu0i_BFs0c_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFs0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFs0i");
    static BFu0i_BFs0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFs0i(Test_BFu0i_BFs0c_BFs0i_BFs0i, "BFu0i_BFs0c_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFs0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFs0ll");
    static BFu0i_BFs0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFs0ll(Test_BFu0i_BFs0c_BFs0i_BFs0ll, "BFu0i_BFs0c_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFs0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFs0s");
    static BFu0i_BFs0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFs0s(Test_BFu0i_BFs0c_BFs0i_BFs0s, "BFu0i_BFs0c_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFu0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFu0c");
    static BFu0i_BFs0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFu0c(Test_BFu0i_BFs0c_BFs0i_BFu0c, "BFu0i_BFs0c_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFu0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFu0i");
    static BFu0i_BFs0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFu0i(Test_BFu0i_BFs0c_BFs0i_BFu0i, "BFu0i_BFs0c_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFu0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFu0ll");
    static BFu0i_BFs0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFu0ll(Test_BFu0i_BFs0c_BFs0i_BFu0ll, "BFu0i_BFs0c_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0i_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0i_BFu0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0i_BFu0s");
    static BFu0i_BFs0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0i_BFu0s(Test_BFu0i_BFs0c_BFs0i_BFu0s, "BFu0i_BFs0c_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll) C1{ Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll");
    static BFu0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll(Test_BFu0i_BFs0c_BFs0ll, "BFu0i_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFs0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFs0c");
    static BFu0i_BFs0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFs0c(Test_BFu0i_BFs0c_BFs0ll_BFs0c, "BFu0i_BFs0c_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFs0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFs0i");
    static BFu0i_BFs0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFs0i(Test_BFu0i_BFs0c_BFs0ll_BFs0i, "BFu0i_BFs0c_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFs0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFs0ll");
    static BFu0i_BFs0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFs0ll(Test_BFu0i_BFs0c_BFs0ll_BFs0ll, "BFu0i_BFs0c_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFs0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFs0s");
    static BFu0i_BFs0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFs0s(Test_BFu0i_BFs0c_BFs0ll_BFs0s, "BFu0i_BFs0c_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFu0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFu0c");
    static BFu0i_BFs0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFu0c(Test_BFu0i_BFs0c_BFs0ll_BFu0c, "BFu0i_BFs0c_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFu0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFu0i");
    static BFu0i_BFs0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFu0i(Test_BFu0i_BFs0c_BFs0ll_BFu0i, "BFu0i_BFs0c_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFu0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFu0ll");
    static BFu0i_BFs0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFu0ll(Test_BFu0i_BFs0c_BFs0ll_BFu0ll, "BFu0i_BFs0c_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0ll_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0ll_BFu0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0ll_BFu0s");
    static BFu0i_BFs0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0ll_BFu0s(Test_BFu0i_BFs0c_BFs0ll_BFu0s, "BFu0i_BFs0c_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s) C1{ Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s");
    static BFu0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s(Test_BFu0i_BFs0c_BFs0s, "BFu0i_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFs0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFs0c");
    static BFu0i_BFs0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFs0c(Test_BFu0i_BFs0c_BFs0s_BFs0c, "BFu0i_BFs0c_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFs0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFs0i");
    static BFu0i_BFs0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFs0i(Test_BFu0i_BFs0c_BFs0s_BFs0i, "BFu0i_BFs0c_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFs0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFs0ll");
    static BFu0i_BFs0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFs0ll(Test_BFu0i_BFs0c_BFs0s_BFs0ll, "BFu0i_BFs0c_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFs0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFs0s");
    static BFu0i_BFs0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFs0s(Test_BFu0i_BFs0c_BFs0s_BFs0s, "BFu0i_BFs0c_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFu0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0c_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFu0c");
    static BFu0i_BFs0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFu0c(Test_BFu0i_BFs0c_BFs0s_BFu0c, "BFu0i_BFs0c_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFu0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0c_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFu0i");
    static BFu0i_BFs0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFu0i(Test_BFu0i_BFs0c_BFs0s_BFu0i, "BFu0i_BFs0c_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFu0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0c_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFu0ll");
    static BFu0i_BFs0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFu0ll(Test_BFu0i_BFs0c_BFs0s_BFu0ll, "BFu0i_BFs0c_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFs0s_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFs0s_BFu0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0c_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFs0s_BFu0s");
    static BFu0i_BFs0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFs0s_BFu0s(Test_BFu0i_BFs0c_BFs0s_BFu0s, "BFu0i_BFs0c_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c");
    static BFu0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c(Test_BFu0i_BFs0c_BFu0c, "BFu0i_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFs0c");
    static BFu0i_BFs0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFs0c(Test_BFu0i_BFs0c_BFu0c_BFs0c, "BFu0i_BFs0c_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFs0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFs0i");
    static BFu0i_BFs0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFs0i(Test_BFu0i_BFs0c_BFu0c_BFs0i, "BFu0i_BFs0c_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFs0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFs0ll");
    static BFu0i_BFs0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFs0ll(Test_BFu0i_BFs0c_BFu0c_BFs0ll, "BFu0i_BFs0c_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFs0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFs0s");
    static BFu0i_BFs0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFs0s(Test_BFu0i_BFs0c_BFu0c_BFs0s, "BFu0i_BFs0c_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFu0c");
    static BFu0i_BFs0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFu0c(Test_BFu0i_BFs0c_BFu0c_BFu0c, "BFu0i_BFs0c_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFu0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFu0i");
    static BFu0i_BFs0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFu0i(Test_BFu0i_BFs0c_BFu0c_BFu0i, "BFu0i_BFs0c_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFu0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFu0ll");
    static BFu0i_BFs0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFu0ll(Test_BFu0i_BFs0c_BFu0c_BFu0ll, "BFu0i_BFs0c_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0c_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0c_BFu0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0c_BFu0s");
    static BFu0i_BFs0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0c_BFu0s(Test_BFu0i_BFs0c_BFu0c_BFu0s, "BFu0i_BFs0c_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i) C1{ Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i");
    static BFu0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i(Test_BFu0i_BFs0c_BFu0i, "BFu0i_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFs0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFs0c");
    static BFu0i_BFs0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFs0c(Test_BFu0i_BFs0c_BFu0i_BFs0c, "BFu0i_BFs0c_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFs0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFs0i");
    static BFu0i_BFs0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFs0i(Test_BFu0i_BFs0c_BFu0i_BFs0i, "BFu0i_BFs0c_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFs0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFs0ll");
    static BFu0i_BFs0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFs0ll(Test_BFu0i_BFs0c_BFu0i_BFs0ll, "BFu0i_BFs0c_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFs0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFs0s");
    static BFu0i_BFs0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFs0s(Test_BFu0i_BFs0c_BFu0i_BFs0s, "BFu0i_BFs0c_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFu0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFu0c");
    static BFu0i_BFs0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFu0c(Test_BFu0i_BFs0c_BFu0i_BFu0c, "BFu0i_BFs0c_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFu0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFu0i");
    static BFu0i_BFs0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFu0i(Test_BFu0i_BFs0c_BFu0i_BFu0i, "BFu0i_BFs0c_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFu0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFu0ll");
    static BFu0i_BFs0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFu0ll(Test_BFu0i_BFs0c_BFu0i_BFu0ll, "BFu0i_BFs0c_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0i_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0i_BFu0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0i_BFu0s");
    static BFu0i_BFs0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0i_BFu0s(Test_BFu0i_BFs0c_BFu0i_BFu0s, "BFu0i_BFs0c_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll) C1{ Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll");
    static BFu0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll(Test_BFu0i_BFs0c_BFu0ll, "BFu0i_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFs0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFs0c");
    static BFu0i_BFs0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFs0c(Test_BFu0i_BFs0c_BFu0ll_BFs0c, "BFu0i_BFs0c_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFs0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFs0i");
    static BFu0i_BFs0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFs0i(Test_BFu0i_BFs0c_BFu0ll_BFs0i, "BFu0i_BFs0c_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFs0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFs0ll");
    static BFu0i_BFs0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFs0ll(Test_BFu0i_BFs0c_BFu0ll_BFs0ll, "BFu0i_BFs0c_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFs0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFs0s");
    static BFu0i_BFs0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFs0s(Test_BFu0i_BFs0c_BFu0ll_BFs0s, "BFu0i_BFs0c_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFu0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFu0c");
    static BFu0i_BFs0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFu0c(Test_BFu0i_BFs0c_BFu0ll_BFu0c, "BFu0i_BFs0c_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFu0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFu0i");
    static BFu0i_BFs0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFu0i(Test_BFu0i_BFs0c_BFu0ll_BFu0i, "BFu0i_BFs0c_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFu0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFu0ll");
    static BFu0i_BFs0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFu0ll(Test_BFu0i_BFs0c_BFu0ll_BFu0ll, "BFu0i_BFs0c_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0ll_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0ll_BFu0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0ll_BFu0s");
    static BFu0i_BFs0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0ll_BFu0s(Test_BFu0i_BFs0c_BFu0ll_BFu0s, "BFu0i_BFs0c_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s) C1{ Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s");
    static BFu0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s(Test_BFu0i_BFs0c_BFu0s, "BFu0i_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFs0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFs0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFs0c");
    static BFu0i_BFs0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFs0c(Test_BFu0i_BFs0c_BFu0s_BFs0c, "BFu0i_BFs0c_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFs0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFs0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFs0i");
    static BFu0i_BFs0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFs0i(Test_BFu0i_BFs0c_BFu0s_BFs0i, "BFu0i_BFs0c_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFs0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFs0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFs0ll");
    static BFu0i_BFs0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFs0ll(Test_BFu0i_BFs0c_BFu0s_BFs0ll, "BFu0i_BFs0c_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFs0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFs0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFs0s");
    static BFu0i_BFs0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFs0s(Test_BFu0i_BFs0c_BFu0s_BFs0s, "BFu0i_BFs0c_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFu0c  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFu0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFu0c");
    static BFu0i_BFs0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFu0c(Test_BFu0i_BFs0c_BFu0s_BFu0c, "BFu0i_BFs0c_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFu0i  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFu0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFu0i");
    static BFu0i_BFs0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFu0i(Test_BFu0i_BFs0c_BFu0s_BFu0i, "BFu0i_BFs0c_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFu0ll  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFu0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFu0ll");
    static BFu0i_BFs0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFu0ll(Test_BFu0i_BFs0c_BFu0s_BFu0ll, "BFu0i_BFs0c_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0c_BFu0s_BFu0s  {
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0c_BFu0s_BFu0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0c_BFu0s_BFu0s");
    static BFu0i_BFs0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0c_BFu0s_BFu0s(Test_BFu0i_BFs0c_BFu0s_BFu0s, "BFu0i_BFs0c_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i  {
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i) C1{ Fi:0 Fi:0}



static void Test_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i");
    static BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i(Test_BFu0i_BFs0i, "BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c) C1{ Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c");
    static BFu0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c(Test_BFu0i_BFs0i_BFs0c, "BFu0i_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFs0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFs0c");
    static BFu0i_BFs0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFs0c(Test_BFu0i_BFs0i_BFs0c_BFs0c, "BFu0i_BFs0i_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFs0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFs0i");
    static BFu0i_BFs0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFs0i(Test_BFu0i_BFs0i_BFs0c_BFs0i, "BFu0i_BFs0i_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFs0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFs0ll");
    static BFu0i_BFs0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFs0ll(Test_BFu0i_BFs0i_BFs0c_BFs0ll, "BFu0i_BFs0i_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFs0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFs0s");
    static BFu0i_BFs0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFs0s(Test_BFu0i_BFs0i_BFs0c_BFs0s, "BFu0i_BFs0i_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFu0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFu0c");
    static BFu0i_BFs0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFu0c(Test_BFu0i_BFs0i_BFs0c_BFu0c, "BFu0i_BFs0i_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFu0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFu0i");
    static BFu0i_BFs0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFu0i(Test_BFu0i_BFs0i_BFs0c_BFu0i, "BFu0i_BFs0i_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFu0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFu0ll");
    static BFu0i_BFs0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFu0ll(Test_BFu0i_BFs0i_BFs0c_BFu0ll, "BFu0i_BFs0i_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0c_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0c_BFu0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0c_BFu0s");
    static BFu0i_BFs0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0c_BFu0s(Test_BFu0i_BFs0i_BFs0c_BFu0s, "BFu0i_BFs0i_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i");
    static BFu0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i(Test_BFu0i_BFs0i_BFs0i, "BFu0i_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFs0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFs0c");
    static BFu0i_BFs0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFs0c(Test_BFu0i_BFs0i_BFs0i_BFs0c, "BFu0i_BFs0i_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFs0i");
    static BFu0i_BFs0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFs0i(Test_BFu0i_BFs0i_BFs0i_BFs0i, "BFu0i_BFs0i_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFs0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFs0ll");
    static BFu0i_BFs0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFs0ll(Test_BFu0i_BFs0i_BFs0i_BFs0ll, "BFu0i_BFs0i_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFs0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFs0s");
    static BFu0i_BFs0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFs0s(Test_BFu0i_BFs0i_BFs0i_BFs0s, "BFu0i_BFs0i_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFu0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFu0c");
    static BFu0i_BFs0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFu0c(Test_BFu0i_BFs0i_BFs0i_BFu0c, "BFu0i_BFs0i_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFu0i");
    static BFu0i_BFs0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFu0i(Test_BFu0i_BFs0i_BFs0i_BFu0i, "BFu0i_BFs0i_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFu0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFu0ll");
    static BFu0i_BFs0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFu0ll(Test_BFu0i_BFs0i_BFs0i_BFu0ll, "BFu0i_BFs0i_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0i_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0i_BFu0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0i_BFu0s");
    static BFu0i_BFs0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0i_BFu0s(Test_BFu0i_BFs0i_BFs0i_BFu0s, "BFu0i_BFs0i_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll) C1{ Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll");
    static BFu0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll(Test_BFu0i_BFs0i_BFs0ll, "BFu0i_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFs0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFs0c");
    static BFu0i_BFs0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFs0c(Test_BFu0i_BFs0i_BFs0ll_BFs0c, "BFu0i_BFs0i_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFs0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFs0i");
    static BFu0i_BFs0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFs0i(Test_BFu0i_BFs0i_BFs0ll_BFs0i, "BFu0i_BFs0i_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFs0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFs0ll");
    static BFu0i_BFs0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFs0ll(Test_BFu0i_BFs0i_BFs0ll_BFs0ll, "BFu0i_BFs0i_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFs0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFs0s");
    static BFu0i_BFs0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFs0s(Test_BFu0i_BFs0i_BFs0ll_BFs0s, "BFu0i_BFs0i_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFu0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFu0c");
    static BFu0i_BFs0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFu0c(Test_BFu0i_BFs0i_BFs0ll_BFu0c, "BFu0i_BFs0i_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFu0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFu0i");
    static BFu0i_BFs0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFu0i(Test_BFu0i_BFs0i_BFs0ll_BFu0i, "BFu0i_BFs0i_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFu0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFu0ll");
    static BFu0i_BFs0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFu0ll(Test_BFu0i_BFs0i_BFs0ll_BFu0ll, "BFu0i_BFs0i_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0ll_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0ll_BFu0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0ll_BFu0s");
    static BFu0i_BFs0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0ll_BFu0s(Test_BFu0i_BFs0i_BFs0ll_BFu0s, "BFu0i_BFs0i_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s) C1{ Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s");
    static BFu0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s(Test_BFu0i_BFs0i_BFs0s, "BFu0i_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFs0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFs0c");
    static BFu0i_BFs0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFs0c(Test_BFu0i_BFs0i_BFs0s_BFs0c, "BFu0i_BFs0i_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFs0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFs0i");
    static BFu0i_BFs0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFs0i(Test_BFu0i_BFs0i_BFs0s_BFs0i, "BFu0i_BFs0i_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFs0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFs0ll");
    static BFu0i_BFs0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFs0ll(Test_BFu0i_BFs0i_BFs0s_BFs0ll, "BFu0i_BFs0i_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFs0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFs0s");
    static BFu0i_BFs0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFs0s(Test_BFu0i_BFs0i_BFs0s_BFs0s, "BFu0i_BFs0i_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFu0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0i_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFu0c");
    static BFu0i_BFs0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFu0c(Test_BFu0i_BFs0i_BFs0s_BFu0c, "BFu0i_BFs0i_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFu0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0i_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFu0i");
    static BFu0i_BFs0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFu0i(Test_BFu0i_BFs0i_BFs0s_BFu0i, "BFu0i_BFs0i_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFu0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0i_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFu0ll");
    static BFu0i_BFs0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFu0ll(Test_BFu0i_BFs0i_BFs0s_BFu0ll, "BFu0i_BFs0i_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFs0s_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFs0s_BFu0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0i_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFs0s_BFu0s");
    static BFu0i_BFs0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFs0s_BFu0s(Test_BFu0i_BFs0i_BFs0s_BFu0s, "BFu0i_BFs0i_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c) C1{ Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c");
    static BFu0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c(Test_BFu0i_BFs0i_BFu0c, "BFu0i_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFs0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFs0c");
    static BFu0i_BFs0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFs0c(Test_BFu0i_BFs0i_BFu0c_BFs0c, "BFu0i_BFs0i_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFs0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFs0i");
    static BFu0i_BFs0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFs0i(Test_BFu0i_BFs0i_BFu0c_BFs0i, "BFu0i_BFs0i_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFs0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFs0ll");
    static BFu0i_BFs0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFs0ll(Test_BFu0i_BFs0i_BFu0c_BFs0ll, "BFu0i_BFs0i_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFs0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFs0s");
    static BFu0i_BFs0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFs0s(Test_BFu0i_BFs0i_BFu0c_BFs0s, "BFu0i_BFs0i_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFu0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFu0c");
    static BFu0i_BFs0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFu0c(Test_BFu0i_BFs0i_BFu0c_BFu0c, "BFu0i_BFs0i_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFu0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFu0i");
    static BFu0i_BFs0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFu0i(Test_BFu0i_BFs0i_BFu0c_BFu0i, "BFu0i_BFs0i_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFu0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFu0ll");
    static BFu0i_BFs0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFu0ll(Test_BFu0i_BFs0i_BFu0c_BFu0ll, "BFu0i_BFs0i_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0c_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0c_BFu0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0c_BFu0s");
    static BFu0i_BFs0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0c_BFu0s(Test_BFu0i_BFs0i_BFu0c_BFu0s, "BFu0i_BFs0i_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i");
    static BFu0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i(Test_BFu0i_BFs0i_BFu0i, "BFu0i_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFs0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFs0c");
    static BFu0i_BFs0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFs0c(Test_BFu0i_BFs0i_BFu0i_BFs0c, "BFu0i_BFs0i_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFs0i");
    static BFu0i_BFs0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFs0i(Test_BFu0i_BFs0i_BFu0i_BFs0i, "BFu0i_BFs0i_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFs0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFs0ll");
    static BFu0i_BFs0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFs0ll(Test_BFu0i_BFs0i_BFu0i_BFs0ll, "BFu0i_BFs0i_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFs0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFs0s");
    static BFu0i_BFs0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFs0s(Test_BFu0i_BFs0i_BFu0i_BFs0s, "BFu0i_BFs0i_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFu0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFu0c");
    static BFu0i_BFs0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFu0c(Test_BFu0i_BFs0i_BFu0i_BFu0c, "BFu0i_BFs0i_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFu0i");
    static BFu0i_BFs0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFu0i(Test_BFu0i_BFs0i_BFu0i_BFu0i, "BFu0i_BFs0i_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFu0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFu0ll");
    static BFu0i_BFs0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFu0ll(Test_BFu0i_BFs0i_BFu0i_BFu0ll, "BFu0i_BFs0i_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0i_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0i_BFu0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0i_BFu0s");
    static BFu0i_BFs0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0i_BFu0s(Test_BFu0i_BFs0i_BFu0i_BFu0s, "BFu0i_BFs0i_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll) C1{ Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll");
    static BFu0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll(Test_BFu0i_BFs0i_BFu0ll, "BFu0i_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFs0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFs0c");
    static BFu0i_BFs0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFs0c(Test_BFu0i_BFs0i_BFu0ll_BFs0c, "BFu0i_BFs0i_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFs0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFs0i");
    static BFu0i_BFs0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFs0i(Test_BFu0i_BFs0i_BFu0ll_BFs0i, "BFu0i_BFs0i_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFs0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFs0ll");
    static BFu0i_BFs0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFs0ll(Test_BFu0i_BFs0i_BFu0ll_BFs0ll, "BFu0i_BFs0i_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFs0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFs0s");
    static BFu0i_BFs0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFs0s(Test_BFu0i_BFs0i_BFu0ll_BFs0s, "BFu0i_BFs0i_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFu0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFu0c");
    static BFu0i_BFs0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFu0c(Test_BFu0i_BFs0i_BFu0ll_BFu0c, "BFu0i_BFs0i_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFu0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFu0i");
    static BFu0i_BFs0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFu0i(Test_BFu0i_BFs0i_BFu0ll_BFu0i, "BFu0i_BFs0i_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFu0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFu0ll");
    static BFu0i_BFs0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFu0ll(Test_BFu0i_BFs0i_BFu0ll_BFu0ll, "BFu0i_BFs0i_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0ll_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0ll_BFu0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0ll_BFu0s");
    static BFu0i_BFs0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0ll_BFu0s(Test_BFu0i_BFs0i_BFu0ll_BFu0s, "BFu0i_BFs0i_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s) C1{ Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s");
    static BFu0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s(Test_BFu0i_BFs0i_BFu0s, "BFu0i_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFs0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFs0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFs0c");
    static BFu0i_BFs0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFs0c(Test_BFu0i_BFs0i_BFu0s_BFs0c, "BFu0i_BFs0i_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFs0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFs0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFs0i");
    static BFu0i_BFs0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFs0i(Test_BFu0i_BFs0i_BFu0s_BFs0i, "BFu0i_BFs0i_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFs0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFs0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFs0ll");
    static BFu0i_BFs0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFs0ll(Test_BFu0i_BFs0i_BFu0s_BFs0ll, "BFu0i_BFs0i_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFs0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFs0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFs0s");
    static BFu0i_BFs0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFs0s(Test_BFu0i_BFs0i_BFu0s_BFs0s, "BFu0i_BFs0i_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFu0c  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFu0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFu0c");
    static BFu0i_BFs0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFu0c(Test_BFu0i_BFs0i_BFu0s_BFu0c, "BFu0i_BFs0i_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFu0i  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFu0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFu0i");
    static BFu0i_BFs0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFu0i(Test_BFu0i_BFs0i_BFu0s_BFu0i, "BFu0i_BFs0i_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFu0ll  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFu0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFu0ll");
    static BFu0i_BFs0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFu0ll(Test_BFu0i_BFs0i_BFu0s_BFu0ll, "BFu0i_BFs0i_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0i_BFu0s_BFu0s  {
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0i_BFu0s_BFu0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0i_BFu0s_BFu0s");
    static BFu0i_BFs0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0i_BFu0s_BFu0s(Test_BFu0i_BFs0i_BFu0s_BFu0s, "BFu0i_BFs0i_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll) C1{ Fi:0 FL:0}



static void Test_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll");
    static BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll(Test_BFu0i_BFs0ll, "BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c) C1{ Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c");
    static BFu0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c(Test_BFu0i_BFs0ll_BFs0c, "BFu0i_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFs0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFs0c");
    static BFu0i_BFs0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFs0c(Test_BFu0i_BFs0ll_BFs0c_BFs0c, "BFu0i_BFs0ll_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFs0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFs0i");
    static BFu0i_BFs0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFs0i(Test_BFu0i_BFs0ll_BFs0c_BFs0i, "BFu0i_BFs0ll_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFs0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFs0ll");
    static BFu0i_BFs0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFs0ll(Test_BFu0i_BFs0ll_BFs0c_BFs0ll, "BFu0i_BFs0ll_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFs0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFs0s");
    static BFu0i_BFs0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFs0s(Test_BFu0i_BFs0ll_BFs0c_BFs0s, "BFu0i_BFs0ll_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFu0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFu0c");
    static BFu0i_BFs0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFu0c(Test_BFu0i_BFs0ll_BFs0c_BFu0c, "BFu0i_BFs0ll_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFu0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFu0i");
    static BFu0i_BFs0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFu0i(Test_BFu0i_BFs0ll_BFs0c_BFu0i, "BFu0i_BFs0ll_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFu0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFu0ll");
    static BFu0i_BFs0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFu0ll(Test_BFu0i_BFs0ll_BFs0c_BFu0ll, "BFu0i_BFs0ll_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0c_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0c_BFu0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0c_BFu0s");
    static BFu0i_BFs0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0c_BFu0s(Test_BFu0i_BFs0ll_BFs0c_BFu0s, "BFu0i_BFs0ll_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i) C1{ Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i");
    static BFu0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i(Test_BFu0i_BFs0ll_BFs0i, "BFu0i_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFs0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFs0c");
    static BFu0i_BFs0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFs0c(Test_BFu0i_BFs0ll_BFs0i_BFs0c, "BFu0i_BFs0ll_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFs0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFs0i");
    static BFu0i_BFs0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFs0i(Test_BFu0i_BFs0ll_BFs0i_BFs0i, "BFu0i_BFs0ll_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFs0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFs0ll");
    static BFu0i_BFs0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFs0ll(Test_BFu0i_BFs0ll_BFs0i_BFs0ll, "BFu0i_BFs0ll_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFs0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFs0s");
    static BFu0i_BFs0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFs0s(Test_BFu0i_BFs0ll_BFs0i_BFs0s, "BFu0i_BFs0ll_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFu0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFu0c");
    static BFu0i_BFs0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFu0c(Test_BFu0i_BFs0ll_BFs0i_BFu0c, "BFu0i_BFs0ll_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFu0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFu0i");
    static BFu0i_BFs0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFu0i(Test_BFu0i_BFs0ll_BFs0i_BFu0i, "BFu0i_BFs0ll_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFu0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFu0ll");
    static BFu0i_BFs0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFu0ll(Test_BFu0i_BFs0ll_BFs0i_BFu0ll, "BFu0i_BFs0ll_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0i_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0i_BFu0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0i_BFu0s");
    static BFu0i_BFs0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0i_BFu0s(Test_BFu0i_BFs0ll_BFs0i_BFu0s, "BFu0i_BFs0ll_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll");
    static BFu0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll(Test_BFu0i_BFs0ll_BFs0ll, "BFu0i_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFs0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFs0c");
    static BFu0i_BFs0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFs0c(Test_BFu0i_BFs0ll_BFs0ll_BFs0c, "BFu0i_BFs0ll_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFs0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFs0i");
    static BFu0i_BFs0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFs0i(Test_BFu0i_BFs0ll_BFs0ll_BFs0i, "BFu0i_BFs0ll_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFs0ll");
    static BFu0i_BFs0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFs0ll(Test_BFu0i_BFs0ll_BFs0ll_BFs0ll, "BFu0i_BFs0ll_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFs0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFs0s");
    static BFu0i_BFs0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFs0s(Test_BFu0i_BFs0ll_BFs0ll_BFs0s, "BFu0i_BFs0ll_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFu0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFu0c");
    static BFu0i_BFs0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFu0c(Test_BFu0i_BFs0ll_BFs0ll_BFu0c, "BFu0i_BFs0ll_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFu0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFu0i");
    static BFu0i_BFs0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFu0i(Test_BFu0i_BFs0ll_BFs0ll_BFu0i, "BFu0i_BFs0ll_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFu0ll");
    static BFu0i_BFs0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFu0ll(Test_BFu0i_BFs0ll_BFs0ll_BFu0ll, "BFu0i_BFs0ll_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0ll_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0ll_BFu0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0ll_BFu0s");
    static BFu0i_BFs0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0ll_BFu0s(Test_BFu0i_BFs0ll_BFs0ll_BFu0s, "BFu0i_BFs0ll_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s) C1{ Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s");
    static BFu0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s(Test_BFu0i_BFs0ll_BFs0s, "BFu0i_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFs0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFs0c");
    static BFu0i_BFs0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFs0c(Test_BFu0i_BFs0ll_BFs0s_BFs0c, "BFu0i_BFs0ll_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFs0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFs0i");
    static BFu0i_BFs0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFs0i(Test_BFu0i_BFs0ll_BFs0s_BFs0i, "BFu0i_BFs0ll_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFs0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFs0ll");
    static BFu0i_BFs0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFs0ll(Test_BFu0i_BFs0ll_BFs0s_BFs0ll, "BFu0i_BFs0ll_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFs0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFs0s");
    static BFu0i_BFs0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFs0s(Test_BFu0i_BFs0ll_BFs0s_BFs0s, "BFu0i_BFs0ll_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFu0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFu0c");
    static BFu0i_BFs0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFu0c(Test_BFu0i_BFs0ll_BFs0s_BFu0c, "BFu0i_BFs0ll_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFu0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFu0i");
    static BFu0i_BFs0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFu0i(Test_BFu0i_BFs0ll_BFs0s_BFu0i, "BFu0i_BFs0ll_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFu0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFu0ll");
    static BFu0i_BFs0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFu0ll(Test_BFu0i_BFs0ll_BFs0s_BFu0ll, "BFu0i_BFs0ll_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFs0s_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFs0s_BFu0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFs0s_BFu0s");
    static BFu0i_BFs0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFs0s_BFu0s(Test_BFu0i_BFs0ll_BFs0s_BFu0s, "BFu0i_BFs0ll_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c) C1{ Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c");
    static BFu0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c(Test_BFu0i_BFs0ll_BFu0c, "BFu0i_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFs0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFs0c");
    static BFu0i_BFs0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFs0c(Test_BFu0i_BFs0ll_BFu0c_BFs0c, "BFu0i_BFs0ll_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFs0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFs0i");
    static BFu0i_BFs0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFs0i(Test_BFu0i_BFs0ll_BFu0c_BFs0i, "BFu0i_BFs0ll_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFs0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFs0ll");
    static BFu0i_BFs0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFs0ll(Test_BFu0i_BFs0ll_BFu0c_BFs0ll, "BFu0i_BFs0ll_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFs0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFs0s");
    static BFu0i_BFs0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFs0s(Test_BFu0i_BFs0ll_BFu0c_BFs0s, "BFu0i_BFs0ll_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFu0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFu0c");
    static BFu0i_BFs0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFu0c(Test_BFu0i_BFs0ll_BFu0c_BFu0c, "BFu0i_BFs0ll_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFu0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFu0i");
    static BFu0i_BFs0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFu0i(Test_BFu0i_BFs0ll_BFu0c_BFu0i, "BFu0i_BFs0ll_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFu0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFu0ll");
    static BFu0i_BFs0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFu0ll(Test_BFu0i_BFs0ll_BFu0c_BFu0ll, "BFu0i_BFs0ll_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0c_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0c_BFu0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0c_BFu0s");
    static BFu0i_BFs0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0c_BFu0s(Test_BFu0i_BFs0ll_BFu0c_BFu0s, "BFu0i_BFs0ll_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i) C1{ Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i");
    static BFu0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i(Test_BFu0i_BFs0ll_BFu0i, "BFu0i_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFs0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFs0c");
    static BFu0i_BFs0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFs0c(Test_BFu0i_BFs0ll_BFu0i_BFs0c, "BFu0i_BFs0ll_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFs0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFs0i");
    static BFu0i_BFs0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFs0i(Test_BFu0i_BFs0ll_BFu0i_BFs0i, "BFu0i_BFs0ll_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFs0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFs0ll");
    static BFu0i_BFs0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFs0ll(Test_BFu0i_BFs0ll_BFu0i_BFs0ll, "BFu0i_BFs0ll_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFs0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFs0s");
    static BFu0i_BFs0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFs0s(Test_BFu0i_BFs0ll_BFu0i_BFs0s, "BFu0i_BFs0ll_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFu0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFu0c");
    static BFu0i_BFs0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFu0c(Test_BFu0i_BFs0ll_BFu0i_BFu0c, "BFu0i_BFs0ll_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFu0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFu0i");
    static BFu0i_BFs0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFu0i(Test_BFu0i_BFs0ll_BFu0i_BFu0i, "BFu0i_BFs0ll_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFu0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFu0ll");
    static BFu0i_BFs0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFu0ll(Test_BFu0i_BFs0ll_BFu0i_BFu0ll, "BFu0i_BFs0ll_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0i_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0i_BFu0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0i_BFu0s");
    static BFu0i_BFs0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0i_BFu0s(Test_BFu0i_BFs0ll_BFu0i_BFu0s, "BFu0i_BFs0ll_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll");
    static BFu0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll(Test_BFu0i_BFs0ll_BFu0ll, "BFu0i_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFs0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFs0c");
    static BFu0i_BFs0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFs0c(Test_BFu0i_BFs0ll_BFu0ll_BFs0c, "BFu0i_BFs0ll_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFs0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFs0i");
    static BFu0i_BFs0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFs0i(Test_BFu0i_BFs0ll_BFu0ll_BFs0i, "BFu0i_BFs0ll_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFs0ll");
    static BFu0i_BFs0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFs0ll(Test_BFu0i_BFs0ll_BFu0ll_BFs0ll, "BFu0i_BFs0ll_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFs0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFs0s");
    static BFu0i_BFs0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFs0s(Test_BFu0i_BFs0ll_BFu0ll_BFs0s, "BFu0i_BFs0ll_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFu0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFu0c");
    static BFu0i_BFs0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFu0c(Test_BFu0i_BFs0ll_BFu0ll_BFu0c, "BFu0i_BFs0ll_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFu0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFu0i");
    static BFu0i_BFs0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFu0i(Test_BFu0i_BFs0ll_BFu0ll_BFu0i, "BFu0i_BFs0ll_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFu0ll");
    static BFu0i_BFs0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFu0ll(Test_BFu0i_BFs0ll_BFu0ll_BFu0ll, "BFu0i_BFs0ll_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0ll_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0ll_BFu0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0ll_BFu0s");
    static BFu0i_BFs0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0ll_BFu0s(Test_BFu0i_BFs0ll_BFu0ll_BFu0s, "BFu0i_BFs0ll_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s) C1{ Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s");
    static BFu0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s(Test_BFu0i_BFs0ll_BFu0s, "BFu0i_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFs0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFs0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFs0c");
    static BFu0i_BFs0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFs0c(Test_BFu0i_BFs0ll_BFu0s_BFs0c, "BFu0i_BFs0ll_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFs0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFs0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFs0i");
    static BFu0i_BFs0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFs0i(Test_BFu0i_BFs0ll_BFu0s_BFs0i, "BFu0i_BFs0ll_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFs0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFs0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFs0ll");
    static BFu0i_BFs0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFs0ll(Test_BFu0i_BFs0ll_BFu0s_BFs0ll, "BFu0i_BFs0ll_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFs0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFs0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFs0s");
    static BFu0i_BFs0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFs0s(Test_BFu0i_BFs0ll_BFu0s_BFs0s, "BFu0i_BFs0ll_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFu0c  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFu0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFu0c");
    static BFu0i_BFs0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFu0c(Test_BFu0i_BFs0ll_BFu0s_BFu0c, "BFu0i_BFs0ll_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFu0i  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFu0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFu0i");
    static BFu0i_BFs0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFu0i(Test_BFu0i_BFs0ll_BFu0s_BFu0i, "BFu0i_BFs0ll_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFu0ll  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFu0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFu0ll");
    static BFu0i_BFs0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFu0ll(Test_BFu0i_BFs0ll_BFu0s_BFu0ll, "BFu0i_BFs0ll_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0ll_BFu0s_BFu0s  {
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0ll_BFu0s_BFu0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0ll_BFu0s_BFu0s");
    static BFu0i_BFs0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0ll_BFu0s_BFu0s(Test_BFu0i_BFs0ll_BFu0s_BFu0s, "BFu0i_BFs0ll_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s  {
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s) C1{ Fi:0 Fs:0}



static void Test_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s");
    static BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s(Test_BFu0i_BFs0s, "BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c) C1{ Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c");
    static BFu0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c(Test_BFu0i_BFs0s_BFs0c, "BFu0i_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFs0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFs0c");
    static BFu0i_BFs0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFs0c(Test_BFu0i_BFs0s_BFs0c_BFs0c, "BFu0i_BFs0s_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFs0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFs0i");
    static BFu0i_BFs0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFs0i(Test_BFu0i_BFs0s_BFs0c_BFs0i, "BFu0i_BFs0s_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFs0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFs0ll");
    static BFu0i_BFs0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFs0ll(Test_BFu0i_BFs0s_BFs0c_BFs0ll, "BFu0i_BFs0s_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFs0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFs0s");
    static BFu0i_BFs0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFs0s(Test_BFu0i_BFs0s_BFs0c_BFs0s, "BFu0i_BFs0s_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFu0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFu0c");
    static BFu0i_BFs0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFu0c(Test_BFu0i_BFs0s_BFs0c_BFu0c, "BFu0i_BFs0s_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFu0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFu0i");
    static BFu0i_BFs0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFu0i(Test_BFu0i_BFs0s_BFs0c_BFu0i, "BFu0i_BFs0s_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFu0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFu0ll");
    static BFu0i_BFs0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFu0ll(Test_BFu0i_BFs0s_BFs0c_BFu0ll, "BFu0i_BFs0s_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0c_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0c_BFu0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0c_BFu0s");
    static BFu0i_BFs0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0c_BFu0s(Test_BFu0i_BFs0s_BFs0c_BFu0s, "BFu0i_BFs0s_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i) C1{ Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i");
    static BFu0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i(Test_BFu0i_BFs0s_BFs0i, "BFu0i_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFs0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFs0c");
    static BFu0i_BFs0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFs0c(Test_BFu0i_BFs0s_BFs0i_BFs0c, "BFu0i_BFs0s_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFs0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFs0i");
    static BFu0i_BFs0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFs0i(Test_BFu0i_BFs0s_BFs0i_BFs0i, "BFu0i_BFs0s_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFs0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFs0ll");
    static BFu0i_BFs0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFs0ll(Test_BFu0i_BFs0s_BFs0i_BFs0ll, "BFu0i_BFs0s_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFs0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFs0s");
    static BFu0i_BFs0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFs0s(Test_BFu0i_BFs0s_BFs0i_BFs0s, "BFu0i_BFs0s_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFu0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFu0c");
    static BFu0i_BFs0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFu0c(Test_BFu0i_BFs0s_BFs0i_BFu0c, "BFu0i_BFs0s_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFu0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFu0i");
    static BFu0i_BFs0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFu0i(Test_BFu0i_BFs0s_BFs0i_BFu0i, "BFu0i_BFs0s_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFu0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFu0ll");
    static BFu0i_BFs0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFu0ll(Test_BFu0i_BFs0s_BFs0i_BFu0ll, "BFu0i_BFs0s_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0i_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0i_BFu0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0i_BFu0s");
    static BFu0i_BFs0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0i_BFu0s(Test_BFu0i_BFs0s_BFs0i_BFu0s, "BFu0i_BFs0s_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll) C1{ Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll");
    static BFu0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll(Test_BFu0i_BFs0s_BFs0ll, "BFu0i_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFs0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFs0c");
    static BFu0i_BFs0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFs0c(Test_BFu0i_BFs0s_BFs0ll_BFs0c, "BFu0i_BFs0s_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFs0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFs0i");
    static BFu0i_BFs0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFs0i(Test_BFu0i_BFs0s_BFs0ll_BFs0i, "BFu0i_BFs0s_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFs0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFs0ll");
    static BFu0i_BFs0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFs0ll(Test_BFu0i_BFs0s_BFs0ll_BFs0ll, "BFu0i_BFs0s_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFs0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFs0s");
    static BFu0i_BFs0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFs0s(Test_BFu0i_BFs0s_BFs0ll_BFs0s, "BFu0i_BFs0s_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFu0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFu0c");
    static BFu0i_BFs0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFu0c(Test_BFu0i_BFs0s_BFs0ll_BFu0c, "BFu0i_BFs0s_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFu0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFu0i");
    static BFu0i_BFs0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFu0i(Test_BFu0i_BFs0s_BFs0ll_BFu0i, "BFu0i_BFs0s_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFu0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFu0ll");
    static BFu0i_BFs0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFu0ll(Test_BFu0i_BFs0s_BFs0ll_BFu0ll, "BFu0i_BFs0s_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0ll_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0ll_BFu0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0ll_BFu0s");
    static BFu0i_BFs0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0ll_BFu0s(Test_BFu0i_BFs0s_BFs0ll_BFu0s, "BFu0i_BFs0s_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s");
    static BFu0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s(Test_BFu0i_BFs0s_BFs0s, "BFu0i_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFs0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFs0c");
    static BFu0i_BFs0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFs0c(Test_BFu0i_BFs0s_BFs0s_BFs0c, "BFu0i_BFs0s_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFs0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFs0i");
    static BFu0i_BFs0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFs0i(Test_BFu0i_BFs0s_BFs0s_BFs0i, "BFu0i_BFs0s_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFs0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFs0ll");
    static BFu0i_BFs0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFs0ll(Test_BFu0i_BFs0s_BFs0s_BFs0ll, "BFu0i_BFs0s_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFs0s");
    static BFu0i_BFs0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFs0s(Test_BFu0i_BFs0s_BFs0s_BFs0s, "BFu0i_BFs0s_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFu0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFu0c");
    static BFu0i_BFs0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFu0c(Test_BFu0i_BFs0s_BFs0s_BFu0c, "BFu0i_BFs0s_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFu0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFu0i");
    static BFu0i_BFs0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFu0i(Test_BFu0i_BFs0s_BFs0s_BFu0i, "BFu0i_BFs0s_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFu0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFu0ll");
    static BFu0i_BFs0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFu0ll(Test_BFu0i_BFs0s_BFs0s_BFu0ll, "BFu0i_BFs0s_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFs0s_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFs0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFs0s_BFu0s");
    static BFu0i_BFs0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFs0s_BFu0s(Test_BFu0i_BFs0s_BFs0s_BFu0s, "BFu0i_BFs0s_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c) C1{ Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c");
    static BFu0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c(Test_BFu0i_BFs0s_BFu0c, "BFu0i_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFs0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFs0c");
    static BFu0i_BFs0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFs0c(Test_BFu0i_BFs0s_BFu0c_BFs0c, "BFu0i_BFs0s_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFs0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFs0i");
    static BFu0i_BFs0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFs0i(Test_BFu0i_BFs0s_BFu0c_BFs0i, "BFu0i_BFs0s_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFs0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFs0ll");
    static BFu0i_BFs0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFs0ll(Test_BFu0i_BFs0s_BFu0c_BFs0ll, "BFu0i_BFs0s_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFs0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFs0s");
    static BFu0i_BFs0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFs0s(Test_BFu0i_BFs0s_BFu0c_BFs0s, "BFu0i_BFs0s_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFu0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFu0c");
    static BFu0i_BFs0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFu0c(Test_BFu0i_BFs0s_BFu0c_BFu0c, "BFu0i_BFs0s_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFu0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFu0i");
    static BFu0i_BFs0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFu0i(Test_BFu0i_BFs0s_BFu0c_BFu0i, "BFu0i_BFs0s_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFu0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFu0ll");
    static BFu0i_BFs0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFu0ll(Test_BFu0i_BFs0s_BFu0c_BFu0ll, "BFu0i_BFs0s_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0c_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0c_BFu0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0c_BFu0s");
    static BFu0i_BFs0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0c_BFu0s(Test_BFu0i_BFs0s_BFu0c_BFu0s, "BFu0i_BFs0s_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i) C1{ Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i");
    static BFu0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i(Test_BFu0i_BFs0s_BFu0i, "BFu0i_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFs0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFs0c");
    static BFu0i_BFs0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFs0c(Test_BFu0i_BFs0s_BFu0i_BFs0c, "BFu0i_BFs0s_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFs0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFs0i");
    static BFu0i_BFs0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFs0i(Test_BFu0i_BFs0s_BFu0i_BFs0i, "BFu0i_BFs0s_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFs0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFs0ll");
    static BFu0i_BFs0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFs0ll(Test_BFu0i_BFs0s_BFu0i_BFs0ll, "BFu0i_BFs0s_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFs0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFs0s");
    static BFu0i_BFs0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFs0s(Test_BFu0i_BFs0s_BFu0i_BFs0s, "BFu0i_BFs0s_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFu0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFu0c");
    static BFu0i_BFs0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFu0c(Test_BFu0i_BFs0s_BFu0i_BFu0c, "BFu0i_BFs0s_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFu0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFu0i");
    static BFu0i_BFs0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFu0i(Test_BFu0i_BFs0s_BFu0i_BFu0i, "BFu0i_BFs0s_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFu0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFu0ll");
    static BFu0i_BFs0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFu0ll(Test_BFu0i_BFs0s_BFu0i_BFu0ll, "BFu0i_BFs0s_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0i_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0i_BFu0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0i_BFu0s");
    static BFu0i_BFs0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0i_BFu0s(Test_BFu0i_BFs0s_BFu0i_BFu0s, "BFu0i_BFs0s_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll) C1{ Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll");
    static BFu0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll(Test_BFu0i_BFs0s_BFu0ll, "BFu0i_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFs0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFs0c");
    static BFu0i_BFs0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFs0c(Test_BFu0i_BFs0s_BFu0ll_BFs0c, "BFu0i_BFs0s_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFs0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFs0i");
    static BFu0i_BFs0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFs0i(Test_BFu0i_BFs0s_BFu0ll_BFs0i, "BFu0i_BFs0s_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFs0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFs0ll");
    static BFu0i_BFs0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFs0ll(Test_BFu0i_BFs0s_BFu0ll_BFs0ll, "BFu0i_BFs0s_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFs0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFs0s");
    static BFu0i_BFs0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFs0s(Test_BFu0i_BFs0s_BFu0ll_BFs0s, "BFu0i_BFs0s_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFu0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFu0c");
    static BFu0i_BFs0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFu0c(Test_BFu0i_BFs0s_BFu0ll_BFu0c, "BFu0i_BFs0s_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFu0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFu0i");
    static BFu0i_BFs0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFu0i(Test_BFu0i_BFs0s_BFu0ll_BFu0i, "BFu0i_BFs0s_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFu0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFu0ll");
    static BFu0i_BFs0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFu0ll(Test_BFu0i_BFs0s_BFu0ll_BFu0ll, "BFu0i_BFs0s_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0ll_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0ll_BFu0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0ll_BFu0s");
    static BFu0i_BFs0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0ll_BFu0s(Test_BFu0i_BFs0s_BFu0ll_BFu0s, "BFu0i_BFs0s_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s");
    static BFu0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s(Test_BFu0i_BFs0s_BFu0s, "BFu0i_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFs0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFs0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFs0c");
    static BFu0i_BFs0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFs0c(Test_BFu0i_BFs0s_BFu0s_BFs0c, "BFu0i_BFs0s_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFs0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFs0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFs0i");
    static BFu0i_BFs0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFs0i(Test_BFu0i_BFs0s_BFu0s_BFs0i, "BFu0i_BFs0s_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFs0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFs0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFs0ll");
    static BFu0i_BFs0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFs0ll(Test_BFu0i_BFs0s_BFu0s_BFs0ll, "BFu0i_BFs0s_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFs0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFs0s");
    static BFu0i_BFs0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFs0s(Test_BFu0i_BFs0s_BFu0s_BFs0s, "BFu0i_BFs0s_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFu0c  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFu0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFs0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFu0c");
    static BFu0i_BFs0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFu0c(Test_BFu0i_BFs0s_BFu0s_BFu0c, "BFu0i_BFs0s_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFu0i  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFu0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFs0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFu0i");
    static BFu0i_BFs0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFu0i(Test_BFu0i_BFs0s_BFu0s_BFu0i, "BFu0i_BFs0s_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFu0ll  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFu0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFs0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFu0ll");
    static BFu0i_BFs0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFu0ll(Test_BFu0i_BFs0s_BFu0s_BFu0ll, "BFu0i_BFs0s_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFs0s_BFu0s_BFu0s  {
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFs0s_BFu0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFs0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFs0s_BFu0s_BFu0s");
    static BFu0i_BFs0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFs0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFs0s_BFu0s_BFu0s(Test_BFu0i_BFs0s_BFu0s_BFu0s, "BFu0i_BFs0s_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c) C1{ Fi:0 Fc:0}



static void Test_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c");
    static BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c(Test_BFu0i_BFu0c, "BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c");
    static BFu0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c(Test_BFu0i_BFu0c_BFs0c, "BFu0i_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFs0c");
    static BFu0i_BFu0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFs0c(Test_BFu0i_BFu0c_BFs0c_BFs0c, "BFu0i_BFu0c_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFs0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFs0i");
    static BFu0i_BFu0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFs0i(Test_BFu0i_BFu0c_BFs0c_BFs0i, "BFu0i_BFu0c_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFs0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFs0ll");
    static BFu0i_BFu0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFs0ll(Test_BFu0i_BFu0c_BFs0c_BFs0ll, "BFu0i_BFu0c_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFs0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFs0s");
    static BFu0i_BFu0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFs0s(Test_BFu0i_BFu0c_BFs0c_BFs0s, "BFu0i_BFu0c_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFu0c");
    static BFu0i_BFu0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFu0c(Test_BFu0i_BFu0c_BFs0c_BFu0c, "BFu0i_BFu0c_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFu0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFu0i");
    static BFu0i_BFu0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFu0i(Test_BFu0i_BFu0c_BFs0c_BFu0i, "BFu0i_BFu0c_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFu0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFu0ll");
    static BFu0i_BFu0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFu0ll(Test_BFu0i_BFu0c_BFs0c_BFu0ll, "BFu0i_BFu0c_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0c_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0c_BFu0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0c_BFu0s");
    static BFu0i_BFu0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0c_BFu0s(Test_BFu0i_BFu0c_BFs0c_BFu0s, "BFu0i_BFu0c_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i) C1{ Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i");
    static BFu0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i(Test_BFu0i_BFu0c_BFs0i, "BFu0i_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFs0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFs0c");
    static BFu0i_BFu0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFs0c(Test_BFu0i_BFu0c_BFs0i_BFs0c, "BFu0i_BFu0c_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFs0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFs0i");
    static BFu0i_BFu0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFs0i(Test_BFu0i_BFu0c_BFs0i_BFs0i, "BFu0i_BFu0c_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFs0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFs0ll");
    static BFu0i_BFu0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFs0ll(Test_BFu0i_BFu0c_BFs0i_BFs0ll, "BFu0i_BFu0c_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFs0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFs0s");
    static BFu0i_BFu0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFs0s(Test_BFu0i_BFu0c_BFs0i_BFs0s, "BFu0i_BFu0c_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFu0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFu0c");
    static BFu0i_BFu0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFu0c(Test_BFu0i_BFu0c_BFs0i_BFu0c, "BFu0i_BFu0c_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFu0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFu0i");
    static BFu0i_BFu0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFu0i(Test_BFu0i_BFu0c_BFs0i_BFu0i, "BFu0i_BFu0c_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFu0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFu0ll");
    static BFu0i_BFu0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFu0ll(Test_BFu0i_BFu0c_BFs0i_BFu0ll, "BFu0i_BFu0c_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0i_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0i_BFu0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0i_BFu0s");
    static BFu0i_BFu0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0i_BFu0s(Test_BFu0i_BFu0c_BFs0i_BFu0s, "BFu0i_BFu0c_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll) C1{ Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll");
    static BFu0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll(Test_BFu0i_BFu0c_BFs0ll, "BFu0i_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFs0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFs0c");
    static BFu0i_BFu0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFs0c(Test_BFu0i_BFu0c_BFs0ll_BFs0c, "BFu0i_BFu0c_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFs0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFs0i");
    static BFu0i_BFu0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFs0i(Test_BFu0i_BFu0c_BFs0ll_BFs0i, "BFu0i_BFu0c_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFs0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFs0ll");
    static BFu0i_BFu0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFs0ll(Test_BFu0i_BFu0c_BFs0ll_BFs0ll, "BFu0i_BFu0c_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFs0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFs0s");
    static BFu0i_BFu0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFs0s(Test_BFu0i_BFu0c_BFs0ll_BFs0s, "BFu0i_BFu0c_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFu0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFu0c");
    static BFu0i_BFu0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFu0c(Test_BFu0i_BFu0c_BFs0ll_BFu0c, "BFu0i_BFu0c_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFu0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFu0i");
    static BFu0i_BFu0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFu0i(Test_BFu0i_BFu0c_BFs0ll_BFu0i, "BFu0i_BFu0c_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFu0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFu0ll");
    static BFu0i_BFu0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFu0ll(Test_BFu0i_BFu0c_BFs0ll_BFu0ll, "BFu0i_BFu0c_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0ll_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0ll_BFu0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0ll_BFu0s");
    static BFu0i_BFu0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0ll_BFu0s(Test_BFu0i_BFu0c_BFs0ll_BFu0s, "BFu0i_BFu0c_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s) C1{ Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s");
    static BFu0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s(Test_BFu0i_BFu0c_BFs0s, "BFu0i_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFs0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFs0c");
    static BFu0i_BFu0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFs0c(Test_BFu0i_BFu0c_BFs0s_BFs0c, "BFu0i_BFu0c_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFs0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFs0i");
    static BFu0i_BFu0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFs0i(Test_BFu0i_BFu0c_BFs0s_BFs0i, "BFu0i_BFu0c_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFs0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFs0ll");
    static BFu0i_BFu0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFs0ll(Test_BFu0i_BFu0c_BFs0s_BFs0ll, "BFu0i_BFu0c_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFs0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFs0s");
    static BFu0i_BFu0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFs0s(Test_BFu0i_BFu0c_BFs0s_BFs0s, "BFu0i_BFu0c_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFu0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0c_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFu0c");
    static BFu0i_BFu0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFu0c(Test_BFu0i_BFu0c_BFs0s_BFu0c, "BFu0i_BFu0c_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFu0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0c_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFu0i");
    static BFu0i_BFu0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFu0i(Test_BFu0i_BFu0c_BFs0s_BFu0i, "BFu0i_BFu0c_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFu0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0c_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFu0ll");
    static BFu0i_BFu0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFu0ll(Test_BFu0i_BFu0c_BFs0s_BFu0ll, "BFu0i_BFu0c_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFs0s_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFs0s_BFu0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0c_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFs0s_BFu0s");
    static BFu0i_BFu0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFs0s_BFu0s(Test_BFu0i_BFu0c_BFs0s_BFu0s, "BFu0i_BFu0c_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c");
    static BFu0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c(Test_BFu0i_BFu0c_BFu0c, "BFu0i_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFs0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFs0c");
    static BFu0i_BFu0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFs0c(Test_BFu0i_BFu0c_BFu0c_BFs0c, "BFu0i_BFu0c_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFs0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFs0i");
    static BFu0i_BFu0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFs0i(Test_BFu0i_BFu0c_BFu0c_BFs0i, "BFu0i_BFu0c_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFs0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFs0ll");
    static BFu0i_BFu0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFs0ll(Test_BFu0i_BFu0c_BFu0c_BFs0ll, "BFu0i_BFu0c_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFs0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFs0s");
    static BFu0i_BFu0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFs0s(Test_BFu0i_BFu0c_BFu0c_BFs0s, "BFu0i_BFu0c_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFu0c) C1{ Fi:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFu0c");
    static BFu0i_BFu0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFu0c(Test_BFu0i_BFu0c_BFu0c_BFu0c, "BFu0i_BFu0c_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFu0i) C1{ Fi:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFu0i");
    static BFu0i_BFu0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFu0i(Test_BFu0i_BFu0c_BFu0c_BFu0i, "BFu0i_BFu0c_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFu0ll) C1{ Fi:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFu0ll");
    static BFu0i_BFu0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFu0ll(Test_BFu0i_BFu0c_BFu0c_BFu0ll, "BFu0i_BFu0c_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0c_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0c_BFu0s) C1{ Fi:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0c_BFu0s");
    static BFu0i_BFu0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0c_BFu0s(Test_BFu0i_BFu0c_BFu0c_BFu0s, "BFu0i_BFu0c_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i) C1{ Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i");
    static BFu0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i(Test_BFu0i_BFu0c_BFu0i, "BFu0i_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFs0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFs0c");
    static BFu0i_BFu0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFs0c(Test_BFu0i_BFu0c_BFu0i_BFs0c, "BFu0i_BFu0c_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFs0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFs0i");
    static BFu0i_BFu0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFs0i(Test_BFu0i_BFu0c_BFu0i_BFs0i, "BFu0i_BFu0c_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFs0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFs0ll");
    static BFu0i_BFu0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFs0ll(Test_BFu0i_BFu0c_BFu0i_BFs0ll, "BFu0i_BFu0c_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFs0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFs0s");
    static BFu0i_BFu0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFs0s(Test_BFu0i_BFu0c_BFu0i_BFs0s, "BFu0i_BFu0c_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFu0c) C1{ Fi:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFu0c");
    static BFu0i_BFu0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFu0c(Test_BFu0i_BFu0c_BFu0i_BFu0c, "BFu0i_BFu0c_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFu0i) C1{ Fi:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFu0i");
    static BFu0i_BFu0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFu0i(Test_BFu0i_BFu0c_BFu0i_BFu0i, "BFu0i_BFu0c_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFu0ll) C1{ Fi:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFu0ll");
    static BFu0i_BFu0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFu0ll(Test_BFu0i_BFu0c_BFu0i_BFu0ll, "BFu0i_BFu0c_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0i_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0i_BFu0s) C1{ Fi:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0i_BFu0s");
    static BFu0i_BFu0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0i_BFu0s(Test_BFu0i_BFu0c_BFu0i_BFu0s, "BFu0i_BFu0c_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll) C1{ Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll");
    static BFu0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll(Test_BFu0i_BFu0c_BFu0ll, "BFu0i_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFs0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFs0c");
    static BFu0i_BFu0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFs0c(Test_BFu0i_BFu0c_BFu0ll_BFs0c, "BFu0i_BFu0c_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFs0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFs0i");
    static BFu0i_BFu0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFs0i(Test_BFu0i_BFu0c_BFu0ll_BFs0i, "BFu0i_BFu0c_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFs0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFs0ll");
    static BFu0i_BFu0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFs0ll(Test_BFu0i_BFu0c_BFu0ll_BFs0ll, "BFu0i_BFu0c_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFs0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFs0s");
    static BFu0i_BFu0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFs0s(Test_BFu0i_BFu0c_BFu0ll_BFs0s, "BFu0i_BFu0c_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFu0c) C1{ Fi:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFu0c");
    static BFu0i_BFu0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFu0c(Test_BFu0i_BFu0c_BFu0ll_BFu0c, "BFu0i_BFu0c_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFu0i) C1{ Fi:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFu0i");
    static BFu0i_BFu0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFu0i(Test_BFu0i_BFu0c_BFu0ll_BFu0i, "BFu0i_BFu0c_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFu0ll) C1{ Fi:0 Fc:0 FL:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFu0ll");
    static BFu0i_BFu0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFu0ll(Test_BFu0i_BFu0c_BFu0ll_BFu0ll, "BFu0i_BFu0c_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0ll_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0ll_BFu0s) C1{ Fi:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0ll_BFu0s");
    static BFu0i_BFu0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0ll_BFu0s(Test_BFu0i_BFu0c_BFu0ll_BFu0s, "BFu0i_BFu0c_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s) C1{ Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s");
    static BFu0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s(Test_BFu0i_BFu0c_BFu0s, "BFu0i_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFs0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFs0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFs0c");
    static BFu0i_BFu0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFs0c(Test_BFu0i_BFu0c_BFu0s_BFs0c, "BFu0i_BFu0c_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFs0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFs0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFs0i");
    static BFu0i_BFu0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFs0i(Test_BFu0i_BFu0c_BFu0s_BFs0i, "BFu0i_BFu0c_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFs0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFs0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFs0ll");
    static BFu0i_BFu0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFs0ll(Test_BFu0i_BFu0c_BFu0s_BFs0ll, "BFu0i_BFu0c_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFs0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFs0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFs0s");
    static BFu0i_BFu0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFs0s(Test_BFu0i_BFu0c_BFu0s_BFs0s, "BFu0i_BFu0c_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFu0c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFu0c) C1{ Fi:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFu0c");
    static BFu0i_BFu0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFu0c(Test_BFu0i_BFu0c_BFu0s_BFu0c, "BFu0i_BFu0c_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFu0i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFu0i) C1{ Fi:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFu0i");
    static BFu0i_BFu0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFu0i(Test_BFu0i_BFu0c_BFu0s_BFu0i, "BFu0i_BFu0c_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFu0ll  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFu0ll) C1{ Fi:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFu0ll");
    static BFu0i_BFu0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFu0ll(Test_BFu0i_BFu0c_BFu0s_BFu0ll, "BFu0i_BFu0c_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu0s_BFu0s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0c_BFu0s_BFu0s) C1{ Fi:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu0s_BFu0s");
    static BFu0i_BFu0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu0s_BFu0s(Test_BFu0i_BFu0c_BFu0s_BFu0s, "BFu0i_BFu0c_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu15i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0i_BFu0c_BFu15i) C1{ Fi:0 Fc:0 Fi:15}



static void Test_BFu0i_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu15i");
    static BFu0i_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu15i(Test_BFu0i_BFu0c_BFu15i, "BFu0i_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu15ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0i_BFu0c_BFu15ll) C1{ Fi:0 Fc:0 FL:15}



static void Test_BFu0i_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu15ll");
    static BFu0i_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu15ll(Test_BFu0i_BFu0c_BFu15ll, "BFu0i_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu15s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0i_BFu0c_BFu15s) C1{ Fi:0 Fc:0 Fs:15}



static void Test_BFu0i_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu15s");
    static BFu0i_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu15s(Test_BFu0i_BFu0c_BFu15s, "BFu0i_BFu0c_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu16i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0i_BFu0c_BFu16i) C1{ Fi:0 Fc:0 Fi:16}



static void Test_BFu0i_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu16i");
    static BFu0i_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu16i(Test_BFu0i_BFu0c_BFu16i, "BFu0i_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu16ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0i_BFu0c_BFu16ll) C1{ Fi:0 Fc:0 FL:16}



static void Test_BFu0i_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu16ll");
    static BFu0i_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu16ll(Test_BFu0i_BFu0c_BFu16ll, "BFu0i_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu16s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0i_BFu0c_BFu16s) C1{ Fi:0 Fc:0 Fs:16}



static void Test_BFu0i_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu16s");
    static BFu0i_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu16s(Test_BFu0i_BFu0c_BFu16s, "BFu0i_BFu0c_BFu16s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu17i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0i_BFu0c_BFu17i) C1{ Fi:0 Fc:0 Fi:17}



static void Test_BFu0i_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu17i");
    static BFu0i_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu17i(Test_BFu0i_BFu0c_BFu17i, "BFu0i_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu17ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0i_BFu0c_BFu17ll) C1{ Fi:0 Fc:0 FL:17}



static void Test_BFu0i_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu17ll");
    static BFu0i_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu17ll(Test_BFu0i_BFu0c_BFu17ll, "BFu0i_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu1c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0i_BFu0c_BFu1c) C1{ Fi:0 Fc:0 Fc:1}



static void Test_BFu0i_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu1c");
    static BFu0i_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu1c(Test_BFu0i_BFu0c_BFu1c, "BFu0i_BFu0c_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu1i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0i_BFu0c_BFu1i) C1{ Fi:0 Fc:0 Fi:1}



static void Test_BFu0i_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu1i");
    static BFu0i_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu1i(Test_BFu0i_BFu0c_BFu1i, "BFu0i_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu1ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0i_BFu0c_BFu1ll) C1{ Fi:0 Fc:0 FL:1}



static void Test_BFu0i_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu1ll");
    static BFu0i_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu1ll(Test_BFu0i_BFu0c_BFu1ll, "BFu0i_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu1s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0i_BFu0c_BFu1s) C1{ Fi:0 Fc:0 Fs:1}



static void Test_BFu0i_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu1s");
    static BFu0i_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu1s(Test_BFu0i_BFu0c_BFu1s, "BFu0i_BFu0c_BFu1s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu31i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0i_BFu0c_BFu31i) C1{ Fi:0 Fc:0 Fi:31}



static void Test_BFu0i_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu31i");
    static BFu0i_BFu0c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu31i(Test_BFu0i_BFu0c_BFu31i, "BFu0i_BFu0c_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu31ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0i_BFu0c_BFu31ll) C1{ Fi:0 Fc:0 FL:31}



static void Test_BFu0i_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu31ll");
    static BFu0i_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu31ll(Test_BFu0i_BFu0c_BFu31ll, "BFu0i_BFu0c_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu32i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0i_BFu0c_BFu32i) C1{ Fi:0 Fc:0 Fi:32}



static void Test_BFu0i_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu32i");
    static BFu0i_BFu0c_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu32i(Test_BFu0i_BFu0c_BFu32i, "BFu0i_BFu0c_BFu32i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu32ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0i_BFu0c_BFu32ll) C1{ Fi:0 Fc:0 FL:32}



static void Test_BFu0i_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu32ll");
    static BFu0i_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu32ll(Test_BFu0i_BFu0c_BFu32ll, "BFu0i_BFu0c_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu33  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0i_BFu0c_BFu33) C1{ Fi:0 Fc:0 FL:33}



static void Test_BFu0i_BFu0c_BFu33()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu33");
    static BFu0i_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0i_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu33(Test_BFu0i_BFu0c_BFu33, "BFu0i_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu7c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0i_BFu0c_BFu7c) C1{ Fi:0 Fc:0 Fc:7}



static void Test_BFu0i_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu7c");
    static BFu0i_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu7c(Test_BFu0i_BFu0c_BFu7c, "BFu0i_BFu0c_BFu7c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu7i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0i_BFu0c_BFu7i) C1{ Fi:0 Fc:0 Fi:7}



static void Test_BFu0i_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu7i");
    static BFu0i_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu7i(Test_BFu0i_BFu0c_BFu7i, "BFu0i_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu7ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0i_BFu0c_BFu7ll) C1{ Fi:0 Fc:0 FL:7}



static void Test_BFu0i_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu7ll");
    static BFu0i_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu7ll(Test_BFu0i_BFu0c_BFu7ll, "BFu0i_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu7s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0i_BFu0c_BFu7s) C1{ Fi:0 Fc:0 Fs:7}



static void Test_BFu0i_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu7s");
    static BFu0i_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu7s(Test_BFu0i_BFu0c_BFu7s, "BFu0i_BFu0c_BFu7s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu8c  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0i_BFu0c_BFu8c) C1{ Fi:0 Fc:0 Fc:8}



static void Test_BFu0i_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu8c");
    static BFu0i_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu8c(Test_BFu0i_BFu0c_BFu8c, "BFu0i_BFu0c_BFu8c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu8i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0i_BFu0c_BFu8i) C1{ Fi:0 Fc:0 Fi:8}



static void Test_BFu0i_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu8i");
    static BFu0i_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu8i(Test_BFu0i_BFu0c_BFu8i, "BFu0i_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu8ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0i_BFu0c_BFu8ll) C1{ Fi:0 Fc:0 FL:8}



static void Test_BFu0i_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu8ll");
    static BFu0i_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu8ll(Test_BFu0i_BFu0c_BFu8ll, "BFu0i_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu8s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0i_BFu0c_BFu8s) C1{ Fi:0 Fc:0 Fs:8}



static void Test_BFu0i_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu8s");
    static BFu0i_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu8s(Test_BFu0i_BFu0c_BFu8s, "BFu0i_BFu0c_BFu8s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu9i  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0i_BFu0c_BFu9i) C1{ Fi:0 Fc:0 Fi:9}



static void Test_BFu0i_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu9i");
    static BFu0i_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu9i(Test_BFu0i_BFu0c_BFu9i, "BFu0i_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu9ll  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0i_BFu0c_BFu9ll) C1{ Fi:0 Fc:0 FL:9}



static void Test_BFu0i_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu9ll");
    static BFu0i_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu9ll(Test_BFu0i_BFu0c_BFu9ll, "BFu0i_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_BFu9s  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0i_BFu0c_BFu9s) C1{ Fi:0 Fc:0 Fs:9}



static void Test_BFu0i_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu0c_BFu9s");
    static BFu0i_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_BFu9s(Test_BFu0i_BFu0c_BFu9s, "BFu0i_BFu0c_BFu9s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_C  {
  unsigned int  :0;
  unsigned char  :0;
  char v1;
};
//SIG(1 BFu0i_BFu0c_C) C1{ Fi:0 Fc:0 Fc}



static void Test_BFu0i_BFu0c_C()
{
  {
    init_simple_test("BFu0i_BFu0c_C");
    static BFu0i_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_C)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_C(Test_BFu0i_BFu0c_C, "BFu0i_BFu0c_C", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_D  {
  unsigned int  :0;
  unsigned char  :0;
  double v1;
};
//SIG(1 BFu0i_BFu0c_D) C1{ Fi:0 Fc:0 FL}



static void Test_BFu0i_BFu0c_D()
{
  {
    init_simple_test("BFu0i_BFu0c_D");
    static BFu0i_BFu0c_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_D)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_D(Test_BFu0i_BFu0c_D, "BFu0i_BFu0c_D", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_F  {
  unsigned int  :0;
  unsigned char  :0;
  float v1;
};
//SIG(1 BFu0i_BFu0c_F) C1{ Fi:0 Fc:0 Fi}



static void Test_BFu0i_BFu0c_F()
{
  {
    init_simple_test("BFu0i_BFu0c_F");
    static BFu0i_BFu0c_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_F)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_F(Test_BFu0i_BFu0c_F, "BFu0i_BFu0c_F", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_I  {
  unsigned int  :0;
  unsigned char  :0;
  int v1;
};
//SIG(1 BFu0i_BFu0c_I) C1{ Fi:0 Fc:0 Fi}



static void Test_BFu0i_BFu0c_I()
{
  {
    init_simple_test("BFu0i_BFu0c_I");
    static BFu0i_BFu0c_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_I)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_I(Test_BFu0i_BFu0c_I, "BFu0i_BFu0c_I", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Ip  {
  unsigned int  :0;
  unsigned char  :0;
  int *v1;
};
//SIG(1 BFu0i_BFu0c_Ip) C1{ Fi:0 Fc:0 Fp}



static void Test_BFu0i_BFu0c_Ip()
{
  {
    init_simple_test("BFu0i_BFu0c_Ip");
    static BFu0i_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Ip(Test_BFu0i_BFu0c_Ip, "BFu0i_BFu0c_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_L  {
  unsigned int  :0;
  unsigned char  :0;
  __tsi64 v1;
};
//SIG(1 BFu0i_BFu0c_L) C1{ Fi:0 Fc:0 FL}



static void Test_BFu0i_BFu0c_L()
{
  {
    init_simple_test("BFu0i_BFu0c_L");
    static BFu0i_BFu0c_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_L)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_L(Test_BFu0i_BFu0c_L, "BFu0i_BFu0c_L", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_S  {
  unsigned int  :0;
  unsigned char  :0;
  short v1;
};
//SIG(1 BFu0i_BFu0c_S) C1{ Fi:0 Fc:0 Fs}



static void Test_BFu0i_BFu0c_S()
{
  {
    init_simple_test("BFu0i_BFu0c_S");
    static BFu0i_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_S)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_S(Test_BFu0i_BFu0c_S, "BFu0i_BFu0c_S", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Uc  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned char v1;
};
//SIG(1 BFu0i_BFu0c_Uc) C1{ Fi:0 Fc:0 Fc}



static void Test_BFu0i_BFu0c_Uc()
{
  {
    init_simple_test("BFu0i_BFu0c_Uc");
    static BFu0i_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Uc(Test_BFu0i_BFu0c_Uc, "BFu0i_BFu0c_Uc", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Ui  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned int v1;
};
//SIG(1 BFu0i_BFu0c_Ui) C1{ Fi:0 Fc:0 Fi}



static void Test_BFu0i_BFu0c_Ui()
{
  {
    init_simple_test("BFu0i_BFu0c_Ui");
    static BFu0i_BFu0c_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Ui(Test_BFu0i_BFu0c_Ui, "BFu0i_BFu0c_Ui", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Ul  {
  unsigned int  :0;
  unsigned char  :0;
  __tsu64 v1;
};
//SIG(1 BFu0i_BFu0c_Ul) C1{ Fi:0 Fc:0 FL}



static void Test_BFu0i_BFu0c_Ul()
{
  {
    init_simple_test("BFu0i_BFu0c_Ul");
    static BFu0i_BFu0c_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Ul(Test_BFu0i_BFu0c_Ul, "BFu0i_BFu0c_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Us  {
  unsigned int  :0;
  unsigned char  :0;
  unsigned short v1;
};
//SIG(1 BFu0i_BFu0c_Us) C1{ Fi:0 Fc:0 Fs}



static void Test_BFu0i_BFu0c_Us()
{
  {
    init_simple_test("BFu0i_BFu0c_Us");
    static BFu0i_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Us(Test_BFu0i_BFu0c_Us, "BFu0i_BFu0c_Us", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0c_Vp  {
  unsigned int  :0;
  unsigned char  :0;
  void *v1;
};
//SIG(1 BFu0i_BFu0c_Vp) C1{ Fi:0 Fc:0 Fp}



static void Test_BFu0i_BFu0c_Vp()
{
  {
    init_simple_test("BFu0i_BFu0c_Vp");
    static BFu0i_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0c_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0c_Vp(Test_BFu0i_BFu0c_Vp, "BFu0i_BFu0c_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i) C1{ Fi:0 Fi:0}



static void Test_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i");
    static BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i(Test_BFu0i_BFu0i, "BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c) C1{ Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c");
    static BFu0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c(Test_BFu0i_BFu0i_BFs0c, "BFu0i_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFs0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFs0c");
    static BFu0i_BFu0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFs0c(Test_BFu0i_BFu0i_BFs0c_BFs0c, "BFu0i_BFu0i_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFs0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFs0i");
    static BFu0i_BFu0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFs0i(Test_BFu0i_BFu0i_BFs0c_BFs0i, "BFu0i_BFu0i_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFs0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFs0ll");
    static BFu0i_BFu0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFs0ll(Test_BFu0i_BFu0i_BFs0c_BFs0ll, "BFu0i_BFu0i_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFs0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFs0s");
    static BFu0i_BFu0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFs0s(Test_BFu0i_BFu0i_BFs0c_BFs0s, "BFu0i_BFu0i_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFu0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFu0c");
    static BFu0i_BFu0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFu0c(Test_BFu0i_BFu0i_BFs0c_BFu0c, "BFu0i_BFu0i_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFu0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFu0i");
    static BFu0i_BFu0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFu0i(Test_BFu0i_BFu0i_BFs0c_BFu0i, "BFu0i_BFu0i_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFu0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFu0ll");
    static BFu0i_BFu0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFu0ll(Test_BFu0i_BFu0i_BFs0c_BFu0ll, "BFu0i_BFu0i_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0c_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0c_BFu0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0c_BFu0s");
    static BFu0i_BFu0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0c_BFu0s(Test_BFu0i_BFu0i_BFs0c_BFu0s, "BFu0i_BFu0i_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i");
    static BFu0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i(Test_BFu0i_BFu0i_BFs0i, "BFu0i_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFs0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFs0c");
    static BFu0i_BFu0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFs0c(Test_BFu0i_BFu0i_BFs0i_BFs0c, "BFu0i_BFu0i_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFs0i");
    static BFu0i_BFu0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFs0i(Test_BFu0i_BFu0i_BFs0i_BFs0i, "BFu0i_BFu0i_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFs0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFs0ll");
    static BFu0i_BFu0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFs0ll(Test_BFu0i_BFu0i_BFs0i_BFs0ll, "BFu0i_BFu0i_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFs0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFs0s");
    static BFu0i_BFu0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFs0s(Test_BFu0i_BFu0i_BFs0i_BFs0s, "BFu0i_BFu0i_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFu0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFu0c");
    static BFu0i_BFu0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFu0c(Test_BFu0i_BFu0i_BFs0i_BFu0c, "BFu0i_BFu0i_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFu0i");
    static BFu0i_BFu0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFu0i(Test_BFu0i_BFu0i_BFs0i_BFu0i, "BFu0i_BFu0i_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFu0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFu0ll");
    static BFu0i_BFu0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFu0ll(Test_BFu0i_BFu0i_BFs0i_BFu0ll, "BFu0i_BFu0i_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0i_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0i_BFu0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0i_BFu0s");
    static BFu0i_BFu0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0i_BFu0s(Test_BFu0i_BFu0i_BFs0i_BFu0s, "BFu0i_BFu0i_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll) C1{ Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll");
    static BFu0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll(Test_BFu0i_BFu0i_BFs0ll, "BFu0i_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFs0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFs0c");
    static BFu0i_BFu0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFs0c(Test_BFu0i_BFu0i_BFs0ll_BFs0c, "BFu0i_BFu0i_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFs0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFs0i");
    static BFu0i_BFu0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFs0i(Test_BFu0i_BFu0i_BFs0ll_BFs0i, "BFu0i_BFu0i_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFs0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFs0ll");
    static BFu0i_BFu0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFs0ll(Test_BFu0i_BFu0i_BFs0ll_BFs0ll, "BFu0i_BFu0i_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFs0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFs0s");
    static BFu0i_BFu0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFs0s(Test_BFu0i_BFu0i_BFs0ll_BFs0s, "BFu0i_BFu0i_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFu0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFu0c");
    static BFu0i_BFu0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFu0c(Test_BFu0i_BFu0i_BFs0ll_BFu0c, "BFu0i_BFu0i_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFu0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFu0i");
    static BFu0i_BFu0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFu0i(Test_BFu0i_BFu0i_BFs0ll_BFu0i, "BFu0i_BFu0i_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFu0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFu0ll");
    static BFu0i_BFu0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFu0ll(Test_BFu0i_BFu0i_BFs0ll_BFu0ll, "BFu0i_BFu0i_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0ll_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0ll_BFu0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0ll_BFu0s");
    static BFu0i_BFu0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0ll_BFu0s(Test_BFu0i_BFu0i_BFs0ll_BFu0s, "BFu0i_BFu0i_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s) C1{ Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s");
    static BFu0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s(Test_BFu0i_BFu0i_BFs0s, "BFu0i_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFs0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFs0c");
    static BFu0i_BFu0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFs0c(Test_BFu0i_BFu0i_BFs0s_BFs0c, "BFu0i_BFu0i_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFs0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFs0i");
    static BFu0i_BFu0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFs0i(Test_BFu0i_BFu0i_BFs0s_BFs0i, "BFu0i_BFu0i_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFs0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFs0ll");
    static BFu0i_BFu0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFs0ll(Test_BFu0i_BFu0i_BFs0s_BFs0ll, "BFu0i_BFu0i_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFs0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFs0s");
    static BFu0i_BFu0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFs0s(Test_BFu0i_BFu0i_BFs0s_BFs0s, "BFu0i_BFu0i_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFu0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0i_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFu0c");
    static BFu0i_BFu0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFu0c(Test_BFu0i_BFu0i_BFs0s_BFu0c, "BFu0i_BFu0i_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFu0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0i_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFu0i");
    static BFu0i_BFu0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFu0i(Test_BFu0i_BFu0i_BFs0s_BFu0i, "BFu0i_BFu0i_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFu0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0i_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFu0ll");
    static BFu0i_BFu0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFu0ll(Test_BFu0i_BFu0i_BFs0s_BFu0ll, "BFu0i_BFu0i_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFs0s_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFs0s_BFu0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0i_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFs0s_BFu0s");
    static BFu0i_BFu0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFs0s_BFu0s(Test_BFu0i_BFu0i_BFs0s_BFu0s, "BFu0i_BFu0i_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c) C1{ Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c");
    static BFu0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c(Test_BFu0i_BFu0i_BFu0c, "BFu0i_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFs0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFs0c");
    static BFu0i_BFu0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFs0c(Test_BFu0i_BFu0i_BFu0c_BFs0c, "BFu0i_BFu0i_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFs0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFs0i");
    static BFu0i_BFu0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFs0i(Test_BFu0i_BFu0i_BFu0c_BFs0i, "BFu0i_BFu0i_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFs0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFs0ll");
    static BFu0i_BFu0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFs0ll(Test_BFu0i_BFu0i_BFu0c_BFs0ll, "BFu0i_BFu0i_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFs0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFs0s");
    static BFu0i_BFu0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFs0s(Test_BFu0i_BFu0i_BFu0c_BFs0s, "BFu0i_BFu0i_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFu0c) C1{ Fi:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFu0c");
    static BFu0i_BFu0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFu0c(Test_BFu0i_BFu0i_BFu0c_BFu0c, "BFu0i_BFu0i_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFu0i) C1{ Fi:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFu0i");
    static BFu0i_BFu0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFu0i(Test_BFu0i_BFu0i_BFu0c_BFu0i, "BFu0i_BFu0i_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFu0ll) C1{ Fi:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFu0ll");
    static BFu0i_BFu0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFu0ll(Test_BFu0i_BFu0i_BFu0c_BFu0ll, "BFu0i_BFu0i_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0c_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0c_BFu0s) C1{ Fi:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0c_BFu0s");
    static BFu0i_BFu0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0c_BFu0s(Test_BFu0i_BFu0i_BFu0c_BFu0s, "BFu0i_BFu0i_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i");
    static BFu0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i(Test_BFu0i_BFu0i_BFu0i, "BFu0i_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFs0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFs0c");
    static BFu0i_BFu0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFs0c(Test_BFu0i_BFu0i_BFu0i_BFs0c, "BFu0i_BFu0i_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFs0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFs0i");
    static BFu0i_BFu0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFs0i(Test_BFu0i_BFu0i_BFu0i_BFs0i, "BFu0i_BFu0i_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFs0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFs0ll");
    static BFu0i_BFu0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFs0ll(Test_BFu0i_BFu0i_BFu0i_BFs0ll, "BFu0i_BFu0i_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFs0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFs0s");
    static BFu0i_BFu0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFs0s(Test_BFu0i_BFu0i_BFu0i_BFs0s, "BFu0i_BFu0i_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFu0c) C1{ Fi:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFu0c");
    static BFu0i_BFu0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFu0c(Test_BFu0i_BFu0i_BFu0i_BFu0c, "BFu0i_BFu0i_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFu0i) C1{ Fi:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFu0i");
    static BFu0i_BFu0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFu0i(Test_BFu0i_BFu0i_BFu0i_BFu0i, "BFu0i_BFu0i_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFu0ll) C1{ Fi:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFu0ll");
    static BFu0i_BFu0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFu0ll(Test_BFu0i_BFu0i_BFu0i_BFu0ll, "BFu0i_BFu0i_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0i_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0i_BFu0s) C1{ Fi:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0i_BFu0s");
    static BFu0i_BFu0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0i_BFu0s(Test_BFu0i_BFu0i_BFu0i_BFu0s, "BFu0i_BFu0i_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll) C1{ Fi:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll");
    static BFu0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll(Test_BFu0i_BFu0i_BFu0ll, "BFu0i_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFs0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFs0c");
    static BFu0i_BFu0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFs0c(Test_BFu0i_BFu0i_BFu0ll_BFs0c, "BFu0i_BFu0i_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFs0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFs0i");
    static BFu0i_BFu0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFs0i(Test_BFu0i_BFu0i_BFu0ll_BFs0i, "BFu0i_BFu0i_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFs0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFs0ll");
    static BFu0i_BFu0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFs0ll(Test_BFu0i_BFu0i_BFu0ll_BFs0ll, "BFu0i_BFu0i_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFs0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFs0s");
    static BFu0i_BFu0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFs0s(Test_BFu0i_BFu0i_BFu0ll_BFs0s, "BFu0i_BFu0i_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFu0c) C1{ Fi:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFu0c");
    static BFu0i_BFu0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFu0c(Test_BFu0i_BFu0i_BFu0ll_BFu0c, "BFu0i_BFu0i_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFu0i) C1{ Fi:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFu0i");
    static BFu0i_BFu0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFu0i(Test_BFu0i_BFu0i_BFu0ll_BFu0i, "BFu0i_BFu0i_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFu0ll) C1{ Fi:0 Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFu0ll");
    static BFu0i_BFu0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFu0ll(Test_BFu0i_BFu0i_BFu0ll_BFu0ll, "BFu0i_BFu0i_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0ll_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0ll_BFu0s) C1{ Fi:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0ll_BFu0s");
    static BFu0i_BFu0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0ll_BFu0s(Test_BFu0i_BFu0i_BFu0ll_BFu0s, "BFu0i_BFu0i_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s) C1{ Fi:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s");
    static BFu0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s(Test_BFu0i_BFu0i_BFu0s, "BFu0i_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFs0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFs0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFs0c");
    static BFu0i_BFu0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFs0c(Test_BFu0i_BFu0i_BFu0s_BFs0c, "BFu0i_BFu0i_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFs0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFs0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFs0i");
    static BFu0i_BFu0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFs0i(Test_BFu0i_BFu0i_BFu0s_BFs0i, "BFu0i_BFu0i_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFs0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFs0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFs0ll");
    static BFu0i_BFu0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFs0ll(Test_BFu0i_BFu0i_BFu0s_BFs0ll, "BFu0i_BFu0i_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFs0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFs0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFs0s");
    static BFu0i_BFu0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFs0s(Test_BFu0i_BFu0i_BFu0s_BFs0s, "BFu0i_BFu0i_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFu0c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFu0c) C1{ Fi:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFu0c");
    static BFu0i_BFu0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFu0c(Test_BFu0i_BFu0i_BFu0s_BFu0c, "BFu0i_BFu0i_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFu0i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFu0i) C1{ Fi:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFu0i");
    static BFu0i_BFu0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFu0i(Test_BFu0i_BFu0i_BFu0s_BFu0i, "BFu0i_BFu0i_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFu0ll  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFu0ll) C1{ Fi:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFu0ll");
    static BFu0i_BFu0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFu0ll(Test_BFu0i_BFu0i_BFu0s_BFu0ll, "BFu0i_BFu0i_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu0s_BFu0s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0i_BFu0s_BFu0s) C1{ Fi:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu0s_BFu0s");
    static BFu0i_BFu0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu0s_BFu0s(Test_BFu0i_BFu0i_BFu0s_BFu0s, "BFu0i_BFu0i_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu15i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0i_BFu0i_BFu15i) C1{ Fi:0 Fi:0 Fi:15}



static void Test_BFu0i_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu15i");
    static BFu0i_BFu0i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu15i(Test_BFu0i_BFu0i_BFu15i, "BFu0i_BFu0i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu15ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0i_BFu0i_BFu15ll) C1{ Fi:0 Fi:0 FL:15}



static void Test_BFu0i_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu15ll");
    static BFu0i_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu15ll(Test_BFu0i_BFu0i_BFu15ll, "BFu0i_BFu0i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu15s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0i_BFu0i_BFu15s) C1{ Fi:0 Fi:0 Fs:15}



static void Test_BFu0i_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu15s");
    static BFu0i_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu15s(Test_BFu0i_BFu0i_BFu15s, "BFu0i_BFu0i_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu16i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0i_BFu0i_BFu16i) C1{ Fi:0 Fi:0 Fi:16}



static void Test_BFu0i_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu16i");
    static BFu0i_BFu0i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu16i(Test_BFu0i_BFu0i_BFu16i, "BFu0i_BFu0i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu16ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0i_BFu0i_BFu16ll) C1{ Fi:0 Fi:0 FL:16}



static void Test_BFu0i_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu16ll");
    static BFu0i_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu16ll(Test_BFu0i_BFu0i_BFu16ll, "BFu0i_BFu0i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu16s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0i_BFu0i_BFu16s) C1{ Fi:0 Fi:0 Fs:16}



static void Test_BFu0i_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu16s");
    static BFu0i_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu16s(Test_BFu0i_BFu0i_BFu16s, "BFu0i_BFu0i_BFu16s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu17i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0i_BFu0i_BFu17i) C1{ Fi:0 Fi:0 Fi:17}



static void Test_BFu0i_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu17i");
    static BFu0i_BFu0i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu17i(Test_BFu0i_BFu0i_BFu17i, "BFu0i_BFu0i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu17ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0i_BFu0i_BFu17ll) C1{ Fi:0 Fi:0 FL:17}



static void Test_BFu0i_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu17ll");
    static BFu0i_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu17ll(Test_BFu0i_BFu0i_BFu17ll, "BFu0i_BFu0i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu1c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0i_BFu0i_BFu1c) C1{ Fi:0 Fi:0 Fc:1}



static void Test_BFu0i_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu1c");
    static BFu0i_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu1c(Test_BFu0i_BFu0i_BFu1c, "BFu0i_BFu0i_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu1i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0i_BFu0i_BFu1i) C1{ Fi:0 Fi:0 Fi:1}



static void Test_BFu0i_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu1i");
    static BFu0i_BFu0i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu1i(Test_BFu0i_BFu0i_BFu1i, "BFu0i_BFu0i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu1ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0i_BFu0i_BFu1ll) C1{ Fi:0 Fi:0 FL:1}



static void Test_BFu0i_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu1ll");
    static BFu0i_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu1ll(Test_BFu0i_BFu0i_BFu1ll, "BFu0i_BFu0i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu1s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0i_BFu0i_BFu1s) C1{ Fi:0 Fi:0 Fs:1}



static void Test_BFu0i_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu1s");
    static BFu0i_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu1s(Test_BFu0i_BFu0i_BFu1s, "BFu0i_BFu0i_BFu1s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu31i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0i_BFu0i_BFu31i) C1{ Fi:0 Fi:0 Fi:31}



static void Test_BFu0i_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu31i");
    static BFu0i_BFu0i_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu31i(Test_BFu0i_BFu0i_BFu31i, "BFu0i_BFu0i_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu31ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0i_BFu0i_BFu31ll) C1{ Fi:0 Fi:0 FL:31}



static void Test_BFu0i_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu31ll");
    static BFu0i_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu31ll(Test_BFu0i_BFu0i_BFu31ll, "BFu0i_BFu0i_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu32i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0i_BFu0i_BFu32i) C1{ Fi:0 Fi:0 Fi:32}



static void Test_BFu0i_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu32i");
    static BFu0i_BFu0i_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu32i(Test_BFu0i_BFu0i_BFu32i, "BFu0i_BFu0i_BFu32i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu32ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0i_BFu0i_BFu32ll) C1{ Fi:0 Fi:0 FL:32}



static void Test_BFu0i_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu32ll");
    static BFu0i_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu32ll(Test_BFu0i_BFu0i_BFu32ll, "BFu0i_BFu0i_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu33  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0i_BFu0i_BFu33) C1{ Fi:0 Fi:0 FL:33}



static void Test_BFu0i_BFu0i_BFu33()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu33");
    static BFu0i_BFu0i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0i_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu33(Test_BFu0i_BFu0i_BFu33, "BFu0i_BFu0i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu7c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0i_BFu0i_BFu7c) C1{ Fi:0 Fi:0 Fc:7}



static void Test_BFu0i_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu7c");
    static BFu0i_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu7c(Test_BFu0i_BFu0i_BFu7c, "BFu0i_BFu0i_BFu7c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu7i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0i_BFu0i_BFu7i) C1{ Fi:0 Fi:0 Fi:7}



static void Test_BFu0i_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu7i");
    static BFu0i_BFu0i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu7i(Test_BFu0i_BFu0i_BFu7i, "BFu0i_BFu0i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu7ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0i_BFu0i_BFu7ll) C1{ Fi:0 Fi:0 FL:7}



static void Test_BFu0i_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu7ll");
    static BFu0i_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu7ll(Test_BFu0i_BFu0i_BFu7ll, "BFu0i_BFu0i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu7s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0i_BFu0i_BFu7s) C1{ Fi:0 Fi:0 Fs:7}



static void Test_BFu0i_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu7s");
    static BFu0i_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu7s(Test_BFu0i_BFu0i_BFu7s, "BFu0i_BFu0i_BFu7s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu8c  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0i_BFu0i_BFu8c) C1{ Fi:0 Fi:0 Fc:8}



static void Test_BFu0i_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu8c");
    static BFu0i_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu8c(Test_BFu0i_BFu0i_BFu8c, "BFu0i_BFu0i_BFu8c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu8i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0i_BFu0i_BFu8i) C1{ Fi:0 Fi:0 Fi:8}



static void Test_BFu0i_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu8i");
    static BFu0i_BFu0i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu8i(Test_BFu0i_BFu0i_BFu8i, "BFu0i_BFu0i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu8ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0i_BFu0i_BFu8ll) C1{ Fi:0 Fi:0 FL:8}



static void Test_BFu0i_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu8ll");
    static BFu0i_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu8ll(Test_BFu0i_BFu0i_BFu8ll, "BFu0i_BFu0i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu8s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0i_BFu0i_BFu8s) C1{ Fi:0 Fi:0 Fs:8}



static void Test_BFu0i_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu8s");
    static BFu0i_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu8s(Test_BFu0i_BFu0i_BFu8s, "BFu0i_BFu0i_BFu8s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu9i  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0i_BFu0i_BFu9i) C1{ Fi:0 Fi:0 Fi:9}



static void Test_BFu0i_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu9i");
    static BFu0i_BFu0i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu9i(Test_BFu0i_BFu0i_BFu9i, "BFu0i_BFu0i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu9ll  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0i_BFu0i_BFu9ll) C1{ Fi:0 Fi:0 FL:9}



static void Test_BFu0i_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu9ll");
    static BFu0i_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu9ll(Test_BFu0i_BFu0i_BFu9ll, "BFu0i_BFu0i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_BFu9s  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0i_BFu0i_BFu9s) C1{ Fi:0 Fi:0 Fs:9}



static void Test_BFu0i_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu0i_BFu9s");
    static BFu0i_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_BFu9s(Test_BFu0i_BFu0i_BFu9s, "BFu0i_BFu0i_BFu9s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_C  {
  unsigned int  :0;
  unsigned int  :0;
  char v1;
};
//SIG(1 BFu0i_BFu0i_C) C1{ Fi:0 Fi:0 Fc}



static void Test_BFu0i_BFu0i_C()
{
  {
    init_simple_test("BFu0i_BFu0i_C");
    static BFu0i_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_C)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_C(Test_BFu0i_BFu0i_C, "BFu0i_BFu0i_C", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_D  {
  unsigned int  :0;
  unsigned int  :0;
  double v1;
};
//SIG(1 BFu0i_BFu0i_D) C1{ Fi:0 Fi:0 FL}



static void Test_BFu0i_BFu0i_D()
{
  {
    init_simple_test("BFu0i_BFu0i_D");
    static BFu0i_BFu0i_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_D)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_D(Test_BFu0i_BFu0i_D, "BFu0i_BFu0i_D", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_F  {
  unsigned int  :0;
  unsigned int  :0;
  float v1;
};
//SIG(1 BFu0i_BFu0i_F) C1{ Fi:0 Fi:0 Fi}



static void Test_BFu0i_BFu0i_F()
{
  {
    init_simple_test("BFu0i_BFu0i_F");
    static BFu0i_BFu0i_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_F)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_F(Test_BFu0i_BFu0i_F, "BFu0i_BFu0i_F", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_I  {
  unsigned int  :0;
  unsigned int  :0;
  int v1;
};
//SIG(1 BFu0i_BFu0i_I) C1{ Fi:0 Fi:0 Fi}



static void Test_BFu0i_BFu0i_I()
{
  {
    init_simple_test("BFu0i_BFu0i_I");
    static BFu0i_BFu0i_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_I)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_I(Test_BFu0i_BFu0i_I, "BFu0i_BFu0i_I", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Ip  {
  unsigned int  :0;
  unsigned int  :0;
  int *v1;
};
//SIG(1 BFu0i_BFu0i_Ip) C1{ Fi:0 Fi:0 Fp}



static void Test_BFu0i_BFu0i_Ip()
{
  {
    init_simple_test("BFu0i_BFu0i_Ip");
    static BFu0i_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Ip(Test_BFu0i_BFu0i_Ip, "BFu0i_BFu0i_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_L  {
  unsigned int  :0;
  unsigned int  :0;
  __tsi64 v1;
};
//SIG(1 BFu0i_BFu0i_L) C1{ Fi:0 Fi:0 FL}



static void Test_BFu0i_BFu0i_L()
{
  {
    init_simple_test("BFu0i_BFu0i_L");
    static BFu0i_BFu0i_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_L)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_L(Test_BFu0i_BFu0i_L, "BFu0i_BFu0i_L", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_S  {
  unsigned int  :0;
  unsigned int  :0;
  short v1;
};
//SIG(1 BFu0i_BFu0i_S) C1{ Fi:0 Fi:0 Fs}



static void Test_BFu0i_BFu0i_S()
{
  {
    init_simple_test("BFu0i_BFu0i_S");
    static BFu0i_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_S)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_S(Test_BFu0i_BFu0i_S, "BFu0i_BFu0i_S", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Uc  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned char v1;
};
//SIG(1 BFu0i_BFu0i_Uc) C1{ Fi:0 Fi:0 Fc}



static void Test_BFu0i_BFu0i_Uc()
{
  {
    init_simple_test("BFu0i_BFu0i_Uc");
    static BFu0i_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Uc(Test_BFu0i_BFu0i_Uc, "BFu0i_BFu0i_Uc", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Ui  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned int v1;
};
//SIG(1 BFu0i_BFu0i_Ui) C1{ Fi:0 Fi:0 Fi}



static void Test_BFu0i_BFu0i_Ui()
{
  {
    init_simple_test("BFu0i_BFu0i_Ui");
    static BFu0i_BFu0i_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Ui(Test_BFu0i_BFu0i_Ui, "BFu0i_BFu0i_Ui", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Ul  {
  unsigned int  :0;
  unsigned int  :0;
  __tsu64 v1;
};
//SIG(1 BFu0i_BFu0i_Ul) C1{ Fi:0 Fi:0 FL}



static void Test_BFu0i_BFu0i_Ul()
{
  {
    init_simple_test("BFu0i_BFu0i_Ul");
    static BFu0i_BFu0i_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Ul(Test_BFu0i_BFu0i_Ul, "BFu0i_BFu0i_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Us  {
  unsigned int  :0;
  unsigned int  :0;
  unsigned short v1;
};
//SIG(1 BFu0i_BFu0i_Us) C1{ Fi:0 Fi:0 Fs}



static void Test_BFu0i_BFu0i_Us()
{
  {
    init_simple_test("BFu0i_BFu0i_Us");
    static BFu0i_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Us(Test_BFu0i_BFu0i_Us, "BFu0i_BFu0i_Us", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0i_Vp  {
  unsigned int  :0;
  unsigned int  :0;
  void *v1;
};
//SIG(1 BFu0i_BFu0i_Vp) C1{ Fi:0 Fi:0 Fp}



static void Test_BFu0i_BFu0i_Vp()
{
  {
    init_simple_test("BFu0i_BFu0i_Vp");
    static BFu0i_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0i_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0i_Vp(Test_BFu0i_BFu0i_Vp, "BFu0i_BFu0i_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll) C1{ Fi:0 FL:0}



static void Test_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll");
    static BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll(Test_BFu0i_BFu0ll, "BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c) C1{ Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c");
    static BFu0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c(Test_BFu0i_BFu0ll_BFs0c, "BFu0i_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFs0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFs0c");
    static BFu0i_BFu0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFs0c(Test_BFu0i_BFu0ll_BFs0c_BFs0c, "BFu0i_BFu0ll_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFs0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFs0i");
    static BFu0i_BFu0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFs0i(Test_BFu0i_BFu0ll_BFs0c_BFs0i, "BFu0i_BFu0ll_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFs0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFs0ll");
    static BFu0i_BFu0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFs0ll(Test_BFu0i_BFu0ll_BFs0c_BFs0ll, "BFu0i_BFu0ll_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFs0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFs0s");
    static BFu0i_BFu0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFs0s(Test_BFu0i_BFu0ll_BFs0c_BFs0s, "BFu0i_BFu0ll_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFu0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFu0c");
    static BFu0i_BFu0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFu0c(Test_BFu0i_BFu0ll_BFs0c_BFu0c, "BFu0i_BFu0ll_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFu0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFu0i");
    static BFu0i_BFu0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFu0i(Test_BFu0i_BFu0ll_BFs0c_BFu0i, "BFu0i_BFu0ll_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFu0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFu0ll");
    static BFu0i_BFu0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFu0ll(Test_BFu0i_BFu0ll_BFs0c_BFu0ll, "BFu0i_BFu0ll_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0c_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0c_BFu0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0c_BFu0s");
    static BFu0i_BFu0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0c_BFu0s(Test_BFu0i_BFu0ll_BFs0c_BFu0s, "BFu0i_BFu0ll_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i) C1{ Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i");
    static BFu0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i(Test_BFu0i_BFu0ll_BFs0i, "BFu0i_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFs0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFs0c");
    static BFu0i_BFu0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFs0c(Test_BFu0i_BFu0ll_BFs0i_BFs0c, "BFu0i_BFu0ll_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFs0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFs0i");
    static BFu0i_BFu0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFs0i(Test_BFu0i_BFu0ll_BFs0i_BFs0i, "BFu0i_BFu0ll_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFs0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFs0ll");
    static BFu0i_BFu0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFs0ll(Test_BFu0i_BFu0ll_BFs0i_BFs0ll, "BFu0i_BFu0ll_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFs0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFs0s");
    static BFu0i_BFu0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFs0s(Test_BFu0i_BFu0ll_BFs0i_BFs0s, "BFu0i_BFu0ll_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFu0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFu0c");
    static BFu0i_BFu0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFu0c(Test_BFu0i_BFu0ll_BFs0i_BFu0c, "BFu0i_BFu0ll_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFu0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFu0i");
    static BFu0i_BFu0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFu0i(Test_BFu0i_BFu0ll_BFs0i_BFu0i, "BFu0i_BFu0ll_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFu0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFu0ll");
    static BFu0i_BFu0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFu0ll(Test_BFu0i_BFu0ll_BFs0i_BFu0ll, "BFu0i_BFu0ll_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0i_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0i_BFu0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0i_BFu0s");
    static BFu0i_BFu0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0i_BFu0s(Test_BFu0i_BFu0ll_BFs0i_BFu0s, "BFu0i_BFu0ll_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll");
    static BFu0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll(Test_BFu0i_BFu0ll_BFs0ll, "BFu0i_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFs0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFs0c");
    static BFu0i_BFu0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFs0c(Test_BFu0i_BFu0ll_BFs0ll_BFs0c, "BFu0i_BFu0ll_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFs0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFs0i");
    static BFu0i_BFu0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFs0i(Test_BFu0i_BFu0ll_BFs0ll_BFs0i, "BFu0i_BFu0ll_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFs0ll");
    static BFu0i_BFu0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFs0ll(Test_BFu0i_BFu0ll_BFs0ll_BFs0ll, "BFu0i_BFu0ll_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFs0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFs0s");
    static BFu0i_BFu0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFs0s(Test_BFu0i_BFu0ll_BFs0ll_BFs0s, "BFu0i_BFu0ll_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFu0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFu0c");
    static BFu0i_BFu0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFu0c(Test_BFu0i_BFu0ll_BFs0ll_BFu0c, "BFu0i_BFu0ll_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFu0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFu0i");
    static BFu0i_BFu0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFu0i(Test_BFu0i_BFu0ll_BFs0ll_BFu0i, "BFu0i_BFu0ll_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFu0ll");
    static BFu0i_BFu0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFu0ll(Test_BFu0i_BFu0ll_BFs0ll_BFu0ll, "BFu0i_BFu0ll_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0ll_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0ll_BFu0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0ll_BFu0s");
    static BFu0i_BFu0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0ll_BFu0s(Test_BFu0i_BFu0ll_BFs0ll_BFu0s, "BFu0i_BFu0ll_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s) C1{ Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s");
    static BFu0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s(Test_BFu0i_BFu0ll_BFs0s, "BFu0i_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFs0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFs0c");
    static BFu0i_BFu0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFs0c(Test_BFu0i_BFu0ll_BFs0s_BFs0c, "BFu0i_BFu0ll_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFs0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFs0i");
    static BFu0i_BFu0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFs0i(Test_BFu0i_BFu0ll_BFs0s_BFs0i, "BFu0i_BFu0ll_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFs0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFs0ll");
    static BFu0i_BFu0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFs0ll(Test_BFu0i_BFu0ll_BFs0s_BFs0ll, "BFu0i_BFu0ll_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFs0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFs0s");
    static BFu0i_BFu0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFs0s(Test_BFu0i_BFu0ll_BFs0s_BFs0s, "BFu0i_BFu0ll_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFu0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFu0c");
    static BFu0i_BFu0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFu0c(Test_BFu0i_BFu0ll_BFs0s_BFu0c, "BFu0i_BFu0ll_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFu0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFu0i");
    static BFu0i_BFu0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFu0i(Test_BFu0i_BFu0ll_BFs0s_BFu0i, "BFu0i_BFu0ll_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFu0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFu0ll");
    static BFu0i_BFu0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFu0ll(Test_BFu0i_BFu0ll_BFs0s_BFu0ll, "BFu0i_BFu0ll_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFs0s_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFs0s_BFu0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFs0s_BFu0s");
    static BFu0i_BFu0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFs0s_BFu0s(Test_BFu0i_BFu0ll_BFs0s_BFu0s, "BFu0i_BFu0ll_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c) C1{ Fi:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c");
    static BFu0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c(Test_BFu0i_BFu0ll_BFu0c, "BFu0i_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFs0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFs0c");
    static BFu0i_BFu0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFs0c(Test_BFu0i_BFu0ll_BFu0c_BFs0c, "BFu0i_BFu0ll_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFs0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFs0i");
    static BFu0i_BFu0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFs0i(Test_BFu0i_BFu0ll_BFu0c_BFs0i, "BFu0i_BFu0ll_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFs0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFs0ll");
    static BFu0i_BFu0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFs0ll(Test_BFu0i_BFu0ll_BFu0c_BFs0ll, "BFu0i_BFu0ll_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFs0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFs0s");
    static BFu0i_BFu0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFs0s(Test_BFu0i_BFu0ll_BFu0c_BFs0s, "BFu0i_BFu0ll_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFu0c) C1{ Fi:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFu0c");
    static BFu0i_BFu0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFu0c(Test_BFu0i_BFu0ll_BFu0c_BFu0c, "BFu0i_BFu0ll_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFu0i) C1{ Fi:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFu0i");
    static BFu0i_BFu0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFu0i(Test_BFu0i_BFu0ll_BFu0c_BFu0i, "BFu0i_BFu0ll_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFu0ll) C1{ Fi:0 FL:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFu0ll");
    static BFu0i_BFu0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFu0ll(Test_BFu0i_BFu0ll_BFu0c_BFu0ll, "BFu0i_BFu0ll_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0c_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0c_BFu0s) C1{ Fi:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0c_BFu0s");
    static BFu0i_BFu0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0c_BFu0s(Test_BFu0i_BFu0ll_BFu0c_BFu0s, "BFu0i_BFu0ll_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i) C1{ Fi:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i");
    static BFu0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i(Test_BFu0i_BFu0ll_BFu0i, "BFu0i_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFs0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFs0c");
    static BFu0i_BFu0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFs0c(Test_BFu0i_BFu0ll_BFu0i_BFs0c, "BFu0i_BFu0ll_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFs0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFs0i");
    static BFu0i_BFu0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFs0i(Test_BFu0i_BFu0ll_BFu0i_BFs0i, "BFu0i_BFu0ll_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFs0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFs0ll");
    static BFu0i_BFu0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFs0ll(Test_BFu0i_BFu0ll_BFu0i_BFs0ll, "BFu0i_BFu0ll_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFs0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFs0s");
    static BFu0i_BFu0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFs0s(Test_BFu0i_BFu0ll_BFu0i_BFs0s, "BFu0i_BFu0ll_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFu0c) C1{ Fi:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFu0c");
    static BFu0i_BFu0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFu0c(Test_BFu0i_BFu0ll_BFu0i_BFu0c, "BFu0i_BFu0ll_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFu0i) C1{ Fi:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFu0i");
    static BFu0i_BFu0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFu0i(Test_BFu0i_BFu0ll_BFu0i_BFu0i, "BFu0i_BFu0ll_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFu0ll) C1{ Fi:0 FL:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFu0ll");
    static BFu0i_BFu0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFu0ll(Test_BFu0i_BFu0ll_BFu0i_BFu0ll, "BFu0i_BFu0ll_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0i_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0i_BFu0s) C1{ Fi:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0i_BFu0s");
    static BFu0i_BFu0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0i_BFu0s(Test_BFu0i_BFu0ll_BFu0i_BFu0s, "BFu0i_BFu0ll_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll");
    static BFu0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll(Test_BFu0i_BFu0ll_BFu0ll, "BFu0i_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFs0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFs0c");
    static BFu0i_BFu0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFs0c(Test_BFu0i_BFu0ll_BFu0ll_BFs0c, "BFu0i_BFu0ll_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFs0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFs0i");
    static BFu0i_BFu0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFs0i(Test_BFu0i_BFu0ll_BFu0ll_BFs0i, "BFu0i_BFu0ll_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFs0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFs0ll");
    static BFu0i_BFu0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFs0ll(Test_BFu0i_BFu0ll_BFu0ll_BFs0ll, "BFu0i_BFu0ll_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFs0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFs0s");
    static BFu0i_BFu0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFs0s(Test_BFu0i_BFu0ll_BFu0ll_BFs0s, "BFu0i_BFu0ll_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFu0c) C1{ Fi:0 FL:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFu0c");
    static BFu0i_BFu0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFu0c(Test_BFu0i_BFu0ll_BFu0ll_BFu0c, "BFu0i_BFu0ll_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFu0i) C1{ Fi:0 FL:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFu0i");
    static BFu0i_BFu0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFu0i(Test_BFu0i_BFu0ll_BFu0ll_BFu0i, "BFu0i_BFu0ll_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFu0ll) C1{ Fi:0 FL:0 FL:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFu0ll");
    static BFu0i_BFu0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFu0ll(Test_BFu0i_BFu0ll_BFu0ll_BFu0ll, "BFu0i_BFu0ll_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0ll_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0ll_BFu0s) C1{ Fi:0 FL:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0ll_BFu0s");
    static BFu0i_BFu0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0ll_BFu0s(Test_BFu0i_BFu0ll_BFu0ll_BFu0s, "BFu0i_BFu0ll_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s) C1{ Fi:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s");
    static BFu0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s(Test_BFu0i_BFu0ll_BFu0s, "BFu0i_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFs0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFs0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFs0c");
    static BFu0i_BFu0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFs0c(Test_BFu0i_BFu0ll_BFu0s_BFs0c, "BFu0i_BFu0ll_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFs0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFs0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFs0i");
    static BFu0i_BFu0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFs0i(Test_BFu0i_BFu0ll_BFu0s_BFs0i, "BFu0i_BFu0ll_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFs0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFs0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFs0ll");
    static BFu0i_BFu0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFs0ll(Test_BFu0i_BFu0ll_BFu0s_BFs0ll, "BFu0i_BFu0ll_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFs0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFs0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFs0s");
    static BFu0i_BFu0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFs0s(Test_BFu0i_BFu0ll_BFu0s_BFs0s, "BFu0i_BFu0ll_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFu0c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFu0c) C1{ Fi:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFu0c");
    static BFu0i_BFu0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFu0c(Test_BFu0i_BFu0ll_BFu0s_BFu0c, "BFu0i_BFu0ll_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFu0i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFu0i) C1{ Fi:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFu0i");
    static BFu0i_BFu0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFu0i(Test_BFu0i_BFu0ll_BFu0s_BFu0i, "BFu0i_BFu0ll_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFu0ll  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFu0ll) C1{ Fi:0 FL:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFu0ll");
    static BFu0i_BFu0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFu0ll(Test_BFu0i_BFu0ll_BFu0s_BFu0ll, "BFu0i_BFu0ll_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu0s_BFu0s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0ll_BFu0s_BFu0s) C1{ Fi:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu0s_BFu0s");
    static BFu0i_BFu0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu0s_BFu0s(Test_BFu0i_BFu0ll_BFu0s_BFu0s, "BFu0i_BFu0ll_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu15i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0i_BFu0ll_BFu15i) C1{ Fi:0 FL:0 Fi:15}



static void Test_BFu0i_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu15i");
    static BFu0i_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu15i(Test_BFu0i_BFu0ll_BFu15i, "BFu0i_BFu0ll_BFu15i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu15ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0i_BFu0ll_BFu15ll) C1{ Fi:0 FL:0 FL:15}



static void Test_BFu0i_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu15ll");
    static BFu0i_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu15ll(Test_BFu0i_BFu0ll_BFu15ll, "BFu0i_BFu0ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu15s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0i_BFu0ll_BFu15s) C1{ Fi:0 FL:0 Fs:15}



static void Test_BFu0i_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu15s");
    static BFu0i_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu15s(Test_BFu0i_BFu0ll_BFu15s, "BFu0i_BFu0ll_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu16i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0i_BFu0ll_BFu16i) C1{ Fi:0 FL:0 Fi:16}



static void Test_BFu0i_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu16i");
    static BFu0i_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu16i(Test_BFu0i_BFu0ll_BFu16i, "BFu0i_BFu0ll_BFu16i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu16ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0i_BFu0ll_BFu16ll) C1{ Fi:0 FL:0 FL:16}



static void Test_BFu0i_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu16ll");
    static BFu0i_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu16ll(Test_BFu0i_BFu0ll_BFu16ll, "BFu0i_BFu0ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu16s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0i_BFu0ll_BFu16s) C1{ Fi:0 FL:0 Fs:16}



static void Test_BFu0i_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu16s");
    static BFu0i_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu16s(Test_BFu0i_BFu0ll_BFu16s, "BFu0i_BFu0ll_BFu16s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu17i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0i_BFu0ll_BFu17i) C1{ Fi:0 FL:0 Fi:17}



static void Test_BFu0i_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu17i");
    static BFu0i_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu17i(Test_BFu0i_BFu0ll_BFu17i, "BFu0i_BFu0ll_BFu17i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu17ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0i_BFu0ll_BFu17ll) C1{ Fi:0 FL:0 FL:17}



static void Test_BFu0i_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu17ll");
    static BFu0i_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu17ll(Test_BFu0i_BFu0ll_BFu17ll, "BFu0i_BFu0ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu1c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0i_BFu0ll_BFu1c) C1{ Fi:0 FL:0 Fc:1}



static void Test_BFu0i_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu1c");
    static BFu0i_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu1c(Test_BFu0i_BFu0ll_BFu1c, "BFu0i_BFu0ll_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu1i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0i_BFu0ll_BFu1i) C1{ Fi:0 FL:0 Fi:1}



static void Test_BFu0i_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu1i");
    static BFu0i_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu1i(Test_BFu0i_BFu0ll_BFu1i, "BFu0i_BFu0ll_BFu1i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu1ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0i_BFu0ll_BFu1ll) C1{ Fi:0 FL:0 FL:1}



static void Test_BFu0i_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu1ll");
    static BFu0i_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu1ll(Test_BFu0i_BFu0ll_BFu1ll, "BFu0i_BFu0ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu1s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0i_BFu0ll_BFu1s) C1{ Fi:0 FL:0 Fs:1}



static void Test_BFu0i_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu1s");
    static BFu0i_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu1s(Test_BFu0i_BFu0ll_BFu1s, "BFu0i_BFu0ll_BFu1s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu31i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0i_BFu0ll_BFu31i) C1{ Fi:0 FL:0 Fi:31}



static void Test_BFu0i_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu31i");
    static BFu0i_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu31i(Test_BFu0i_BFu0ll_BFu31i, "BFu0i_BFu0ll_BFu31i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu31ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0i_BFu0ll_BFu31ll) C1{ Fi:0 FL:0 FL:31}



static void Test_BFu0i_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu31ll");
    static BFu0i_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu31ll(Test_BFu0i_BFu0ll_BFu31ll, "BFu0i_BFu0ll_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu32i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0i_BFu0ll_BFu32i) C1{ Fi:0 FL:0 Fi:32}



static void Test_BFu0i_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu32i");
    static BFu0i_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu32i(Test_BFu0i_BFu0ll_BFu32i, "BFu0i_BFu0ll_BFu32i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu32ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0i_BFu0ll_BFu32ll) C1{ Fi:0 FL:0 FL:32}



static void Test_BFu0i_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu32ll");
    static BFu0i_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu32ll(Test_BFu0i_BFu0ll_BFu32ll, "BFu0i_BFu0ll_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu33  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0i_BFu0ll_BFu33) C1{ Fi:0 FL:0 FL:33}



static void Test_BFu0i_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu33");
    static BFu0i_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0i_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu33(Test_BFu0i_BFu0ll_BFu33, "BFu0i_BFu0ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu7c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0i_BFu0ll_BFu7c) C1{ Fi:0 FL:0 Fc:7}



static void Test_BFu0i_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu7c");
    static BFu0i_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu7c(Test_BFu0i_BFu0ll_BFu7c, "BFu0i_BFu0ll_BFu7c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu7i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0i_BFu0ll_BFu7i) C1{ Fi:0 FL:0 Fi:7}



static void Test_BFu0i_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu7i");
    static BFu0i_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu7i(Test_BFu0i_BFu0ll_BFu7i, "BFu0i_BFu0ll_BFu7i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu7ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0i_BFu0ll_BFu7ll) C1{ Fi:0 FL:0 FL:7}



static void Test_BFu0i_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu7ll");
    static BFu0i_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu7ll(Test_BFu0i_BFu0ll_BFu7ll, "BFu0i_BFu0ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu7s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0i_BFu0ll_BFu7s) C1{ Fi:0 FL:0 Fs:7}



static void Test_BFu0i_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu7s");
    static BFu0i_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu7s(Test_BFu0i_BFu0ll_BFu7s, "BFu0i_BFu0ll_BFu7s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu8c  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0i_BFu0ll_BFu8c) C1{ Fi:0 FL:0 Fc:8}



static void Test_BFu0i_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu8c");
    static BFu0i_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu8c(Test_BFu0i_BFu0ll_BFu8c, "BFu0i_BFu0ll_BFu8c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu8i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0i_BFu0ll_BFu8i) C1{ Fi:0 FL:0 Fi:8}



static void Test_BFu0i_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu8i");
    static BFu0i_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu8i(Test_BFu0i_BFu0ll_BFu8i, "BFu0i_BFu0ll_BFu8i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu8ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0i_BFu0ll_BFu8ll) C1{ Fi:0 FL:0 FL:8}



static void Test_BFu0i_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu8ll");
    static BFu0i_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu8ll(Test_BFu0i_BFu0ll_BFu8ll, "BFu0i_BFu0ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu8s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0i_BFu0ll_BFu8s) C1{ Fi:0 FL:0 Fs:8}



static void Test_BFu0i_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu8s");
    static BFu0i_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu8s(Test_BFu0i_BFu0ll_BFu8s, "BFu0i_BFu0ll_BFu8s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu9i  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0i_BFu0ll_BFu9i) C1{ Fi:0 FL:0 Fi:9}



static void Test_BFu0i_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu9i");
    static BFu0i_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu9i(Test_BFu0i_BFu0ll_BFu9i, "BFu0i_BFu0ll_BFu9i", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu9ll  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0i_BFu0ll_BFu9ll) C1{ Fi:0 FL:0 FL:9}



static void Test_BFu0i_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu9ll");
    static BFu0i_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu9ll(Test_BFu0i_BFu0ll_BFu9ll, "BFu0i_BFu0ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_BFu9s  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0i_BFu0ll_BFu9s) C1{ Fi:0 FL:0 Fs:9}



static void Test_BFu0i_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu0ll_BFu9s");
    static BFu0i_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_BFu9s(Test_BFu0i_BFu0ll_BFu9s, "BFu0i_BFu0ll_BFu9s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_C  {
  unsigned int  :0;
  __tsu64  :0;
  char v1;
};
//SIG(1 BFu0i_BFu0ll_C) C1{ Fi:0 FL:0 Fc}



static void Test_BFu0i_BFu0ll_C()
{
  {
    init_simple_test("BFu0i_BFu0ll_C");
    static BFu0i_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_C(Test_BFu0i_BFu0ll_C, "BFu0i_BFu0ll_C", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_D  {
  unsigned int  :0;
  __tsu64  :0;
  double v1;
};
//SIG(1 BFu0i_BFu0ll_D) C1{ Fi:0 FL:0 FL}



static void Test_BFu0i_BFu0ll_D()
{
  {
    init_simple_test("BFu0i_BFu0ll_D");
    static BFu0i_BFu0ll_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_D(Test_BFu0i_BFu0ll_D, "BFu0i_BFu0ll_D", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_F  {
  unsigned int  :0;
  __tsu64  :0;
  float v1;
};
//SIG(1 BFu0i_BFu0ll_F) C1{ Fi:0 FL:0 Fi}



static void Test_BFu0i_BFu0ll_F()
{
  {
    init_simple_test("BFu0i_BFu0ll_F");
    static BFu0i_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_F(Test_BFu0i_BFu0ll_F, "BFu0i_BFu0ll_F", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_I  {
  unsigned int  :0;
  __tsu64  :0;
  int v1;
};
//SIG(1 BFu0i_BFu0ll_I) C1{ Fi:0 FL:0 Fi}



static void Test_BFu0i_BFu0ll_I()
{
  {
    init_simple_test("BFu0i_BFu0ll_I");
    static BFu0i_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_I(Test_BFu0i_BFu0ll_I, "BFu0i_BFu0ll_I", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Ip  {
  unsigned int  :0;
  __tsu64  :0;
  int *v1;
};
//SIG(1 BFu0i_BFu0ll_Ip) C1{ Fi:0 FL:0 Fp}



static void Test_BFu0i_BFu0ll_Ip()
{
  {
    init_simple_test("BFu0i_BFu0ll_Ip");
    static BFu0i_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Ip(Test_BFu0i_BFu0ll_Ip, "BFu0i_BFu0ll_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_L  {
  unsigned int  :0;
  __tsu64  :0;
  __tsi64 v1;
};
//SIG(1 BFu0i_BFu0ll_L) C1{ Fi:0 FL:0 FL}



static void Test_BFu0i_BFu0ll_L()
{
  {
    init_simple_test("BFu0i_BFu0ll_L");
    static BFu0i_BFu0ll_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_L(Test_BFu0i_BFu0ll_L, "BFu0i_BFu0ll_L", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_S  {
  unsigned int  :0;
  __tsu64  :0;
  short v1;
};
//SIG(1 BFu0i_BFu0ll_S) C1{ Fi:0 FL:0 Fs}



static void Test_BFu0i_BFu0ll_S()
{
  {
    init_simple_test("BFu0i_BFu0ll_S");
    static BFu0i_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_S(Test_BFu0i_BFu0ll_S, "BFu0i_BFu0ll_S", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Uc  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned char v1;
};
//SIG(1 BFu0i_BFu0ll_Uc) C1{ Fi:0 FL:0 Fc}



static void Test_BFu0i_BFu0ll_Uc()
{
  {
    init_simple_test("BFu0i_BFu0ll_Uc");
    static BFu0i_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Uc(Test_BFu0i_BFu0ll_Uc, "BFu0i_BFu0ll_Uc", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Ui  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned int v1;
};
//SIG(1 BFu0i_BFu0ll_Ui) C1{ Fi:0 FL:0 Fi}



static void Test_BFu0i_BFu0ll_Ui()
{
  {
    init_simple_test("BFu0i_BFu0ll_Ui");
    static BFu0i_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0i_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Ui(Test_BFu0i_BFu0ll_Ui, "BFu0i_BFu0ll_Ui", ABISELECT(4,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Ul  {
  unsigned int  :0;
  __tsu64  :0;
  __tsu64 v1;
};
//SIG(1 BFu0i_BFu0ll_Ul) C1{ Fi:0 FL:0 FL}



static void Test_BFu0i_BFu0ll_Ul()
{
  {
    init_simple_test("BFu0i_BFu0ll_Ul");
    static BFu0i_BFu0ll_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Ul(Test_BFu0i_BFu0ll_Ul, "BFu0i_BFu0ll_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Us  {
  unsigned int  :0;
  __tsu64  :0;
  unsigned short v1;
};
//SIG(1 BFu0i_BFu0ll_Us) C1{ Fi:0 FL:0 Fs}



static void Test_BFu0i_BFu0ll_Us()
{
  {
    init_simple_test("BFu0i_BFu0ll_Us");
    static BFu0i_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Us(Test_BFu0i_BFu0ll_Us, "BFu0i_BFu0ll_Us", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0ll_Vp  {
  unsigned int  :0;
  __tsu64  :0;
  void *v1;
};
//SIG(1 BFu0i_BFu0ll_Vp) C1{ Fi:0 FL:0 Fp}



static void Test_BFu0i_BFu0ll_Vp()
{
  {
    init_simple_test("BFu0i_BFu0ll_Vp");
    static BFu0i_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0ll_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0ll_Vp(Test_BFu0i_BFu0ll_Vp, "BFu0i_BFu0ll_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s) C1{ Fi:0 Fs:0}



static void Test_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s");
    static BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s(Test_BFu0i_BFu0s, "BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c) C1{ Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c");
    static BFu0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c(Test_BFu0i_BFu0s_BFs0c, "BFu0i_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFs0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFs0c");
    static BFu0i_BFu0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFs0c(Test_BFu0i_BFu0s_BFs0c_BFs0c, "BFu0i_BFu0s_BFs0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFs0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFs0i");
    static BFu0i_BFu0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFs0i(Test_BFu0i_BFu0s_BFs0c_BFs0i, "BFu0i_BFu0s_BFs0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFs0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFs0ll");
    static BFu0i_BFu0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFs0ll(Test_BFu0i_BFu0s_BFs0c_BFs0ll, "BFu0i_BFu0s_BFs0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFs0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFs0s");
    static BFu0i_BFu0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFs0s(Test_BFu0i_BFu0s_BFs0c_BFs0s, "BFu0i_BFu0s_BFs0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFu0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFu0c");
    static BFu0i_BFu0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFu0c(Test_BFu0i_BFu0s_BFs0c_BFu0c, "BFu0i_BFu0s_BFs0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFu0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFu0i");
    static BFu0i_BFu0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFu0i(Test_BFu0i_BFu0s_BFs0c_BFu0i, "BFu0i_BFu0s_BFs0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFu0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFu0ll");
    static BFu0i_BFu0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFu0ll(Test_BFu0i_BFu0s_BFs0c_BFu0ll, "BFu0i_BFu0s_BFs0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0c_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0c_BFu0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0c_BFu0s");
    static BFu0i_BFu0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0c_BFu0s(Test_BFu0i_BFu0s_BFs0c_BFu0s, "BFu0i_BFu0s_BFs0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i) C1{ Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i");
    static BFu0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i(Test_BFu0i_BFu0s_BFs0i, "BFu0i_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFs0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFs0c");
    static BFu0i_BFu0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFs0c(Test_BFu0i_BFu0s_BFs0i_BFs0c, "BFu0i_BFu0s_BFs0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFs0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFs0i");
    static BFu0i_BFu0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFs0i(Test_BFu0i_BFu0s_BFs0i_BFs0i, "BFu0i_BFu0s_BFs0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFs0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFs0ll");
    static BFu0i_BFu0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFs0ll(Test_BFu0i_BFu0s_BFs0i_BFs0ll, "BFu0i_BFu0s_BFs0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFs0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFs0s");
    static BFu0i_BFu0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFs0s(Test_BFu0i_BFu0s_BFs0i_BFs0s, "BFu0i_BFu0s_BFs0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFu0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFu0c");
    static BFu0i_BFu0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFu0c(Test_BFu0i_BFu0s_BFs0i_BFu0c, "BFu0i_BFu0s_BFs0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFu0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFu0i");
    static BFu0i_BFu0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFu0i(Test_BFu0i_BFu0s_BFs0i_BFu0i, "BFu0i_BFu0s_BFs0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFu0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFu0ll");
    static BFu0i_BFu0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFu0ll(Test_BFu0i_BFu0s_BFs0i_BFu0ll, "BFu0i_BFu0s_BFs0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0i_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0i_BFu0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0i_BFu0s");
    static BFu0i_BFu0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0i_BFu0s(Test_BFu0i_BFu0s_BFs0i_BFu0s, "BFu0i_BFu0s_BFs0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll) C1{ Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll");
    static BFu0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll(Test_BFu0i_BFu0s_BFs0ll, "BFu0i_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFs0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFs0c");
    static BFu0i_BFu0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFs0c(Test_BFu0i_BFu0s_BFs0ll_BFs0c, "BFu0i_BFu0s_BFs0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFs0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFs0i");
    static BFu0i_BFu0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFs0i(Test_BFu0i_BFu0s_BFs0ll_BFs0i, "BFu0i_BFu0s_BFs0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFs0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFs0ll");
    static BFu0i_BFu0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFs0ll(Test_BFu0i_BFu0s_BFs0ll_BFs0ll, "BFu0i_BFu0s_BFs0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFs0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFs0s");
    static BFu0i_BFu0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFs0s(Test_BFu0i_BFu0s_BFs0ll_BFs0s, "BFu0i_BFu0s_BFs0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFu0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFu0c");
    static BFu0i_BFu0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFu0c(Test_BFu0i_BFu0s_BFs0ll_BFu0c, "BFu0i_BFu0s_BFs0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFu0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFu0i");
    static BFu0i_BFu0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFu0i(Test_BFu0i_BFu0s_BFs0ll_BFu0i, "BFu0i_BFu0s_BFs0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFu0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFu0ll");
    static BFu0i_BFu0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFu0ll(Test_BFu0i_BFu0s_BFs0ll_BFu0ll, "BFu0i_BFu0s_BFs0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0ll_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0ll_BFu0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0ll_BFu0s");
    static BFu0i_BFu0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0ll_BFu0s(Test_BFu0i_BFu0s_BFs0ll_BFu0s, "BFu0i_BFu0s_BFs0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s");
    static BFu0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s(Test_BFu0i_BFu0s_BFs0s, "BFu0i_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFs0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFs0c");
    static BFu0i_BFu0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFs0c(Test_BFu0i_BFu0s_BFs0s_BFs0c, "BFu0i_BFu0s_BFs0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFs0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFs0i");
    static BFu0i_BFu0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFs0i(Test_BFu0i_BFu0s_BFs0s_BFs0i, "BFu0i_BFu0s_BFs0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFs0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFs0ll");
    static BFu0i_BFu0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFs0ll(Test_BFu0i_BFu0s_BFs0s_BFs0ll, "BFu0i_BFu0s_BFs0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFs0s");
    static BFu0i_BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFs0s(Test_BFu0i_BFu0s_BFs0s_BFs0s, "BFu0i_BFu0s_BFs0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFu0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFu0c");
    static BFu0i_BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFu0c(Test_BFu0i_BFu0s_BFs0s_BFu0c, "BFu0i_BFu0s_BFs0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFu0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFu0i");
    static BFu0i_BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFu0i(Test_BFu0i_BFu0s_BFs0s_BFu0i, "BFu0i_BFu0s_BFs0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFu0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFu0ll");
    static BFu0i_BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFu0ll(Test_BFu0i_BFu0s_BFs0s_BFu0ll, "BFu0i_BFu0s_BFs0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFs0s_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFs0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFs0s_BFu0s");
    static BFu0i_BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFs0s_BFu0s(Test_BFu0i_BFu0s_BFs0s_BFu0s, "BFu0i_BFu0s_BFs0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c) C1{ Fi:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c");
    static BFu0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c(Test_BFu0i_BFu0s_BFu0c, "BFu0i_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFs0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFs0c");
    static BFu0i_BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFs0c(Test_BFu0i_BFu0s_BFu0c_BFs0c, "BFu0i_BFu0s_BFu0c_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFs0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFs0i");
    static BFu0i_BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFs0i(Test_BFu0i_BFu0s_BFu0c_BFs0i, "BFu0i_BFu0s_BFu0c_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFs0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFs0ll");
    static BFu0i_BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFs0ll(Test_BFu0i_BFu0s_BFu0c_BFs0ll, "BFu0i_BFu0s_BFu0c_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFs0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFs0s");
    static BFu0i_BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFs0s(Test_BFu0i_BFu0s_BFu0c_BFs0s, "BFu0i_BFu0s_BFu0c_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFu0c) C1{ Fi:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFu0c");
    static BFu0i_BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFu0c(Test_BFu0i_BFu0s_BFu0c_BFu0c, "BFu0i_BFu0s_BFu0c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFu0i) C1{ Fi:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFu0i");
    static BFu0i_BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFu0i(Test_BFu0i_BFu0s_BFu0c_BFu0i, "BFu0i_BFu0s_BFu0c_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFu0ll) C1{ Fi:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFu0ll");
    static BFu0i_BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFu0ll(Test_BFu0i_BFu0s_BFu0c_BFu0ll, "BFu0i_BFu0s_BFu0c_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0c_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0c_BFu0s) C1{ Fi:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0c_BFu0s");
    static BFu0i_BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0c_BFu0s(Test_BFu0i_BFu0s_BFu0c_BFu0s, "BFu0i_BFu0s_BFu0c_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i) C1{ Fi:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i");
    static BFu0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i(Test_BFu0i_BFu0s_BFu0i, "BFu0i_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFs0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFs0c");
    static BFu0i_BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFs0c(Test_BFu0i_BFu0s_BFu0i_BFs0c, "BFu0i_BFu0s_BFu0i_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFs0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFs0i");
    static BFu0i_BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFs0i(Test_BFu0i_BFu0s_BFu0i_BFs0i, "BFu0i_BFu0s_BFu0i_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFs0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFs0ll");
    static BFu0i_BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFs0ll(Test_BFu0i_BFu0s_BFu0i_BFs0ll, "BFu0i_BFu0s_BFu0i_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFs0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFs0s");
    static BFu0i_BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFs0s(Test_BFu0i_BFu0s_BFu0i_BFs0s, "BFu0i_BFu0s_BFu0i_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFu0c) C1{ Fi:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFu0c");
    static BFu0i_BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFu0c(Test_BFu0i_BFu0s_BFu0i_BFu0c, "BFu0i_BFu0s_BFu0i_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFu0i) C1{ Fi:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFu0i");
    static BFu0i_BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFu0i(Test_BFu0i_BFu0s_BFu0i_BFu0i, "BFu0i_BFu0s_BFu0i_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFu0ll) C1{ Fi:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFu0ll");
    static BFu0i_BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFu0ll(Test_BFu0i_BFu0s_BFu0i_BFu0ll, "BFu0i_BFu0s_BFu0i_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0i_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0i_BFu0s) C1{ Fi:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0i_BFu0s");
    static BFu0i_BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0i_BFu0s(Test_BFu0i_BFu0s_BFu0i_BFu0s, "BFu0i_BFu0s_BFu0i_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll) C1{ Fi:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll");
    static BFu0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll(Test_BFu0i_BFu0s_BFu0ll, "BFu0i_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFs0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFs0c");
    static BFu0i_BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFs0c(Test_BFu0i_BFu0s_BFu0ll_BFs0c, "BFu0i_BFu0s_BFu0ll_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFs0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFs0i");
    static BFu0i_BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFs0i(Test_BFu0i_BFu0s_BFu0ll_BFs0i, "BFu0i_BFu0s_BFu0ll_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFs0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFs0ll");
    static BFu0i_BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFs0ll(Test_BFu0i_BFu0s_BFu0ll_BFs0ll, "BFu0i_BFu0s_BFu0ll_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFs0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFs0s");
    static BFu0i_BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFs0s(Test_BFu0i_BFu0s_BFu0ll_BFs0s, "BFu0i_BFu0s_BFu0ll_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFu0c) C1{ Fi:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFu0c");
    static BFu0i_BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFu0c(Test_BFu0i_BFu0s_BFu0ll_BFu0c, "BFu0i_BFu0s_BFu0ll_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFu0i) C1{ Fi:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFu0i");
    static BFu0i_BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFu0i(Test_BFu0i_BFu0s_BFu0ll_BFu0i, "BFu0i_BFu0s_BFu0ll_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFu0ll) C1{ Fi:0 Fs:0 FL:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFu0ll");
    static BFu0i_BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFu0ll(Test_BFu0i_BFu0s_BFu0ll_BFu0ll, "BFu0i_BFu0s_BFu0ll_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0ll_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0ll_BFu0s) C1{ Fi:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0ll_BFu0s");
    static BFu0i_BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0ll_BFu0s(Test_BFu0i_BFu0s_BFu0ll_BFu0s, "BFu0i_BFu0s_BFu0ll_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s");
    static BFu0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s(Test_BFu0i_BFu0s_BFu0s, "BFu0i_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFs0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFs0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFs0c");
    static BFu0i_BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFs0c(Test_BFu0i_BFu0s_BFu0s_BFs0c, "BFu0i_BFu0s_BFu0s_BFs0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFs0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFs0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFs0i");
    static BFu0i_BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFs0i(Test_BFu0i_BFu0s_BFu0s_BFs0i, "BFu0i_BFu0s_BFu0s_BFs0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFs0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFs0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFs0ll");
    static BFu0i_BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFs0ll(Test_BFu0i_BFu0s_BFu0s_BFs0ll, "BFu0i_BFu0s_BFu0s_BFs0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFs0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFs0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFs0s");
    static BFu0i_BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFs0s(Test_BFu0i_BFu0s_BFu0s_BFs0s, "BFu0i_BFu0s_BFu0s_BFs0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFu0c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFu0c) C1{ Fi:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0i_BFu0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFu0c");
    static BFu0i_BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0c)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFu0c(Test_BFu0i_BFu0s_BFu0s_BFu0c, "BFu0i_BFu0s_BFu0s_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFu0i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFu0i) C1{ Fi:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0i_BFu0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFu0i");
    static BFu0i_BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0i)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFu0i(Test_BFu0i_BFu0s_BFu0s_BFu0i, "BFu0i_BFu0s_BFu0s_BFu0i", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFu0ll  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFu0ll) C1{ Fi:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0i_BFu0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFu0ll");
    static BFu0i_BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0ll)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFu0ll(Test_BFu0i_BFu0s_BFu0s_BFu0ll, "BFu0i_BFu0s_BFu0s_BFu0ll", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu0s_BFu0s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu0s_BFu0s_BFu0s) C1{ Fi:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0i_BFu0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu0s_BFu0s");
    static BFu0i_BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0s)");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu0s_BFu0s(Test_BFu0i_BFu0s_BFu0s_BFu0s, "BFu0i_BFu0s_BFu0s_BFu0s", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu15i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0i_BFu0s_BFu15i) C1{ Fi:0 Fs:0 Fi:15}



static void Test_BFu0i_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu15i");
    static BFu0i_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu15i(Test_BFu0i_BFu0s_BFu15i, "BFu0i_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu15ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0i_BFu0s_BFu15ll) C1{ Fi:0 Fs:0 FL:15}



static void Test_BFu0i_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu15ll");
    static BFu0i_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu15ll(Test_BFu0i_BFu0s_BFu15ll, "BFu0i_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu15s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0i_BFu0s_BFu15s) C1{ Fi:0 Fs:0 Fs:15}



static void Test_BFu0i_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu15s");
    static BFu0i_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu15s(Test_BFu0i_BFu0s_BFu15s, "BFu0i_BFu0s_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu16i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0i_BFu0s_BFu16i) C1{ Fi:0 Fs:0 Fi:16}



static void Test_BFu0i_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu16i");
    static BFu0i_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu16i(Test_BFu0i_BFu0s_BFu16i, "BFu0i_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu16ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0i_BFu0s_BFu16ll) C1{ Fi:0 Fs:0 FL:16}



static void Test_BFu0i_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu16ll");
    static BFu0i_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu16ll(Test_BFu0i_BFu0s_BFu16ll, "BFu0i_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu16s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0i_BFu0s_BFu16s) C1{ Fi:0 Fs:0 Fs:16}



static void Test_BFu0i_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu16s");
    static BFu0i_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu16s(Test_BFu0i_BFu0s_BFu16s, "BFu0i_BFu0s_BFu16s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu17i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0i_BFu0s_BFu17i) C1{ Fi:0 Fs:0 Fi:17}



static void Test_BFu0i_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu17i");
    static BFu0i_BFu0s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu17i(Test_BFu0i_BFu0s_BFu17i, "BFu0i_BFu0s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu17ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0i_BFu0s_BFu17ll) C1{ Fi:0 Fs:0 FL:17}



static void Test_BFu0i_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu17ll");
    static BFu0i_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu17ll(Test_BFu0i_BFu0s_BFu17ll, "BFu0i_BFu0s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu1c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0i_BFu0s_BFu1c) C1{ Fi:0 Fs:0 Fc:1}



static void Test_BFu0i_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu1c");
    static BFu0i_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu1c(Test_BFu0i_BFu0s_BFu1c, "BFu0i_BFu0s_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu1i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0i_BFu0s_BFu1i) C1{ Fi:0 Fs:0 Fi:1}



static void Test_BFu0i_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu1i");
    static BFu0i_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu1i(Test_BFu0i_BFu0s_BFu1i, "BFu0i_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu1ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0i_BFu0s_BFu1ll) C1{ Fi:0 Fs:0 FL:1}



static void Test_BFu0i_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu1ll");
    static BFu0i_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu1ll(Test_BFu0i_BFu0s_BFu1ll, "BFu0i_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu1s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0i_BFu0s_BFu1s) C1{ Fi:0 Fs:0 Fs:1}



static void Test_BFu0i_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu1s");
    static BFu0i_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu1s(Test_BFu0i_BFu0s_BFu1s, "BFu0i_BFu0s_BFu1s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu31i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0i_BFu0s_BFu31i) C1{ Fi:0 Fs:0 Fi:31}



static void Test_BFu0i_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu31i");
    static BFu0i_BFu0s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu31i(Test_BFu0i_BFu0s_BFu31i, "BFu0i_BFu0s_BFu31i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu31ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0i_BFu0s_BFu31ll) C1{ Fi:0 Fs:0 FL:31}



static void Test_BFu0i_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu31ll");
    static BFu0i_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu31ll(Test_BFu0i_BFu0s_BFu31ll, "BFu0i_BFu0s_BFu31ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu32i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0i_BFu0s_BFu32i) C1{ Fi:0 Fs:0 Fi:32}



static void Test_BFu0i_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu32i");
    static BFu0i_BFu0s_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu32i(Test_BFu0i_BFu0s_BFu32i, "BFu0i_BFu0s_BFu32i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu32ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0i_BFu0s_BFu32ll) C1{ Fi:0 Fs:0 FL:32}



static void Test_BFu0i_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu32ll");
    static BFu0i_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu32ll(Test_BFu0i_BFu0s_BFu32ll, "BFu0i_BFu0s_BFu32ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu33  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0i_BFu0s_BFu33) C1{ Fi:0 Fs:0 FL:33}



static void Test_BFu0i_BFu0s_BFu33()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu33");
    static BFu0i_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0i_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu33(Test_BFu0i_BFu0s_BFu33, "BFu0i_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu7c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0i_BFu0s_BFu7c) C1{ Fi:0 Fs:0 Fc:7}



static void Test_BFu0i_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu7c");
    static BFu0i_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu7c(Test_BFu0i_BFu0s_BFu7c, "BFu0i_BFu0s_BFu7c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu7i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0i_BFu0s_BFu7i) C1{ Fi:0 Fs:0 Fi:7}



static void Test_BFu0i_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu7i");
    static BFu0i_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu7i(Test_BFu0i_BFu0s_BFu7i, "BFu0i_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu7ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0i_BFu0s_BFu7ll) C1{ Fi:0 Fs:0 FL:7}



static void Test_BFu0i_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu7ll");
    static BFu0i_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu7ll(Test_BFu0i_BFu0s_BFu7ll, "BFu0i_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu7s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0i_BFu0s_BFu7s) C1{ Fi:0 Fs:0 Fs:7}



static void Test_BFu0i_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu7s");
    static BFu0i_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0i_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu7s(Test_BFu0i_BFu0s_BFu7s, "BFu0i_BFu0s_BFu7s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu8c  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0i_BFu0s_BFu8c) C1{ Fi:0 Fs:0 Fc:8}



static void Test_BFu0i_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu8c");
    static BFu0i_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu8c(Test_BFu0i_BFu0s_BFu8c, "BFu0i_BFu0s_BFu8c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu8i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0i_BFu0s_BFu8i) C1{ Fi:0 Fs:0 Fi:8}



static void Test_BFu0i_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu8i");
    static BFu0i_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu8i(Test_BFu0i_BFu0s_BFu8i, "BFu0i_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu8ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0i_BFu0s_BFu8ll) C1{ Fi:0 Fs:0 FL:8}



static void Test_BFu0i_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu8ll");
    static BFu0i_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu8ll(Test_BFu0i_BFu0s_BFu8ll, "BFu0i_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu8s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0i_BFu0s_BFu8s) C1{ Fi:0 Fs:0 Fs:8}



static void Test_BFu0i_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu8s");
    static BFu0i_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0i_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu8s(Test_BFu0i_BFu0s_BFu8s, "BFu0i_BFu0s_BFu8s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu9i  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0i_BFu0s_BFu9i) C1{ Fi:0 Fs:0 Fi:9}



static void Test_BFu0i_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu9i");
    static BFu0i_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu9i(Test_BFu0i_BFu0s_BFu9i, "BFu0i_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu9ll  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0i_BFu0s_BFu9ll) C1{ Fi:0 Fs:0 FL:9}



static void Test_BFu0i_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu9ll");
    static BFu0i_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu9ll(Test_BFu0i_BFu0s_BFu9ll, "BFu0i_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_BFu9s  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0i_BFu0s_BFu9s) C1{ Fi:0 Fs:0 Fs:9}



static void Test_BFu0i_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu0s_BFu9s");
    static BFu0i_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0i_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_BFu9s(Test_BFu0i_BFu0s_BFu9s, "BFu0i_BFu0s_BFu9s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_C  {
  unsigned int  :0;
  unsigned short  :0;
  char v1;
};
//SIG(1 BFu0i_BFu0s_C) C1{ Fi:0 Fs:0 Fc}



static void Test_BFu0i_BFu0s_C()
{
  {
    init_simple_test("BFu0i_BFu0s_C");
    static BFu0i_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_C)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_C.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_C(Test_BFu0i_BFu0s_C, "BFu0i_BFu0s_C", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_D  {
  unsigned int  :0;
  unsigned short  :0;
  double v1;
};
//SIG(1 BFu0i_BFu0s_D) C1{ Fi:0 Fs:0 FL}



static void Test_BFu0i_BFu0s_D()
{
  {
    init_simple_test("BFu0i_BFu0s_D");
    static BFu0i_BFu0s_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_D)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_D.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_D(Test_BFu0i_BFu0s_D, "BFu0i_BFu0s_D", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_F  {
  unsigned int  :0;
  unsigned short  :0;
  float v1;
};
//SIG(1 BFu0i_BFu0s_F) C1{ Fi:0 Fs:0 Fi}



static void Test_BFu0i_BFu0s_F()
{
  {
    init_simple_test("BFu0i_BFu0s_F");
    static BFu0i_BFu0s_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_F)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_F.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_F(Test_BFu0i_BFu0s_F, "BFu0i_BFu0s_F", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_I  {
  unsigned int  :0;
  unsigned short  :0;
  int v1;
};
//SIG(1 BFu0i_BFu0s_I) C1{ Fi:0 Fs:0 Fi}



static void Test_BFu0i_BFu0s_I()
{
  {
    init_simple_test("BFu0i_BFu0s_I");
    static BFu0i_BFu0s_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_I)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_I.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_I(Test_BFu0i_BFu0s_I, "BFu0i_BFu0s_I", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Ip  {
  unsigned int  :0;
  unsigned short  :0;
  int *v1;
};
//SIG(1 BFu0i_BFu0s_Ip) C1{ Fi:0 Fs:0 Fp}



static void Test_BFu0i_BFu0s_Ip()
{
  {
    init_simple_test("BFu0i_BFu0s_Ip");
    static BFu0i_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Ip.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Ip(Test_BFu0i_BFu0s_Ip, "BFu0i_BFu0s_Ip", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_L  {
  unsigned int  :0;
  unsigned short  :0;
  __tsi64 v1;
};
//SIG(1 BFu0i_BFu0s_L) C1{ Fi:0 Fs:0 FL}



static void Test_BFu0i_BFu0s_L()
{
  {
    init_simple_test("BFu0i_BFu0s_L");
    static BFu0i_BFu0s_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_L)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_L.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_L(Test_BFu0i_BFu0s_L, "BFu0i_BFu0s_L", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_S  {
  unsigned int  :0;
  unsigned short  :0;
  short v1;
};
//SIG(1 BFu0i_BFu0s_S) C1{ Fi:0 Fs:0 Fs}



static void Test_BFu0i_BFu0s_S()
{
  {
    init_simple_test("BFu0i_BFu0s_S");
    static BFu0i_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_S)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_S.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_S(Test_BFu0i_BFu0s_S, "BFu0i_BFu0s_S", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Uc  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned char v1;
};
//SIG(1 BFu0i_BFu0s_Uc) C1{ Fi:0 Fs:0 Fc}



static void Test_BFu0i_BFu0s_Uc()
{
  {
    init_simple_test("BFu0i_BFu0s_Uc");
    static BFu0i_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Uc.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Uc(Test_BFu0i_BFu0s_Uc, "BFu0i_BFu0s_Uc", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Ui  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned int v1;
};
//SIG(1 BFu0i_BFu0s_Ui) C1{ Fi:0 Fs:0 Fi}



static void Test_BFu0i_BFu0s_Ui()
{
  {
    init_simple_test("BFu0i_BFu0s_Ui");
    static BFu0i_BFu0s_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Ui.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Ui(Test_BFu0i_BFu0s_Ui, "BFu0i_BFu0s_Ui", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Ul  {
  unsigned int  :0;
  unsigned short  :0;
  __tsu64 v1;
};
//SIG(1 BFu0i_BFu0s_Ul) C1{ Fi:0 Fs:0 FL}



static void Test_BFu0i_BFu0s_Ul()
{
  {
    init_simple_test("BFu0i_BFu0s_Ul");
    static BFu0i_BFu0s_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Ul.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Ul(Test_BFu0i_BFu0s_Ul, "BFu0i_BFu0s_Ul", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Us  {
  unsigned int  :0;
  unsigned short  :0;
  unsigned short v1;
};
//SIG(1 BFu0i_BFu0s_Us) C1{ Fi:0 Fs:0 Fs}



static void Test_BFu0i_BFu0s_Us()
{
  {
    init_simple_test("BFu0i_BFu0s_Us");
    static BFu0i_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Us.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Us(Test_BFu0i_BFu0s_Us, "BFu0i_BFu0s_Us", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu0s_Vp  {
  unsigned int  :0;
  unsigned short  :0;
  void *v1;
};
//SIG(1 BFu0i_BFu0s_Vp) C1{ Fi:0 Fs:0 Fp}



static void Test_BFu0i_BFu0s_Vp()
{
  {
    init_simple_test("BFu0i_BFu0s_Vp");
    static BFu0i_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "BFu0i_BFu0s_Vp.v1");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu0s_Vp(Test_BFu0i_BFu0s_Vp, "BFu0i_BFu0s_Vp", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i  {
  unsigned int  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0i_BFu15i) C1{ Fi:0 Fi:15}



static void Test_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu15i");
    static BFu0i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i(Test_BFu0i_BFu15i, "BFu0i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu0c  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu15i_BFu0c) C1{ Fi:0 Fi:15 Fc:0}



static void Test_BFu0i_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu0c");
    static BFu0i_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu0c(Test_BFu0i_BFu15i_BFu0c, "BFu0i_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu0i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu15i_BFu0i) C1{ Fi:0 Fi:15 Fi:0}



static void Test_BFu0i_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu0i");
    static BFu0i_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu0i(Test_BFu0i_BFu15i_BFu0i, "BFu0i_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu0ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu15i_BFu0ll) C1{ Fi:0 Fi:15 FL:0}



static void Test_BFu0i_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu0ll");
    static BFu0i_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu0ll(Test_BFu0i_BFu15i_BFu0ll, "BFu0i_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu0s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu15i_BFu0s) C1{ Fi:0 Fi:15 Fs:0}



static void Test_BFu0i_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu0s");
    static BFu0i_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu0s(Test_BFu0i_BFu15i_BFu0s, "BFu0i_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu15i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu15i_BFu15i) C1{ Fi:0 Fi:15 Fi:15}



static void Test_BFu0i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu15i");
    static BFu0i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu15i(Test_BFu0i_BFu15i_BFu15i, "BFu0i_BFu15i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu15ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu15i_BFu15ll) C1{ Fi:0 Fi:15 FL:15}



static void Test_BFu0i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu15ll");
    static BFu0i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu15ll(Test_BFu0i_BFu15i_BFu15ll, "BFu0i_BFu15i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu15s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu15i_BFu15s) C1{ Fi:0 Fi:15 Fs:15}



static void Test_BFu0i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu15s");
    static BFu0i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu15s(Test_BFu0i_BFu15i_BFu15s, "BFu0i_BFu15i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu16i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu15i_BFu16i) C1{ Fi:0 Fi:15 Fi:16}



static void Test_BFu0i_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu16i");
    static BFu0i_BFu15i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu16i(Test_BFu0i_BFu15i_BFu16i, "BFu0i_BFu15i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu16ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu15i_BFu16ll) C1{ Fi:0 Fi:15 FL:16}



static void Test_BFu0i_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu16ll");
    static BFu0i_BFu15i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu16ll(Test_BFu0i_BFu15i_BFu16ll, "BFu0i_BFu15i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu16s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu15i_BFu16s) C1{ Fi:0 Fi:15 Fs:16}



static void Test_BFu0i_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu16s");
    static BFu0i_BFu15i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu15i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu16s(Test_BFu0i_BFu15i_BFu16s, "BFu0i_BFu15i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu17i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu15i_BFu17i) C1{ Fi:0 Fi:15 Fi:17}



static void Test_BFu0i_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu17i");
    static BFu0i_BFu15i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu17i(Test_BFu0i_BFu15i_BFu17i, "BFu0i_BFu15i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu17ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu15i_BFu17ll) C1{ Fi:0 Fi:15 FL:17}



static void Test_BFu0i_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu17ll");
    static BFu0i_BFu15i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu17ll(Test_BFu0i_BFu15i_BFu17ll, "BFu0i_BFu15i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu1c  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu15i_BFu1c) C1{ Fi:0 Fi:15 Fc:1}



static void Test_BFu0i_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu1c");
    static BFu0i_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu1c(Test_BFu0i_BFu15i_BFu1c, "BFu0i_BFu15i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu1i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu15i_BFu1i) C1{ Fi:0 Fi:15 Fi:1}



static void Test_BFu0i_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu1i");
    static BFu0i_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu1i(Test_BFu0i_BFu15i_BFu1i, "BFu0i_BFu15i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu1ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu15i_BFu1ll) C1{ Fi:0 Fi:15 FL:1}



static void Test_BFu0i_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu1ll");
    static BFu0i_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu1ll(Test_BFu0i_BFu15i_BFu1ll, "BFu0i_BFu15i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu1s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu15i_BFu1s) C1{ Fi:0 Fi:15 Fs:1}



static void Test_BFu0i_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu1s");
    static BFu0i_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu1s(Test_BFu0i_BFu15i_BFu1s, "BFu0i_BFu15i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu31i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu15i_BFu31i) C1{ Fi:0 Fi:15 Fi:31}



static void Test_BFu0i_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu31i");
    static BFu0i_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu15i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu31i(Test_BFu0i_BFu15i_BFu31i, "BFu0i_BFu15i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu31ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu15i_BFu31ll) C1{ Fi:0 Fi:15 FL:31}



static void Test_BFu0i_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu31ll");
    static BFu0i_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0i_BFu15i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu31ll(Test_BFu0i_BFu15i_BFu31ll, "BFu0i_BFu15i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu32i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu15i_BFu32i) C1{ Fi:0 Fi:15 Fi:32}



static void Test_BFu0i_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu32i");
    static BFu0i_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu15i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu32i(Test_BFu0i_BFu15i_BFu32i, "BFu0i_BFu15i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu32ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu15i_BFu32ll) C1{ Fi:0 Fi:15 FL:32}



static void Test_BFu0i_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu32ll");
    static BFu0i_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0i_BFu15i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu32ll(Test_BFu0i_BFu15i_BFu32ll, "BFu0i_BFu15i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu33  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu15i_BFu33) C1{ Fi:0 Fi:15 FL:33}



static void Test_BFu0i_BFu15i_BFu33()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu33");
    static BFu0i_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0i_BFu15i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu33(Test_BFu0i_BFu15i_BFu33, "BFu0i_BFu15i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu7c  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu15i_BFu7c) C1{ Fi:0 Fi:15 Fc:7}



static void Test_BFu0i_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu7c");
    static BFu0i_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu7c(Test_BFu0i_BFu15i_BFu7c, "BFu0i_BFu15i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu7i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu15i_BFu7i) C1{ Fi:0 Fi:15 Fi:7}



static void Test_BFu0i_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu7i");
    static BFu0i_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu7i(Test_BFu0i_BFu15i_BFu7i, "BFu0i_BFu15i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu7ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu15i_BFu7ll) C1{ Fi:0 Fi:15 FL:7}



static void Test_BFu0i_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu7ll");
    static BFu0i_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu7ll(Test_BFu0i_BFu15i_BFu7ll, "BFu0i_BFu15i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu7s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu15i_BFu7s) C1{ Fi:0 Fi:15 Fs:7}



static void Test_BFu0i_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu7s");
    static BFu0i_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu7s(Test_BFu0i_BFu15i_BFu7s, "BFu0i_BFu15i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu8c  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu15i_BFu8c) C1{ Fi:0 Fi:15 Fc:8}



static void Test_BFu0i_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu8c");
    static BFu0i_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu8c(Test_BFu0i_BFu15i_BFu8c, "BFu0i_BFu15i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu8i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu15i_BFu8i) C1{ Fi:0 Fi:15 Fi:8}



static void Test_BFu0i_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu8i");
    static BFu0i_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu8i(Test_BFu0i_BFu15i_BFu8i, "BFu0i_BFu15i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu8ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu15i_BFu8ll) C1{ Fi:0 Fi:15 FL:8}



static void Test_BFu0i_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu8ll");
    static BFu0i_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu8ll(Test_BFu0i_BFu15i_BFu8ll, "BFu0i_BFu15i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu8s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu15i_BFu8s) C1{ Fi:0 Fi:15 Fs:8}



static void Test_BFu0i_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu8s");
    static BFu0i_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu8s(Test_BFu0i_BFu15i_BFu8s, "BFu0i_BFu15i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu9i  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu15i_BFu9i) C1{ Fi:0 Fi:15 Fi:9}



static void Test_BFu0i_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu9i");
    static BFu0i_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu9i(Test_BFu0i_BFu15i_BFu9i, "BFu0i_BFu15i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu9ll  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu15i_BFu9ll) C1{ Fi:0 Fi:15 FL:9}



static void Test_BFu0i_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu9ll");
    static BFu0i_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu9ll(Test_BFu0i_BFu15i_BFu9ll, "BFu0i_BFu15i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_BFu9s  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu15i_BFu9s) C1{ Fi:0 Fi:15 Fs:9}



static void Test_BFu0i_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu15i_BFu9s");
    static BFu0i_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu15i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_BFu9s(Test_BFu0i_BFu15i_BFu9s, "BFu0i_BFu15i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_C  {
  unsigned int  :0;
  unsigned int v1:15;
  char v2;
};
//SIG(1 BFu0i_BFu15i_C) C1{ Fi:0 Fi:15 Fc}



static void Test_BFu0i_BFu15i_C()
{
  {
    init_simple_test("BFu0i_BFu15i_C");
    static BFu0i_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_C(Test_BFu0i_BFu15i_C, "BFu0i_BFu15i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_D  {
  unsigned int  :0;
  unsigned int v1:15;
  double v2;
};
//SIG(1 BFu0i_BFu15i_D) C1{ Fi:0 Fi:15 FL}



static void Test_BFu0i_BFu15i_D()
{
  {
    init_simple_test("BFu0i_BFu15i_D");
    static BFu0i_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_D(Test_BFu0i_BFu15i_D, "BFu0i_BFu15i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_F  {
  unsigned int  :0;
  unsigned int v1:15;
  float v2;
};
//SIG(1 BFu0i_BFu15i_F) C1{ Fi:0 Fi:15 Fi}



static void Test_BFu0i_BFu15i_F()
{
  {
    init_simple_test("BFu0i_BFu15i_F");
    static BFu0i_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_F(Test_BFu0i_BFu15i_F, "BFu0i_BFu15i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_I  {
  unsigned int  :0;
  unsigned int v1:15;
  int v2;
};
//SIG(1 BFu0i_BFu15i_I) C1{ Fi:0 Fi:15 Fi}



static void Test_BFu0i_BFu15i_I()
{
  {
    init_simple_test("BFu0i_BFu15i_I");
    static BFu0i_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_I(Test_BFu0i_BFu15i_I, "BFu0i_BFu15i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Ip  {
  unsigned int  :0;
  unsigned int v1:15;
  int *v2;
};
//SIG(1 BFu0i_BFu15i_Ip) C1{ Fi:0 Fi:15 Fp}



static void Test_BFu0i_BFu15i_Ip()
{
  {
    init_simple_test("BFu0i_BFu15i_Ip");
    static BFu0i_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Ip(Test_BFu0i_BFu15i_Ip, "BFu0i_BFu15i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_L  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu15i_L) C1{ Fi:0 Fi:15 FL}



static void Test_BFu0i_BFu15i_L()
{
  {
    init_simple_test("BFu0i_BFu15i_L");
    static BFu0i_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_L(Test_BFu0i_BFu15i_L, "BFu0i_BFu15i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_S  {
  unsigned int  :0;
  unsigned int v1:15;
  short v2;
};
//SIG(1 BFu0i_BFu15i_S) C1{ Fi:0 Fi:15 Fs}



static void Test_BFu0i_BFu15i_S()
{
  {
    init_simple_test("BFu0i_BFu15i_S");
    static BFu0i_BFu15i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_S(Test_BFu0i_BFu15i_S, "BFu0i_BFu15i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Uc  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu15i_Uc) C1{ Fi:0 Fi:15 Fc}



static void Test_BFu0i_BFu15i_Uc()
{
  {
    init_simple_test("BFu0i_BFu15i_Uc");
    static BFu0i_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Uc(Test_BFu0i_BFu15i_Uc, "BFu0i_BFu15i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Ui  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu15i_Ui) C1{ Fi:0 Fi:15 Fi}



static void Test_BFu0i_BFu15i_Ui()
{
  {
    init_simple_test("BFu0i_BFu15i_Ui");
    static BFu0i_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Ui(Test_BFu0i_BFu15i_Ui, "BFu0i_BFu15i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Ul  {
  unsigned int  :0;
  unsigned int v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu15i_Ul) C1{ Fi:0 Fi:15 FL}



static void Test_BFu0i_BFu15i_Ul()
{
  {
    init_simple_test("BFu0i_BFu15i_Ul");
    static BFu0i_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Ul(Test_BFu0i_BFu15i_Ul, "BFu0i_BFu15i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Us  {
  unsigned int  :0;
  unsigned int v1:15;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu15i_Us) C1{ Fi:0 Fi:15 Fs}



static void Test_BFu0i_BFu15i_Us()
{
  {
    init_simple_test("BFu0i_BFu15i_Us");
    static BFu0i_BFu15i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Us(Test_BFu0i_BFu15i_Us, "BFu0i_BFu15i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15i_Vp  {
  unsigned int  :0;
  unsigned int v1:15;
  void *v2;
};
//SIG(1 BFu0i_BFu15i_Vp) C1{ Fi:0 Fi:15 Fp}



static void Test_BFu0i_BFu15i_Vp()
{
  {
    init_simple_test("BFu0i_BFu15i_Vp");
    static BFu0i_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15i_Vp(Test_BFu0i_BFu15i_Vp, "BFu0i_BFu15i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll  {
  unsigned int  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0i_BFu15ll) C1{ Fi:0 FL:15}



static void Test_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu15ll");
    static BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll(Test_BFu0i_BFu15ll, "BFu0i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu0c  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu15ll_BFu0c) C1{ Fi:0 FL:15 Fc:0}



static void Test_BFu0i_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu0c");
    static BFu0i_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu0c(Test_BFu0i_BFu15ll_BFu0c, "BFu0i_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu0i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu15ll_BFu0i) C1{ Fi:0 FL:15 Fi:0}



static void Test_BFu0i_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu0i");
    static BFu0i_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu0i(Test_BFu0i_BFu15ll_BFu0i, "BFu0i_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu0ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu15ll_BFu0ll) C1{ Fi:0 FL:15 FL:0}



static void Test_BFu0i_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu0ll");
    static BFu0i_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu0ll(Test_BFu0i_BFu15ll_BFu0ll, "BFu0i_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu0s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu15ll_BFu0s) C1{ Fi:0 FL:15 Fs:0}



static void Test_BFu0i_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu0s");
    static BFu0i_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu0s(Test_BFu0i_BFu15ll_BFu0s, "BFu0i_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu15i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu15ll_BFu15i) C1{ Fi:0 FL:15 Fi:15}



static void Test_BFu0i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu15i");
    static BFu0i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu15i(Test_BFu0i_BFu15ll_BFu15i, "BFu0i_BFu15ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu15ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu15ll_BFu15ll) C1{ Fi:0 FL:15 FL:15}



static void Test_BFu0i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu15ll");
    static BFu0i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu15ll(Test_BFu0i_BFu15ll_BFu15ll, "BFu0i_BFu15ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu15s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu15ll_BFu15s) C1{ Fi:0 FL:15 Fs:15}



static void Test_BFu0i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu15s");
    static BFu0i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu15s(Test_BFu0i_BFu15ll_BFu15s, "BFu0i_BFu15ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu16i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu15ll_BFu16i) C1{ Fi:0 FL:15 Fi:16}



static void Test_BFu0i_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu16i");
    static BFu0i_BFu15ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu16i(Test_BFu0i_BFu15ll_BFu16i, "BFu0i_BFu15ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu16ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu15ll_BFu16ll) C1{ Fi:0 FL:15 FL:16}



static void Test_BFu0i_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu16ll");
    static BFu0i_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu16ll(Test_BFu0i_BFu15ll_BFu16ll, "BFu0i_BFu15ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu16s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu15ll_BFu16s) C1{ Fi:0 FL:15 Fs:16}



static void Test_BFu0i_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu16s");
    static BFu0i_BFu15ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu15ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu16s(Test_BFu0i_BFu15ll_BFu16s, "BFu0i_BFu15ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu17i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu15ll_BFu17i) C1{ Fi:0 FL:15 Fi:17}



static void Test_BFu0i_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu17i");
    static BFu0i_BFu15ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu17i(Test_BFu0i_BFu15ll_BFu17i, "BFu0i_BFu15ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu17ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu15ll_BFu17ll) C1{ Fi:0 FL:15 FL:17}



static void Test_BFu0i_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu17ll");
    static BFu0i_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu17ll(Test_BFu0i_BFu15ll_BFu17ll, "BFu0i_BFu15ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu1c  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu15ll_BFu1c) C1{ Fi:0 FL:15 Fc:1}



static void Test_BFu0i_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu1c");
    static BFu0i_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu1c(Test_BFu0i_BFu15ll_BFu1c, "BFu0i_BFu15ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu1i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu15ll_BFu1i) C1{ Fi:0 FL:15 Fi:1}



static void Test_BFu0i_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu1i");
    static BFu0i_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu1i(Test_BFu0i_BFu15ll_BFu1i, "BFu0i_BFu15ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu1ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu15ll_BFu1ll) C1{ Fi:0 FL:15 FL:1}



static void Test_BFu0i_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu1ll");
    static BFu0i_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu1ll(Test_BFu0i_BFu15ll_BFu1ll, "BFu0i_BFu15ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu1s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu15ll_BFu1s) C1{ Fi:0 FL:15 Fs:1}



static void Test_BFu0i_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu1s");
    static BFu0i_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu1s(Test_BFu0i_BFu15ll_BFu1s, "BFu0i_BFu15ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu31i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu15ll_BFu31i) C1{ Fi:0 FL:15 Fi:31}



static void Test_BFu0i_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu31i");
    static BFu0i_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu15ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu31i(Test_BFu0i_BFu15ll_BFu31i, "BFu0i_BFu15ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu31ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu15ll_BFu31ll) C1{ Fi:0 FL:15 FL:31}



static void Test_BFu0i_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu31ll");
    static BFu0i_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0i_BFu15ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu31ll(Test_BFu0i_BFu15ll_BFu31ll, "BFu0i_BFu15ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu32i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu15ll_BFu32i) C1{ Fi:0 FL:15 Fi:32}



static void Test_BFu0i_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu32i");
    static BFu0i_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu15ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu32i(Test_BFu0i_BFu15ll_BFu32i, "BFu0i_BFu15ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu32ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu15ll_BFu32ll) C1{ Fi:0 FL:15 FL:32}



static void Test_BFu0i_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu32ll");
    static BFu0i_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0i_BFu15ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu32ll(Test_BFu0i_BFu15ll_BFu32ll, "BFu0i_BFu15ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu33  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu15ll_BFu33) C1{ Fi:0 FL:15 FL:33}



static void Test_BFu0i_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu33");
    static BFu0i_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0i_BFu15ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu33(Test_BFu0i_BFu15ll_BFu33, "BFu0i_BFu15ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu7c  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu15ll_BFu7c) C1{ Fi:0 FL:15 Fc:7}



static void Test_BFu0i_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu7c");
    static BFu0i_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu7c(Test_BFu0i_BFu15ll_BFu7c, "BFu0i_BFu15ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu7i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu15ll_BFu7i) C1{ Fi:0 FL:15 Fi:7}



static void Test_BFu0i_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu7i");
    static BFu0i_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu7i(Test_BFu0i_BFu15ll_BFu7i, "BFu0i_BFu15ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu7ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu15ll_BFu7ll) C1{ Fi:0 FL:15 FL:7}



static void Test_BFu0i_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu7ll");
    static BFu0i_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu7ll(Test_BFu0i_BFu15ll_BFu7ll, "BFu0i_BFu15ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu7s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu15ll_BFu7s) C1{ Fi:0 FL:15 Fs:7}



static void Test_BFu0i_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu7s");
    static BFu0i_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu7s(Test_BFu0i_BFu15ll_BFu7s, "BFu0i_BFu15ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu8c  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu15ll_BFu8c) C1{ Fi:0 FL:15 Fc:8}



static void Test_BFu0i_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu8c");
    static BFu0i_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu8c(Test_BFu0i_BFu15ll_BFu8c, "BFu0i_BFu15ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu8i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu15ll_BFu8i) C1{ Fi:0 FL:15 Fi:8}



static void Test_BFu0i_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu8i");
    static BFu0i_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu8i(Test_BFu0i_BFu15ll_BFu8i, "BFu0i_BFu15ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu8ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu15ll_BFu8ll) C1{ Fi:0 FL:15 FL:8}



static void Test_BFu0i_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu8ll");
    static BFu0i_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu8ll(Test_BFu0i_BFu15ll_BFu8ll, "BFu0i_BFu15ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu8s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu15ll_BFu8s) C1{ Fi:0 FL:15 Fs:8}



static void Test_BFu0i_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu8s");
    static BFu0i_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu8s(Test_BFu0i_BFu15ll_BFu8s, "BFu0i_BFu15ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu9i  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu15ll_BFu9i) C1{ Fi:0 FL:15 Fi:9}



static void Test_BFu0i_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu9i");
    static BFu0i_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu9i(Test_BFu0i_BFu15ll_BFu9i, "BFu0i_BFu15ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu9ll  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu15ll_BFu9ll) C1{ Fi:0 FL:15 FL:9}



static void Test_BFu0i_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu9ll");
    static BFu0i_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu9ll(Test_BFu0i_BFu15ll_BFu9ll, "BFu0i_BFu15ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_BFu9s  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu15ll_BFu9s) C1{ Fi:0 FL:15 Fs:9}



static void Test_BFu0i_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu15ll_BFu9s");
    static BFu0i_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu15ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_BFu9s(Test_BFu0i_BFu15ll_BFu9s, "BFu0i_BFu15ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_C  {
  unsigned int  :0;
  __tsu64 v1:15;
  char v2;
};
//SIG(1 BFu0i_BFu15ll_C) C1{ Fi:0 FL:15 Fc}



static void Test_BFu0i_BFu15ll_C()
{
  {
    init_simple_test("BFu0i_BFu15ll_C");
    static BFu0i_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_C(Test_BFu0i_BFu15ll_C, "BFu0i_BFu15ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_D  {
  unsigned int  :0;
  __tsu64 v1:15;
  double v2;
};
//SIG(1 BFu0i_BFu15ll_D) C1{ Fi:0 FL:15 FL}



static void Test_BFu0i_BFu15ll_D()
{
  {
    init_simple_test("BFu0i_BFu15ll_D");
    static BFu0i_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_D(Test_BFu0i_BFu15ll_D, "BFu0i_BFu15ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_F  {
  unsigned int  :0;
  __tsu64 v1:15;
  float v2;
};
//SIG(1 BFu0i_BFu15ll_F) C1{ Fi:0 FL:15 Fi}



static void Test_BFu0i_BFu15ll_F()
{
  {
    init_simple_test("BFu0i_BFu15ll_F");
    static BFu0i_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_F(Test_BFu0i_BFu15ll_F, "BFu0i_BFu15ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_I  {
  unsigned int  :0;
  __tsu64 v1:15;
  int v2;
};
//SIG(1 BFu0i_BFu15ll_I) C1{ Fi:0 FL:15 Fi}



static void Test_BFu0i_BFu15ll_I()
{
  {
    init_simple_test("BFu0i_BFu15ll_I");
    static BFu0i_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_I(Test_BFu0i_BFu15ll_I, "BFu0i_BFu15ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Ip  {
  unsigned int  :0;
  __tsu64 v1:15;
  int *v2;
};
//SIG(1 BFu0i_BFu15ll_Ip) C1{ Fi:0 FL:15 Fp}



static void Test_BFu0i_BFu15ll_Ip()
{
  {
    init_simple_test("BFu0i_BFu15ll_Ip");
    static BFu0i_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Ip(Test_BFu0i_BFu15ll_Ip, "BFu0i_BFu15ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_L  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu15ll_L) C1{ Fi:0 FL:15 FL}



static void Test_BFu0i_BFu15ll_L()
{
  {
    init_simple_test("BFu0i_BFu15ll_L");
    static BFu0i_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_L(Test_BFu0i_BFu15ll_L, "BFu0i_BFu15ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_S  {
  unsigned int  :0;
  __tsu64 v1:15;
  short v2;
};
//SIG(1 BFu0i_BFu15ll_S) C1{ Fi:0 FL:15 Fs}



static void Test_BFu0i_BFu15ll_S()
{
  {
    init_simple_test("BFu0i_BFu15ll_S");
    static BFu0i_BFu15ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_S(Test_BFu0i_BFu15ll_S, "BFu0i_BFu15ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Uc  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu15ll_Uc) C1{ Fi:0 FL:15 Fc}



static void Test_BFu0i_BFu15ll_Uc()
{
  {
    init_simple_test("BFu0i_BFu15ll_Uc");
    static BFu0i_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Uc(Test_BFu0i_BFu15ll_Uc, "BFu0i_BFu15ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Ui  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu15ll_Ui) C1{ Fi:0 FL:15 Fi}



static void Test_BFu0i_BFu15ll_Ui()
{
  {
    init_simple_test("BFu0i_BFu15ll_Ui");
    static BFu0i_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Ui(Test_BFu0i_BFu15ll_Ui, "BFu0i_BFu15ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Ul  {
  unsigned int  :0;
  __tsu64 v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu15ll_Ul) C1{ Fi:0 FL:15 FL}



static void Test_BFu0i_BFu15ll_Ul()
{
  {
    init_simple_test("BFu0i_BFu15ll_Ul");
    static BFu0i_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Ul(Test_BFu0i_BFu15ll_Ul, "BFu0i_BFu15ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Us  {
  unsigned int  :0;
  __tsu64 v1:15;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu15ll_Us) C1{ Fi:0 FL:15 Fs}



static void Test_BFu0i_BFu15ll_Us()
{
  {
    init_simple_test("BFu0i_BFu15ll_Us");
    static BFu0i_BFu15ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Us(Test_BFu0i_BFu15ll_Us, "BFu0i_BFu15ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15ll_Vp  {
  unsigned int  :0;
  __tsu64 v1:15;
  void *v2;
};
//SIG(1 BFu0i_BFu15ll_Vp) C1{ Fi:0 FL:15 Fp}



static void Test_BFu0i_BFu15ll_Vp()
{
  {
    init_simple_test("BFu0i_BFu15ll_Vp");
    static BFu0i_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15ll_Vp(Test_BFu0i_BFu15ll_Vp, "BFu0i_BFu15ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s  {
  unsigned int  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0i_BFu15s) C1{ Fi:0 Fs:15}



static void Test_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu15s");
    static BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s(Test_BFu0i_BFu15s, "BFu0i_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu0c  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu15s_BFu0c) C1{ Fi:0 Fs:15 Fc:0}



static void Test_BFu0i_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu0c");
    static BFu0i_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu0c(Test_BFu0i_BFu15s_BFu0c, "BFu0i_BFu15s_BFu0c", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu0i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu15s_BFu0i) C1{ Fi:0 Fs:15 Fi:0}



static void Test_BFu0i_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu0i");
    static BFu0i_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu0i(Test_BFu0i_BFu15s_BFu0i, "BFu0i_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu0ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu15s_BFu0ll) C1{ Fi:0 Fs:15 FL:0}



static void Test_BFu0i_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu0ll");
    static BFu0i_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu0ll(Test_BFu0i_BFu15s_BFu0ll, "BFu0i_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu0s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu15s_BFu0s) C1{ Fi:0 Fs:15 Fs:0}



static void Test_BFu0i_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu0s");
    static BFu0i_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu0s(Test_BFu0i_BFu15s_BFu0s, "BFu0i_BFu15s_BFu0s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu15i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu15s_BFu15i) C1{ Fi:0 Fs:15 Fi:15}



static void Test_BFu0i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu15i");
    static BFu0i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu15i(Test_BFu0i_BFu15s_BFu15i, "BFu0i_BFu15s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu15ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu15s_BFu15ll) C1{ Fi:0 Fs:15 FL:15}



static void Test_BFu0i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu15ll");
    static BFu0i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu15ll(Test_BFu0i_BFu15s_BFu15ll, "BFu0i_BFu15s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu15s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu15s_BFu15s) C1{ Fi:0 Fs:15 Fs:15}



static void Test_BFu0i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu15s");
    static BFu0i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu15s(Test_BFu0i_BFu15s_BFu15s, "BFu0i_BFu15s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu16i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu15s_BFu16i) C1{ Fi:0 Fs:15 Fi:16}



static void Test_BFu0i_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu16i");
    static BFu0i_BFu15s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu16i(Test_BFu0i_BFu15s_BFu16i, "BFu0i_BFu15s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu16ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu15s_BFu16ll) C1{ Fi:0 Fs:15 FL:16}



static void Test_BFu0i_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu16ll");
    static BFu0i_BFu15s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0i_BFu15s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu16ll(Test_BFu0i_BFu15s_BFu16ll, "BFu0i_BFu15s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu16s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu15s_BFu16s) C1{ Fi:0 Fs:15 Fs:16}



static void Test_BFu0i_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu16s");
    static BFu0i_BFu15s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu15s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu16s(Test_BFu0i_BFu15s_BFu16s, "BFu0i_BFu15s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu17i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu15s_BFu17i) C1{ Fi:0 Fs:15 Fi:17}



static void Test_BFu0i_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu17i");
    static BFu0i_BFu15s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu17i(Test_BFu0i_BFu15s_BFu17i, "BFu0i_BFu15s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu17ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu15s_BFu17ll) C1{ Fi:0 Fs:15 FL:17}



static void Test_BFu0i_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu17ll");
    static BFu0i_BFu15s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0i_BFu15s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu17ll(Test_BFu0i_BFu15s_BFu17ll, "BFu0i_BFu15s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu1c  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu15s_BFu1c) C1{ Fi:0 Fs:15 Fc:1}



static void Test_BFu0i_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu1c");
    static BFu0i_BFu15s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu15s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu1c(Test_BFu0i_BFu15s_BFu1c, "BFu0i_BFu15s_BFu1c", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu1i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu15s_BFu1i) C1{ Fi:0 Fs:15 Fi:1}



static void Test_BFu0i_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu1i");
    static BFu0i_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu1i(Test_BFu0i_BFu15s_BFu1i, "BFu0i_BFu15s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu1ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu15s_BFu1ll) C1{ Fi:0 Fs:15 FL:1}



static void Test_BFu0i_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu1ll");
    static BFu0i_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu1ll(Test_BFu0i_BFu15s_BFu1ll, "BFu0i_BFu15s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu1s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu15s_BFu1s) C1{ Fi:0 Fs:15 Fs:1}



static void Test_BFu0i_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu1s");
    static BFu0i_BFu15s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu15s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0i_BFu15s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu1s(Test_BFu0i_BFu15s_BFu1s, "BFu0i_BFu15s_BFu1s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu31i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu15s_BFu31i) C1{ Fi:0 Fs:15 Fi:31}



static void Test_BFu0i_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu31i");
    static BFu0i_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu15s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu31i(Test_BFu0i_BFu15s_BFu31i, "BFu0i_BFu15s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu31ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu15s_BFu31ll) C1{ Fi:0 Fs:15 FL:31}



static void Test_BFu0i_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu31ll");
    static BFu0i_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0i_BFu15s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu31ll(Test_BFu0i_BFu15s_BFu31ll, "BFu0i_BFu15s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu32i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu15s_BFu32i) C1{ Fi:0 Fs:15 Fi:32}



static void Test_BFu0i_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu32i");
    static BFu0i_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu15s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu32i(Test_BFu0i_BFu15s_BFu32i, "BFu0i_BFu15s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu32ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu15s_BFu32ll) C1{ Fi:0 Fs:15 FL:32}



static void Test_BFu0i_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu32ll");
    static BFu0i_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0i_BFu15s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu32ll(Test_BFu0i_BFu15s_BFu32ll, "BFu0i_BFu15s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu33  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu15s_BFu33) C1{ Fi:0 Fs:15 FL:33}



static void Test_BFu0i_BFu15s_BFu33()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu33");
    static BFu0i_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0i_BFu15s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu33(Test_BFu0i_BFu15s_BFu33, "BFu0i_BFu15s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu7c  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu15s_BFu7c) C1{ Fi:0 Fs:15 Fc:7}



static void Test_BFu0i_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu7c");
    static BFu0i_BFu15s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu7c(Test_BFu0i_BFu15s_BFu7c, "BFu0i_BFu15s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu7i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu15s_BFu7i) C1{ Fi:0 Fs:15 Fi:7}



static void Test_BFu0i_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu7i");
    static BFu0i_BFu15s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu7i(Test_BFu0i_BFu15s_BFu7i, "BFu0i_BFu15s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu7ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu15s_BFu7ll) C1{ Fi:0 Fs:15 FL:7}



static void Test_BFu0i_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu7ll");
    static BFu0i_BFu15s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0i_BFu15s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu7ll(Test_BFu0i_BFu15s_BFu7ll, "BFu0i_BFu15s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu7s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu15s_BFu7s) C1{ Fi:0 Fs:15 Fs:7}



static void Test_BFu0i_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu7s");
    static BFu0i_BFu15s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu15s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu7s(Test_BFu0i_BFu15s_BFu7s, "BFu0i_BFu15s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu8c  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu15s_BFu8c) C1{ Fi:0 Fs:15 Fc:8}



static void Test_BFu0i_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu8c");
    static BFu0i_BFu15s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu8c(Test_BFu0i_BFu15s_BFu8c, "BFu0i_BFu15s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu8i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu15s_BFu8i) C1{ Fi:0 Fs:15 Fi:8}



static void Test_BFu0i_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu8i");
    static BFu0i_BFu15s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu8i(Test_BFu0i_BFu15s_BFu8i, "BFu0i_BFu15s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu8ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu15s_BFu8ll) C1{ Fi:0 Fs:15 FL:8}



static void Test_BFu0i_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu8ll");
    static BFu0i_BFu15s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0i_BFu15s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu8ll(Test_BFu0i_BFu15s_BFu8ll, "BFu0i_BFu15s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu8s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu15s_BFu8s) C1{ Fi:0 Fs:15 Fs:8}



static void Test_BFu0i_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu8s");
    static BFu0i_BFu15s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu15s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu8s(Test_BFu0i_BFu15s_BFu8s, "BFu0i_BFu15s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu9i  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu15s_BFu9i) C1{ Fi:0 Fs:15 Fi:9}



static void Test_BFu0i_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu9i");
    static BFu0i_BFu15s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu9i(Test_BFu0i_BFu15s_BFu9i, "BFu0i_BFu15s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu9ll  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu15s_BFu9ll) C1{ Fi:0 Fs:15 FL:9}



static void Test_BFu0i_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu9ll");
    static BFu0i_BFu15s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0i_BFu15s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu9ll(Test_BFu0i_BFu15s_BFu9ll, "BFu0i_BFu15s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_BFu9s  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu15s_BFu9s) C1{ Fi:0 Fs:15 Fs:9}



static void Test_BFu0i_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu15s_BFu9s");
    static BFu0i_BFu15s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu15s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_BFu9s(Test_BFu0i_BFu15s_BFu9s, "BFu0i_BFu15s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_C  {
  unsigned int  :0;
  unsigned short v1:15;
  char v2;
};
//SIG(1 BFu0i_BFu15s_C) C1{ Fi:0 Fs:15 Fc}



static void Test_BFu0i_BFu15s_C()
{
  {
    init_simple_test("BFu0i_BFu15s_C");
    static BFu0i_BFu15s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_C(Test_BFu0i_BFu15s_C, "BFu0i_BFu15s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_D  {
  unsigned int  :0;
  unsigned short v1:15;
  double v2;
};
//SIG(1 BFu0i_BFu15s_D) C1{ Fi:0 Fs:15 FL}



static void Test_BFu0i_BFu15s_D()
{
  {
    init_simple_test("BFu0i_BFu15s_D");
    static BFu0i_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_D(Test_BFu0i_BFu15s_D, "BFu0i_BFu15s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_F  {
  unsigned int  :0;
  unsigned short v1:15;
  float v2;
};
//SIG(1 BFu0i_BFu15s_F) C1{ Fi:0 Fs:15 Fi}



static void Test_BFu0i_BFu15s_F()
{
  {
    init_simple_test("BFu0i_BFu15s_F");
    static BFu0i_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_F(Test_BFu0i_BFu15s_F, "BFu0i_BFu15s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_I  {
  unsigned int  :0;
  unsigned short v1:15;
  int v2;
};
//SIG(1 BFu0i_BFu15s_I) C1{ Fi:0 Fs:15 Fi}



static void Test_BFu0i_BFu15s_I()
{
  {
    init_simple_test("BFu0i_BFu15s_I");
    static BFu0i_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_I(Test_BFu0i_BFu15s_I, "BFu0i_BFu15s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Ip  {
  unsigned int  :0;
  unsigned short v1:15;
  int *v2;
};
//SIG(1 BFu0i_BFu15s_Ip) C1{ Fi:0 Fs:15 Fp}



static void Test_BFu0i_BFu15s_Ip()
{
  {
    init_simple_test("BFu0i_BFu15s_Ip");
    static BFu0i_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Ip(Test_BFu0i_BFu15s_Ip, "BFu0i_BFu15s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_L  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu15s_L) C1{ Fi:0 Fs:15 FL}



static void Test_BFu0i_BFu15s_L()
{
  {
    init_simple_test("BFu0i_BFu15s_L");
    static BFu0i_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_L(Test_BFu0i_BFu15s_L, "BFu0i_BFu15s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_S  {
  unsigned int  :0;
  unsigned short v1:15;
  short v2;
};
//SIG(1 BFu0i_BFu15s_S) C1{ Fi:0 Fs:15 Fs}



static void Test_BFu0i_BFu15s_S()
{
  {
    init_simple_test("BFu0i_BFu15s_S");
    static BFu0i_BFu15s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_S(Test_BFu0i_BFu15s_S, "BFu0i_BFu15s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Uc  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu15s_Uc) C1{ Fi:0 Fs:15 Fc}



static void Test_BFu0i_BFu15s_Uc()
{
  {
    init_simple_test("BFu0i_BFu15s_Uc");
    static BFu0i_BFu15s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Uc(Test_BFu0i_BFu15s_Uc, "BFu0i_BFu15s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Ui  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu15s_Ui) C1{ Fi:0 Fs:15 Fi}



static void Test_BFu0i_BFu15s_Ui()
{
  {
    init_simple_test("BFu0i_BFu15s_Ui");
    static BFu0i_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu15s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Ui(Test_BFu0i_BFu15s_Ui, "BFu0i_BFu15s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Ul  {
  unsigned int  :0;
  unsigned short v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu15s_Ul) C1{ Fi:0 Fs:15 FL}



static void Test_BFu0i_BFu15s_Ul()
{
  {
    init_simple_test("BFu0i_BFu15s_Ul");
    static BFu0i_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Ul(Test_BFu0i_BFu15s_Ul, "BFu0i_BFu15s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Us  {
  unsigned int  :0;
  unsigned short v1:15;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu15s_Us) C1{ Fi:0 Fs:15 Fs}



static void Test_BFu0i_BFu15s_Us()
{
  {
    init_simple_test("BFu0i_BFu15s_Us");
    static BFu0i_BFu15s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu15s_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu15s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Us(Test_BFu0i_BFu15s_Us, "BFu0i_BFu15s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu15s_Vp  {
  unsigned int  :0;
  unsigned short v1:15;
  void *v2;
};
//SIG(1 BFu0i_BFu15s_Vp) C1{ Fi:0 Fs:15 Fp}



static void Test_BFu0i_BFu15s_Vp()
{
  {
    init_simple_test("BFu0i_BFu15s_Vp");
    static BFu0i_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0i_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu15s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu15s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu15s_Vp(Test_BFu0i_BFu15s_Vp, "BFu0i_BFu15s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i  {
  unsigned int  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0i_BFu16i) C1{ Fi:0 Fi:16}



static void Test_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu16i");
    static BFu0i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i(Test_BFu0i_BFu16i, "BFu0i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu0c  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu16i_BFu0c) C1{ Fi:0 Fi:16 Fc:0}



static void Test_BFu0i_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu0c");
    static BFu0i_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu0c(Test_BFu0i_BFu16i_BFu0c, "BFu0i_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu0i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu16i_BFu0i) C1{ Fi:0 Fi:16 Fi:0}



static void Test_BFu0i_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu0i");
    static BFu0i_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu0i(Test_BFu0i_BFu16i_BFu0i, "BFu0i_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu0ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu16i_BFu0ll) C1{ Fi:0 Fi:16 FL:0}



static void Test_BFu0i_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu0ll");
    static BFu0i_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu0ll(Test_BFu0i_BFu16i_BFu0ll, "BFu0i_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu0s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu16i_BFu0s) C1{ Fi:0 Fi:16 Fs:0}



static void Test_BFu0i_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu0s");
    static BFu0i_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu0s(Test_BFu0i_BFu16i_BFu0s, "BFu0i_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu15i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu16i_BFu15i) C1{ Fi:0 Fi:16 Fi:15}



static void Test_BFu0i_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu15i");
    static BFu0i_BFu16i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu15i(Test_BFu0i_BFu16i_BFu15i, "BFu0i_BFu16i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu15ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu16i_BFu15ll) C1{ Fi:0 Fi:16 FL:15}



static void Test_BFu0i_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu15ll");
    static BFu0i_BFu16i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu15ll(Test_BFu0i_BFu16i_BFu15ll, "BFu0i_BFu16i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu15s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu16i_BFu15s) C1{ Fi:0 Fi:16 Fs:15}



static void Test_BFu0i_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu15s");
    static BFu0i_BFu16i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu15s(Test_BFu0i_BFu16i_BFu15s, "BFu0i_BFu16i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu16i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu16i_BFu16i) C1{ Fi:0 Fi:16 Fi:16}



static void Test_BFu0i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu16i");
    static BFu0i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu16i(Test_BFu0i_BFu16i_BFu16i, "BFu0i_BFu16i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu16ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu16i_BFu16ll) C1{ Fi:0 Fi:16 FL:16}



static void Test_BFu0i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu16ll");
    static BFu0i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu16ll(Test_BFu0i_BFu16i_BFu16ll, "BFu0i_BFu16i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu16s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu16i_BFu16s) C1{ Fi:0 Fi:16 Fs:16}



static void Test_BFu0i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu16s");
    static BFu0i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu16s(Test_BFu0i_BFu16i_BFu16s, "BFu0i_BFu16i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu17i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu16i_BFu17i) C1{ Fi:0 Fi:16 Fi:17}



static void Test_BFu0i_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu17i");
    static BFu0i_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu17i(Test_BFu0i_BFu16i_BFu17i, "BFu0i_BFu16i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu17ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu16i_BFu17ll) C1{ Fi:0 Fi:16 FL:17}



static void Test_BFu0i_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu17ll");
    static BFu0i_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu17ll(Test_BFu0i_BFu16i_BFu17ll, "BFu0i_BFu16i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu1c  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu16i_BFu1c) C1{ Fi:0 Fi:16 Fc:1}



static void Test_BFu0i_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu1c");
    static BFu0i_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu1c(Test_BFu0i_BFu16i_BFu1c, "BFu0i_BFu16i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu1i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu16i_BFu1i) C1{ Fi:0 Fi:16 Fi:1}



static void Test_BFu0i_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu1i");
    static BFu0i_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu1i(Test_BFu0i_BFu16i_BFu1i, "BFu0i_BFu16i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu1ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu16i_BFu1ll) C1{ Fi:0 Fi:16 FL:1}



static void Test_BFu0i_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu1ll");
    static BFu0i_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu1ll(Test_BFu0i_BFu16i_BFu1ll, "BFu0i_BFu16i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu1s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu16i_BFu1s) C1{ Fi:0 Fi:16 Fs:1}



static void Test_BFu0i_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu1s");
    static BFu0i_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu1s(Test_BFu0i_BFu16i_BFu1s, "BFu0i_BFu16i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu31i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu16i_BFu31i) C1{ Fi:0 Fi:16 Fi:31}



static void Test_BFu0i_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu31i");
    static BFu0i_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu31i(Test_BFu0i_BFu16i_BFu31i, "BFu0i_BFu16i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu31ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu16i_BFu31ll) C1{ Fi:0 Fi:16 FL:31}



static void Test_BFu0i_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu31ll");
    static BFu0i_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu31ll(Test_BFu0i_BFu16i_BFu31ll, "BFu0i_BFu16i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu32i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu16i_BFu32i) C1{ Fi:0 Fi:16 Fi:32}



static void Test_BFu0i_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu32i");
    static BFu0i_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu32i(Test_BFu0i_BFu16i_BFu32i, "BFu0i_BFu16i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu32ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu16i_BFu32ll) C1{ Fi:0 Fi:16 FL:32}



static void Test_BFu0i_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu32ll");
    static BFu0i_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu32ll(Test_BFu0i_BFu16i_BFu32ll, "BFu0i_BFu16i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu33  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu16i_BFu33) C1{ Fi:0 Fi:16 FL:33}



static void Test_BFu0i_BFu16i_BFu33()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu33");
    static BFu0i_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu16i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu33(Test_BFu0i_BFu16i_BFu33, "BFu0i_BFu16i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu7c  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu16i_BFu7c) C1{ Fi:0 Fi:16 Fc:7}



static void Test_BFu0i_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu7c");
    static BFu0i_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu7c(Test_BFu0i_BFu16i_BFu7c, "BFu0i_BFu16i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu7i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu16i_BFu7i) C1{ Fi:0 Fi:16 Fi:7}



static void Test_BFu0i_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu7i");
    static BFu0i_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu7i(Test_BFu0i_BFu16i_BFu7i, "BFu0i_BFu16i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu7ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu16i_BFu7ll) C1{ Fi:0 Fi:16 FL:7}



static void Test_BFu0i_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu7ll");
    static BFu0i_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu7ll(Test_BFu0i_BFu16i_BFu7ll, "BFu0i_BFu16i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu7s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu16i_BFu7s) C1{ Fi:0 Fi:16 Fs:7}



static void Test_BFu0i_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu7s");
    static BFu0i_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu7s(Test_BFu0i_BFu16i_BFu7s, "BFu0i_BFu16i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu8c  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu16i_BFu8c) C1{ Fi:0 Fi:16 Fc:8}



static void Test_BFu0i_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu8c");
    static BFu0i_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu8c(Test_BFu0i_BFu16i_BFu8c, "BFu0i_BFu16i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu8i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu16i_BFu8i) C1{ Fi:0 Fi:16 Fi:8}



static void Test_BFu0i_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu8i");
    static BFu0i_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu8i(Test_BFu0i_BFu16i_BFu8i, "BFu0i_BFu16i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu8ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu16i_BFu8ll) C1{ Fi:0 Fi:16 FL:8}



static void Test_BFu0i_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu8ll");
    static BFu0i_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu8ll(Test_BFu0i_BFu16i_BFu8ll, "BFu0i_BFu16i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu8s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu16i_BFu8s) C1{ Fi:0 Fi:16 Fs:8}



static void Test_BFu0i_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu8s");
    static BFu0i_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu8s(Test_BFu0i_BFu16i_BFu8s, "BFu0i_BFu16i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu9i  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu16i_BFu9i) C1{ Fi:0 Fi:16 Fi:9}



static void Test_BFu0i_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu9i");
    static BFu0i_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu9i(Test_BFu0i_BFu16i_BFu9i, "BFu0i_BFu16i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu9ll  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu16i_BFu9ll) C1{ Fi:0 Fi:16 FL:9}



static void Test_BFu0i_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu9ll");
    static BFu0i_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu9ll(Test_BFu0i_BFu16i_BFu9ll, "BFu0i_BFu16i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_BFu9s  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu16i_BFu9s) C1{ Fi:0 Fi:16 Fs:9}



static void Test_BFu0i_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu16i_BFu9s");
    static BFu0i_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_BFu9s(Test_BFu0i_BFu16i_BFu9s, "BFu0i_BFu16i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_C  {
  unsigned int  :0;
  unsigned int v1:16;
  char v2;
};
//SIG(1 BFu0i_BFu16i_C) C1{ Fi:0 Fi:16 Fc}



static void Test_BFu0i_BFu16i_C()
{
  {
    init_simple_test("BFu0i_BFu16i_C");
    static BFu0i_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_C(Test_BFu0i_BFu16i_C, "BFu0i_BFu16i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_D  {
  unsigned int  :0;
  unsigned int v1:16;
  double v2;
};
//SIG(1 BFu0i_BFu16i_D) C1{ Fi:0 Fi:16 FL}



static void Test_BFu0i_BFu16i_D()
{
  {
    init_simple_test("BFu0i_BFu16i_D");
    static BFu0i_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_D(Test_BFu0i_BFu16i_D, "BFu0i_BFu16i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_F  {
  unsigned int  :0;
  unsigned int v1:16;
  float v2;
};
//SIG(1 BFu0i_BFu16i_F) C1{ Fi:0 Fi:16 Fi}



static void Test_BFu0i_BFu16i_F()
{
  {
    init_simple_test("BFu0i_BFu16i_F");
    static BFu0i_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_F(Test_BFu0i_BFu16i_F, "BFu0i_BFu16i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_I  {
  unsigned int  :0;
  unsigned int v1:16;
  int v2;
};
//SIG(1 BFu0i_BFu16i_I) C1{ Fi:0 Fi:16 Fi}



static void Test_BFu0i_BFu16i_I()
{
  {
    init_simple_test("BFu0i_BFu16i_I");
    static BFu0i_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_I(Test_BFu0i_BFu16i_I, "BFu0i_BFu16i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Ip  {
  unsigned int  :0;
  unsigned int v1:16;
  int *v2;
};
//SIG(1 BFu0i_BFu16i_Ip) C1{ Fi:0 Fi:16 Fp}



static void Test_BFu0i_BFu16i_Ip()
{
  {
    init_simple_test("BFu0i_BFu16i_Ip");
    static BFu0i_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Ip(Test_BFu0i_BFu16i_Ip, "BFu0i_BFu16i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_L  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu16i_L) C1{ Fi:0 Fi:16 FL}



static void Test_BFu0i_BFu16i_L()
{
  {
    init_simple_test("BFu0i_BFu16i_L");
    static BFu0i_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_L(Test_BFu0i_BFu16i_L, "BFu0i_BFu16i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_S  {
  unsigned int  :0;
  unsigned int v1:16;
  short v2;
};
//SIG(1 BFu0i_BFu16i_S) C1{ Fi:0 Fi:16 Fs}



static void Test_BFu0i_BFu16i_S()
{
  {
    init_simple_test("BFu0i_BFu16i_S");
    static BFu0i_BFu16i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_S(Test_BFu0i_BFu16i_S, "BFu0i_BFu16i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Uc  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu16i_Uc) C1{ Fi:0 Fi:16 Fc}



static void Test_BFu0i_BFu16i_Uc()
{
  {
    init_simple_test("BFu0i_BFu16i_Uc");
    static BFu0i_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Uc(Test_BFu0i_BFu16i_Uc, "BFu0i_BFu16i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Ui  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu16i_Ui) C1{ Fi:0 Fi:16 Fi}



static void Test_BFu0i_BFu16i_Ui()
{
  {
    init_simple_test("BFu0i_BFu16i_Ui");
    static BFu0i_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Ui(Test_BFu0i_BFu16i_Ui, "BFu0i_BFu16i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Ul  {
  unsigned int  :0;
  unsigned int v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu16i_Ul) C1{ Fi:0 Fi:16 FL}



static void Test_BFu0i_BFu16i_Ul()
{
  {
    init_simple_test("BFu0i_BFu16i_Ul");
    static BFu0i_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Ul(Test_BFu0i_BFu16i_Ul, "BFu0i_BFu16i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Us  {
  unsigned int  :0;
  unsigned int v1:16;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu16i_Us) C1{ Fi:0 Fi:16 Fs}



static void Test_BFu0i_BFu16i_Us()
{
  {
    init_simple_test("BFu0i_BFu16i_Us");
    static BFu0i_BFu16i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Us(Test_BFu0i_BFu16i_Us, "BFu0i_BFu16i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16i_Vp  {
  unsigned int  :0;
  unsigned int v1:16;
  void *v2;
};
//SIG(1 BFu0i_BFu16i_Vp) C1{ Fi:0 Fi:16 Fp}



static void Test_BFu0i_BFu16i_Vp()
{
  {
    init_simple_test("BFu0i_BFu16i_Vp");
    static BFu0i_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16i_Vp(Test_BFu0i_BFu16i_Vp, "BFu0i_BFu16i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll  {
  unsigned int  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0i_BFu16ll) C1{ Fi:0 FL:16}



static void Test_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu16ll");
    static BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll(Test_BFu0i_BFu16ll, "BFu0i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu0c  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu16ll_BFu0c) C1{ Fi:0 FL:16 Fc:0}



static void Test_BFu0i_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu0c");
    static BFu0i_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu0c(Test_BFu0i_BFu16ll_BFu0c, "BFu0i_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu0i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu16ll_BFu0i) C1{ Fi:0 FL:16 Fi:0}



static void Test_BFu0i_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu0i");
    static BFu0i_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu0i(Test_BFu0i_BFu16ll_BFu0i, "BFu0i_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu0ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu16ll_BFu0ll) C1{ Fi:0 FL:16 FL:0}



static void Test_BFu0i_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu0ll");
    static BFu0i_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu0ll(Test_BFu0i_BFu16ll_BFu0ll, "BFu0i_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu0s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu16ll_BFu0s) C1{ Fi:0 FL:16 Fs:0}



static void Test_BFu0i_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu0s");
    static BFu0i_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu0s(Test_BFu0i_BFu16ll_BFu0s, "BFu0i_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu15i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu16ll_BFu15i) C1{ Fi:0 FL:16 Fi:15}



static void Test_BFu0i_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu15i");
    static BFu0i_BFu16ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu15i(Test_BFu0i_BFu16ll_BFu15i, "BFu0i_BFu16ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu15ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu16ll_BFu15ll) C1{ Fi:0 FL:16 FL:15}



static void Test_BFu0i_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu15ll");
    static BFu0i_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu15ll(Test_BFu0i_BFu16ll_BFu15ll, "BFu0i_BFu16ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu15s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu16ll_BFu15s) C1{ Fi:0 FL:16 Fs:15}



static void Test_BFu0i_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu15s");
    static BFu0i_BFu16ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu15s(Test_BFu0i_BFu16ll_BFu15s, "BFu0i_BFu16ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu16i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu16ll_BFu16i) C1{ Fi:0 FL:16 Fi:16}



static void Test_BFu0i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu16i");
    static BFu0i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu16i(Test_BFu0i_BFu16ll_BFu16i, "BFu0i_BFu16ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu16ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu16ll_BFu16ll) C1{ Fi:0 FL:16 FL:16}



static void Test_BFu0i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu16ll");
    static BFu0i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu16ll(Test_BFu0i_BFu16ll_BFu16ll, "BFu0i_BFu16ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu16s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu16ll_BFu16s) C1{ Fi:0 FL:16 Fs:16}



static void Test_BFu0i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu16s");
    static BFu0i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu16s(Test_BFu0i_BFu16ll_BFu16s, "BFu0i_BFu16ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu17i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu16ll_BFu17i) C1{ Fi:0 FL:16 Fi:17}



static void Test_BFu0i_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu17i");
    static BFu0i_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu17i(Test_BFu0i_BFu16ll_BFu17i, "BFu0i_BFu16ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu17ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu16ll_BFu17ll) C1{ Fi:0 FL:16 FL:17}



static void Test_BFu0i_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu17ll");
    static BFu0i_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu17ll(Test_BFu0i_BFu16ll_BFu17ll, "BFu0i_BFu16ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu1c  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu16ll_BFu1c) C1{ Fi:0 FL:16 Fc:1}



static void Test_BFu0i_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu1c");
    static BFu0i_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu1c(Test_BFu0i_BFu16ll_BFu1c, "BFu0i_BFu16ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu1i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu16ll_BFu1i) C1{ Fi:0 FL:16 Fi:1}



static void Test_BFu0i_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu1i");
    static BFu0i_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu1i(Test_BFu0i_BFu16ll_BFu1i, "BFu0i_BFu16ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu1ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu16ll_BFu1ll) C1{ Fi:0 FL:16 FL:1}



static void Test_BFu0i_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu1ll");
    static BFu0i_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu1ll(Test_BFu0i_BFu16ll_BFu1ll, "BFu0i_BFu16ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu1s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu16ll_BFu1s) C1{ Fi:0 FL:16 Fs:1}



static void Test_BFu0i_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu1s");
    static BFu0i_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu1s(Test_BFu0i_BFu16ll_BFu1s, "BFu0i_BFu16ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu31i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu16ll_BFu31i) C1{ Fi:0 FL:16 Fi:31}



static void Test_BFu0i_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu31i");
    static BFu0i_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu31i(Test_BFu0i_BFu16ll_BFu31i, "BFu0i_BFu16ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu31ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu16ll_BFu31ll) C1{ Fi:0 FL:16 FL:31}



static void Test_BFu0i_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu31ll");
    static BFu0i_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu31ll(Test_BFu0i_BFu16ll_BFu31ll, "BFu0i_BFu16ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu32i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu16ll_BFu32i) C1{ Fi:0 FL:16 Fi:32}



static void Test_BFu0i_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu32i");
    static BFu0i_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu32i(Test_BFu0i_BFu16ll_BFu32i, "BFu0i_BFu16ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu32ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu16ll_BFu32ll) C1{ Fi:0 FL:16 FL:32}



static void Test_BFu0i_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu32ll");
    static BFu0i_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu32ll(Test_BFu0i_BFu16ll_BFu32ll, "BFu0i_BFu16ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu33  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu16ll_BFu33) C1{ Fi:0 FL:16 FL:33}



static void Test_BFu0i_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu33");
    static BFu0i_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu16ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu33(Test_BFu0i_BFu16ll_BFu33, "BFu0i_BFu16ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu7c  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu16ll_BFu7c) C1{ Fi:0 FL:16 Fc:7}



static void Test_BFu0i_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu7c");
    static BFu0i_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu7c(Test_BFu0i_BFu16ll_BFu7c, "BFu0i_BFu16ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu7i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu16ll_BFu7i) C1{ Fi:0 FL:16 Fi:7}



static void Test_BFu0i_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu7i");
    static BFu0i_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu7i(Test_BFu0i_BFu16ll_BFu7i, "BFu0i_BFu16ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu7ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu16ll_BFu7ll) C1{ Fi:0 FL:16 FL:7}



static void Test_BFu0i_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu7ll");
    static BFu0i_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu7ll(Test_BFu0i_BFu16ll_BFu7ll, "BFu0i_BFu16ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu7s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu16ll_BFu7s) C1{ Fi:0 FL:16 Fs:7}



static void Test_BFu0i_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu7s");
    static BFu0i_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu7s(Test_BFu0i_BFu16ll_BFu7s, "BFu0i_BFu16ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu8c  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu16ll_BFu8c) C1{ Fi:0 FL:16 Fc:8}



static void Test_BFu0i_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu8c");
    static BFu0i_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu8c(Test_BFu0i_BFu16ll_BFu8c, "BFu0i_BFu16ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu8i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu16ll_BFu8i) C1{ Fi:0 FL:16 Fi:8}



static void Test_BFu0i_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu8i");
    static BFu0i_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu8i(Test_BFu0i_BFu16ll_BFu8i, "BFu0i_BFu16ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu8ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu16ll_BFu8ll) C1{ Fi:0 FL:16 FL:8}



static void Test_BFu0i_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu8ll");
    static BFu0i_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu8ll(Test_BFu0i_BFu16ll_BFu8ll, "BFu0i_BFu16ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu8s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu16ll_BFu8s) C1{ Fi:0 FL:16 Fs:8}



static void Test_BFu0i_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu8s");
    static BFu0i_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu8s(Test_BFu0i_BFu16ll_BFu8s, "BFu0i_BFu16ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu9i  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu16ll_BFu9i) C1{ Fi:0 FL:16 Fi:9}



static void Test_BFu0i_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu9i");
    static BFu0i_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu9i(Test_BFu0i_BFu16ll_BFu9i, "BFu0i_BFu16ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu9ll  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu16ll_BFu9ll) C1{ Fi:0 FL:16 FL:9}



static void Test_BFu0i_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu9ll");
    static BFu0i_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu9ll(Test_BFu0i_BFu16ll_BFu9ll, "BFu0i_BFu16ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_BFu9s  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu16ll_BFu9s) C1{ Fi:0 FL:16 Fs:9}



static void Test_BFu0i_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu16ll_BFu9s");
    static BFu0i_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_BFu9s(Test_BFu0i_BFu16ll_BFu9s, "BFu0i_BFu16ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_C  {
  unsigned int  :0;
  __tsu64 v1:16;
  char v2;
};
//SIG(1 BFu0i_BFu16ll_C) C1{ Fi:0 FL:16 Fc}



static void Test_BFu0i_BFu16ll_C()
{
  {
    init_simple_test("BFu0i_BFu16ll_C");
    static BFu0i_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_C(Test_BFu0i_BFu16ll_C, "BFu0i_BFu16ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_D  {
  unsigned int  :0;
  __tsu64 v1:16;
  double v2;
};
//SIG(1 BFu0i_BFu16ll_D) C1{ Fi:0 FL:16 FL}



static void Test_BFu0i_BFu16ll_D()
{
  {
    init_simple_test("BFu0i_BFu16ll_D");
    static BFu0i_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_D(Test_BFu0i_BFu16ll_D, "BFu0i_BFu16ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_F  {
  unsigned int  :0;
  __tsu64 v1:16;
  float v2;
};
//SIG(1 BFu0i_BFu16ll_F) C1{ Fi:0 FL:16 Fi}



static void Test_BFu0i_BFu16ll_F()
{
  {
    init_simple_test("BFu0i_BFu16ll_F");
    static BFu0i_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_F(Test_BFu0i_BFu16ll_F, "BFu0i_BFu16ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_I  {
  unsigned int  :0;
  __tsu64 v1:16;
  int v2;
};
//SIG(1 BFu0i_BFu16ll_I) C1{ Fi:0 FL:16 Fi}



static void Test_BFu0i_BFu16ll_I()
{
  {
    init_simple_test("BFu0i_BFu16ll_I");
    static BFu0i_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_I(Test_BFu0i_BFu16ll_I, "BFu0i_BFu16ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Ip  {
  unsigned int  :0;
  __tsu64 v1:16;
  int *v2;
};
//SIG(1 BFu0i_BFu16ll_Ip) C1{ Fi:0 FL:16 Fp}



static void Test_BFu0i_BFu16ll_Ip()
{
  {
    init_simple_test("BFu0i_BFu16ll_Ip");
    static BFu0i_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Ip(Test_BFu0i_BFu16ll_Ip, "BFu0i_BFu16ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_L  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu16ll_L) C1{ Fi:0 FL:16 FL}



static void Test_BFu0i_BFu16ll_L()
{
  {
    init_simple_test("BFu0i_BFu16ll_L");
    static BFu0i_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_L(Test_BFu0i_BFu16ll_L, "BFu0i_BFu16ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_S  {
  unsigned int  :0;
  __tsu64 v1:16;
  short v2;
};
//SIG(1 BFu0i_BFu16ll_S) C1{ Fi:0 FL:16 Fs}



static void Test_BFu0i_BFu16ll_S()
{
  {
    init_simple_test("BFu0i_BFu16ll_S");
    static BFu0i_BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_S(Test_BFu0i_BFu16ll_S, "BFu0i_BFu16ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Uc  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu16ll_Uc) C1{ Fi:0 FL:16 Fc}



static void Test_BFu0i_BFu16ll_Uc()
{
  {
    init_simple_test("BFu0i_BFu16ll_Uc");
    static BFu0i_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Uc(Test_BFu0i_BFu16ll_Uc, "BFu0i_BFu16ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Ui  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu16ll_Ui) C1{ Fi:0 FL:16 Fi}



static void Test_BFu0i_BFu16ll_Ui()
{
  {
    init_simple_test("BFu0i_BFu16ll_Ui");
    static BFu0i_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Ui(Test_BFu0i_BFu16ll_Ui, "BFu0i_BFu16ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Ul  {
  unsigned int  :0;
  __tsu64 v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu16ll_Ul) C1{ Fi:0 FL:16 FL}



static void Test_BFu0i_BFu16ll_Ul()
{
  {
    init_simple_test("BFu0i_BFu16ll_Ul");
    static BFu0i_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Ul(Test_BFu0i_BFu16ll_Ul, "BFu0i_BFu16ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Us  {
  unsigned int  :0;
  __tsu64 v1:16;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu16ll_Us) C1{ Fi:0 FL:16 Fs}



static void Test_BFu0i_BFu16ll_Us()
{
  {
    init_simple_test("BFu0i_BFu16ll_Us");
    static BFu0i_BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Us(Test_BFu0i_BFu16ll_Us, "BFu0i_BFu16ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16ll_Vp  {
  unsigned int  :0;
  __tsu64 v1:16;
  void *v2;
};
//SIG(1 BFu0i_BFu16ll_Vp) C1{ Fi:0 FL:16 Fp}



static void Test_BFu0i_BFu16ll_Vp()
{
  {
    init_simple_test("BFu0i_BFu16ll_Vp");
    static BFu0i_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16ll_Vp(Test_BFu0i_BFu16ll_Vp, "BFu0i_BFu16ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s  {
  unsigned int  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0i_BFu16s) C1{ Fi:0 Fs:16}



static void Test_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu16s");
    static BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s(Test_BFu0i_BFu16s, "BFu0i_BFu16s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu0c  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu16s_BFu0c) C1{ Fi:0 Fs:16 Fc:0}



static void Test_BFu0i_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu0c");
    static BFu0i_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu0c(Test_BFu0i_BFu16s_BFu0c, "BFu0i_BFu16s_BFu0c", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu0i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu16s_BFu0i) C1{ Fi:0 Fs:16 Fi:0}



static void Test_BFu0i_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu0i");
    static BFu0i_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu0i(Test_BFu0i_BFu16s_BFu0i, "BFu0i_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu0ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu16s_BFu0ll) C1{ Fi:0 Fs:16 FL:0}



static void Test_BFu0i_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu0ll");
    static BFu0i_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu0ll(Test_BFu0i_BFu16s_BFu0ll, "BFu0i_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu0s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu16s_BFu0s) C1{ Fi:0 Fs:16 Fs:0}



static void Test_BFu0i_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu0s");
    static BFu0i_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu0s(Test_BFu0i_BFu16s_BFu0s, "BFu0i_BFu16s_BFu0s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu15i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu16s_BFu15i) C1{ Fi:0 Fs:16 Fi:15}



static void Test_BFu0i_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu15i");
    static BFu0i_BFu16s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu15i(Test_BFu0i_BFu16s_BFu15i, "BFu0i_BFu16s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu15ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu16s_BFu15ll) C1{ Fi:0 Fs:16 FL:15}



static void Test_BFu0i_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu15ll");
    static BFu0i_BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu15ll(Test_BFu0i_BFu16s_BFu15ll, "BFu0i_BFu16s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu15s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu16s_BFu15s) C1{ Fi:0 Fs:16 Fs:15}



static void Test_BFu0i_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu15s");
    static BFu0i_BFu16s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0i_BFu16s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu15s(Test_BFu0i_BFu16s_BFu15s, "BFu0i_BFu16s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu16i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu16s_BFu16i) C1{ Fi:0 Fs:16 Fi:16}



static void Test_BFu0i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu16i");
    static BFu0i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu16i(Test_BFu0i_BFu16s_BFu16i, "BFu0i_BFu16s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu16ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu16s_BFu16ll) C1{ Fi:0 Fs:16 FL:16}



static void Test_BFu0i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu16ll");
    static BFu0i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu16ll(Test_BFu0i_BFu16s_BFu16ll, "BFu0i_BFu16s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu16s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu16s_BFu16s) C1{ Fi:0 Fs:16 Fs:16}



static void Test_BFu0i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu16s");
    static BFu0i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu16s(Test_BFu0i_BFu16s_BFu16s, "BFu0i_BFu16s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu17i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu16s_BFu17i) C1{ Fi:0 Fs:16 Fi:17}



static void Test_BFu0i_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu17i");
    static BFu0i_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu17i(Test_BFu0i_BFu16s_BFu17i, "BFu0i_BFu16s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu17ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu16s_BFu17ll) C1{ Fi:0 Fs:16 FL:17}



static void Test_BFu0i_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu17ll");
    static BFu0i_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu16s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu17ll(Test_BFu0i_BFu16s_BFu17ll, "BFu0i_BFu16s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu1c  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu16s_BFu1c) C1{ Fi:0 Fs:16 Fc:1}



static void Test_BFu0i_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu1c");
    static BFu0i_BFu16s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu1c(Test_BFu0i_BFu16s_BFu1c, "BFu0i_BFu16s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu1i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu16s_BFu1i) C1{ Fi:0 Fs:16 Fi:1}



static void Test_BFu0i_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu1i");
    static BFu0i_BFu16s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu1i(Test_BFu0i_BFu16s_BFu1i, "BFu0i_BFu16s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu1ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu16s_BFu1ll) C1{ Fi:0 Fs:16 FL:1}



static void Test_BFu0i_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu1ll");
    static BFu0i_BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu1ll(Test_BFu0i_BFu16s_BFu1ll, "BFu0i_BFu16s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu1s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu16s_BFu1s) C1{ Fi:0 Fs:16 Fs:1}



static void Test_BFu0i_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu1s");
    static BFu0i_BFu16s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0i_BFu16s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu1s(Test_BFu0i_BFu16s_BFu1s, "BFu0i_BFu16s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu31i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu16s_BFu31i) C1{ Fi:0 Fs:16 Fi:31}



static void Test_BFu0i_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu31i");
    static BFu0i_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu31i(Test_BFu0i_BFu16s_BFu31i, "BFu0i_BFu16s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu31ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu16s_BFu31ll) C1{ Fi:0 Fs:16 FL:31}



static void Test_BFu0i_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu31ll");
    static BFu0i_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu16s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu31ll(Test_BFu0i_BFu16s_BFu31ll, "BFu0i_BFu16s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu32i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu16s_BFu32i) C1{ Fi:0 Fs:16 Fi:32}



static void Test_BFu0i_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu32i");
    static BFu0i_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu32i(Test_BFu0i_BFu16s_BFu32i, "BFu0i_BFu16s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu32ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu16s_BFu32ll) C1{ Fi:0 Fs:16 FL:32}



static void Test_BFu0i_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu32ll");
    static BFu0i_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu16s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu32ll(Test_BFu0i_BFu16s_BFu32ll, "BFu0i_BFu16s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu33  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu16s_BFu33) C1{ Fi:0 Fs:16 FL:33}



static void Test_BFu0i_BFu16s_BFu33()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu33");
    static BFu0i_BFu16s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0i_BFu16s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu33(Test_BFu0i_BFu16s_BFu33, "BFu0i_BFu16s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu7c  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu16s_BFu7c) C1{ Fi:0 Fs:16 Fc:7}



static void Test_BFu0i_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu7c");
    static BFu0i_BFu16s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu7c(Test_BFu0i_BFu16s_BFu7c, "BFu0i_BFu16s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu7i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu16s_BFu7i) C1{ Fi:0 Fs:16 Fi:7}



static void Test_BFu0i_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu7i");
    static BFu0i_BFu16s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu7i(Test_BFu0i_BFu16s_BFu7i, "BFu0i_BFu16s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu7ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu16s_BFu7ll) C1{ Fi:0 Fs:16 FL:7}



static void Test_BFu0i_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu7ll");
    static BFu0i_BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu7ll(Test_BFu0i_BFu16s_BFu7ll, "BFu0i_BFu16s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu7s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu16s_BFu7s) C1{ Fi:0 Fs:16 Fs:7}



static void Test_BFu0i_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu7s");
    static BFu0i_BFu16s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0i_BFu16s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu7s(Test_BFu0i_BFu16s_BFu7s, "BFu0i_BFu16s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu8c  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu16s_BFu8c) C1{ Fi:0 Fs:16 Fc:8}



static void Test_BFu0i_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu8c");
    static BFu0i_BFu16s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu8c(Test_BFu0i_BFu16s_BFu8c, "BFu0i_BFu16s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu8i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu16s_BFu8i) C1{ Fi:0 Fs:16 Fi:8}



static void Test_BFu0i_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu8i");
    static BFu0i_BFu16s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu8i(Test_BFu0i_BFu16s_BFu8i, "BFu0i_BFu16s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu8ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu16s_BFu8ll) C1{ Fi:0 Fs:16 FL:8}



static void Test_BFu0i_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu8ll");
    static BFu0i_BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu8ll(Test_BFu0i_BFu16s_BFu8ll, "BFu0i_BFu16s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu8s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu16s_BFu8s) C1{ Fi:0 Fs:16 Fs:8}



static void Test_BFu0i_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu8s");
    static BFu0i_BFu16s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu16s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu8s(Test_BFu0i_BFu16s_BFu8s, "BFu0i_BFu16s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu9i  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu16s_BFu9i) C1{ Fi:0 Fs:16 Fi:9}



static void Test_BFu0i_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu9i");
    static BFu0i_BFu16s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu9i(Test_BFu0i_BFu16s_BFu9i, "BFu0i_BFu16s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu9ll  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu16s_BFu9ll) C1{ Fi:0 Fs:16 FL:9}



static void Test_BFu0i_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu9ll");
    static BFu0i_BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu9ll(Test_BFu0i_BFu16s_BFu9ll, "BFu0i_BFu16s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_BFu9s  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu16s_BFu9s) C1{ Fi:0 Fs:16 Fs:9}



static void Test_BFu0i_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu16s_BFu9s");
    static BFu0i_BFu16s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0i_BFu16s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_BFu9s(Test_BFu0i_BFu16s_BFu9s, "BFu0i_BFu16s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_C  {
  unsigned int  :0;
  unsigned short v1:16;
  char v2;
};
//SIG(1 BFu0i_BFu16s_C) C1{ Fi:0 Fs:16 Fc}



static void Test_BFu0i_BFu16s_C()
{
  {
    init_simple_test("BFu0i_BFu16s_C");
    static BFu0i_BFu16s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_C");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_C(Test_BFu0i_BFu16s_C, "BFu0i_BFu16s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_D  {
  unsigned int  :0;
  unsigned short v1:16;
  double v2;
};
//SIG(1 BFu0i_BFu16s_D) C1{ Fi:0 Fs:16 FL}



static void Test_BFu0i_BFu16s_D()
{
  {
    init_simple_test("BFu0i_BFu16s_D");
    static BFu0i_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_D(Test_BFu0i_BFu16s_D, "BFu0i_BFu16s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_F  {
  unsigned int  :0;
  unsigned short v1:16;
  float v2;
};
//SIG(1 BFu0i_BFu16s_F) C1{ Fi:0 Fs:16 Fi}



static void Test_BFu0i_BFu16s_F()
{
  {
    init_simple_test("BFu0i_BFu16s_F");
    static BFu0i_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_F(Test_BFu0i_BFu16s_F, "BFu0i_BFu16s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_I  {
  unsigned int  :0;
  unsigned short v1:16;
  int v2;
};
//SIG(1 BFu0i_BFu16s_I) C1{ Fi:0 Fs:16 Fi}



static void Test_BFu0i_BFu16s_I()
{
  {
    init_simple_test("BFu0i_BFu16s_I");
    static BFu0i_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_I(Test_BFu0i_BFu16s_I, "BFu0i_BFu16s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Ip  {
  unsigned int  :0;
  unsigned short v1:16;
  int *v2;
};
//SIG(1 BFu0i_BFu16s_Ip) C1{ Fi:0 Fs:16 Fp}



static void Test_BFu0i_BFu16s_Ip()
{
  {
    init_simple_test("BFu0i_BFu16s_Ip");
    static BFu0i_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Ip(Test_BFu0i_BFu16s_Ip, "BFu0i_BFu16s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_L  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu16s_L) C1{ Fi:0 Fs:16 FL}



static void Test_BFu0i_BFu16s_L()
{
  {
    init_simple_test("BFu0i_BFu16s_L");
    static BFu0i_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_L(Test_BFu0i_BFu16s_L, "BFu0i_BFu16s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_S  {
  unsigned int  :0;
  unsigned short v1:16;
  short v2;
};
//SIG(1 BFu0i_BFu16s_S) C1{ Fi:0 Fs:16 Fs}



static void Test_BFu0i_BFu16s_S()
{
  {
    init_simple_test("BFu0i_BFu16s_S");
    static BFu0i_BFu16s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_S");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_S(Test_BFu0i_BFu16s_S, "BFu0i_BFu16s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Uc  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu16s_Uc) C1{ Fi:0 Fs:16 Fc}



static void Test_BFu0i_BFu16s_Uc()
{
  {
    init_simple_test("BFu0i_BFu16s_Uc");
    static BFu0i_BFu16s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Uc");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Uc(Test_BFu0i_BFu16s_Uc, "BFu0i_BFu16s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Ui  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu16s_Ui) C1{ Fi:0 Fs:16 Fi}



static void Test_BFu0i_BFu16s_Ui()
{
  {
    init_simple_test("BFu0i_BFu16s_Ui");
    static BFu0i_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu16s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Ui(Test_BFu0i_BFu16s_Ui, "BFu0i_BFu16s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Ul  {
  unsigned int  :0;
  unsigned short v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu16s_Ul) C1{ Fi:0 Fs:16 FL}



static void Test_BFu0i_BFu16s_Ul()
{
  {
    init_simple_test("BFu0i_BFu16s_Ul");
    static BFu0i_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Ul(Test_BFu0i_BFu16s_Ul, "BFu0i_BFu16s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Us  {
  unsigned int  :0;
  unsigned short v1:16;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu16s_Us) C1{ Fi:0 Fs:16 Fs}



static void Test_BFu0i_BFu16s_Us()
{
  {
    init_simple_test("BFu0i_BFu16s_Us");
    static BFu0i_BFu16s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu16s_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Us");
    check_field_offset(lv, v2, 2, "BFu0i_BFu16s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Us(Test_BFu0i_BFu16s_Us, "BFu0i_BFu16s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu16s_Vp  {
  unsigned int  :0;
  unsigned short v1:16;
  void *v2;
};
//SIG(1 BFu0i_BFu16s_Vp) C1{ Fi:0 Fs:16 Fp}



static void Test_BFu0i_BFu16s_Vp()
{
  {
    init_simple_test("BFu0i_BFu16s_Vp");
    static BFu0i_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0i_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu16s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu16s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu16s_Vp(Test_BFu0i_BFu16s_Vp, "BFu0i_BFu16s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i  {
  unsigned int  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0i_BFu17i) C1{ Fi:0 Fi:17}



static void Test_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu17i");
    static BFu0i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i(Test_BFu0i_BFu17i, "BFu0i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu0c  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu17i_BFu0c) C1{ Fi:0 Fi:17 Fc:0}



static void Test_BFu0i_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu0c");
    static BFu0i_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu0c(Test_BFu0i_BFu17i_BFu0c, "BFu0i_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu0i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu17i_BFu0i) C1{ Fi:0 Fi:17 Fi:0}



static void Test_BFu0i_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu0i");
    static BFu0i_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu0i(Test_BFu0i_BFu17i_BFu0i, "BFu0i_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu0ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu17i_BFu0ll) C1{ Fi:0 Fi:17 FL:0}



static void Test_BFu0i_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu0ll");
    static BFu0i_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0i_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu0ll(Test_BFu0i_BFu17i_BFu0ll, "BFu0i_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu0s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu17i_BFu0s) C1{ Fi:0 Fi:17 Fs:0}



static void Test_BFu0i_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu0s");
    static BFu0i_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu0s(Test_BFu0i_BFu17i_BFu0s, "BFu0i_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu15i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu17i_BFu15i) C1{ Fi:0 Fi:17 Fi:15}



static void Test_BFu0i_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu15i");
    static BFu0i_BFu17i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu15i(Test_BFu0i_BFu17i_BFu15i, "BFu0i_BFu17i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu15ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu17i_BFu15ll) C1{ Fi:0 Fi:17 FL:15}



static void Test_BFu0i_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu15ll");
    static BFu0i_BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu15ll(Test_BFu0i_BFu17i_BFu15ll, "BFu0i_BFu17i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu15s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu17i_BFu15s) C1{ Fi:0 Fi:17 Fs:15}



static void Test_BFu0i_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu15s");
    static BFu0i_BFu17i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu15s(Test_BFu0i_BFu17i_BFu15s, "BFu0i_BFu17i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu16i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu17i_BFu16i) C1{ Fi:0 Fi:17 Fi:16}



static void Test_BFu0i_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu16i");
    static BFu0i_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu17i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu16i(Test_BFu0i_BFu17i_BFu16i, "BFu0i_BFu17i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu16ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu17i_BFu16ll) C1{ Fi:0 Fi:17 FL:16}



static void Test_BFu0i_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu16ll");
    static BFu0i_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0i_BFu17i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu16ll(Test_BFu0i_BFu17i_BFu16ll, "BFu0i_BFu17i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu16s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu17i_BFu16s) C1{ Fi:0 Fi:17 Fs:16}



static void Test_BFu0i_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu16s");
    static BFu0i_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu17i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu16s(Test_BFu0i_BFu17i_BFu16s, "BFu0i_BFu17i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu17i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu17i_BFu17i) C1{ Fi:0 Fi:17 Fi:17}



static void Test_BFu0i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu17i");
    static BFu0i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu17i(Test_BFu0i_BFu17i_BFu17i, "BFu0i_BFu17i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu17ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu17i_BFu17ll) C1{ Fi:0 Fi:17 FL:17}



static void Test_BFu0i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu17ll");
    static BFu0i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu17ll(Test_BFu0i_BFu17i_BFu17ll, "BFu0i_BFu17i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu1c  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu17i_BFu1c) C1{ Fi:0 Fi:17 Fc:1}



static void Test_BFu0i_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu1c");
    static BFu0i_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu1c(Test_BFu0i_BFu17i_BFu1c, "BFu0i_BFu17i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu1i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu17i_BFu1i) C1{ Fi:0 Fi:17 Fi:1}



static void Test_BFu0i_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu1i");
    static BFu0i_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu1i(Test_BFu0i_BFu17i_BFu1i, "BFu0i_BFu17i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu1ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu17i_BFu1ll) C1{ Fi:0 Fi:17 FL:1}



static void Test_BFu0i_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu1ll");
    static BFu0i_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu1ll(Test_BFu0i_BFu17i_BFu1ll, "BFu0i_BFu17i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu1s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu17i_BFu1s) C1{ Fi:0 Fi:17 Fs:1}



static void Test_BFu0i_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu1s");
    static BFu0i_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu1s(Test_BFu0i_BFu17i_BFu1s, "BFu0i_BFu17i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu31i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu17i_BFu31i) C1{ Fi:0 Fi:17 Fi:31}



static void Test_BFu0i_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu31i");
    static BFu0i_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu17i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu31i(Test_BFu0i_BFu17i_BFu31i, "BFu0i_BFu17i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu31ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu17i_BFu31ll) C1{ Fi:0 Fi:17 FL:31}



static void Test_BFu0i_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu31ll");
    static BFu0i_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0i_BFu17i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu31ll(Test_BFu0i_BFu17i_BFu31ll, "BFu0i_BFu17i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu32i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu17i_BFu32i) C1{ Fi:0 Fi:17 Fi:32}



static void Test_BFu0i_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu32i");
    static BFu0i_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu17i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu32i(Test_BFu0i_BFu17i_BFu32i, "BFu0i_BFu17i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu32ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu17i_BFu32ll) C1{ Fi:0 Fi:17 FL:32}



static void Test_BFu0i_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu32ll");
    static BFu0i_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0i_BFu17i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu32ll(Test_BFu0i_BFu17i_BFu32ll, "BFu0i_BFu17i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu33  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu17i_BFu33) C1{ Fi:0 Fi:17 FL:33}



static void Test_BFu0i_BFu17i_BFu33()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu33");
    static BFu0i_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0i_BFu17i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu33(Test_BFu0i_BFu17i_BFu33, "BFu0i_BFu17i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu7c  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu17i_BFu7c) C1{ Fi:0 Fi:17 Fc:7}



static void Test_BFu0i_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu7c");
    static BFu0i_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu7c(Test_BFu0i_BFu17i_BFu7c, "BFu0i_BFu17i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu7i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu17i_BFu7i) C1{ Fi:0 Fi:17 Fi:7}



static void Test_BFu0i_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu7i");
    static BFu0i_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu7i(Test_BFu0i_BFu17i_BFu7i, "BFu0i_BFu17i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu7ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu17i_BFu7ll) C1{ Fi:0 Fi:17 FL:7}



static void Test_BFu0i_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu7ll");
    static BFu0i_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu7ll(Test_BFu0i_BFu17i_BFu7ll, "BFu0i_BFu17i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu7s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu17i_BFu7s) C1{ Fi:0 Fi:17 Fs:7}



static void Test_BFu0i_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu7s");
    static BFu0i_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu7s(Test_BFu0i_BFu17i_BFu7s, "BFu0i_BFu17i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu8c  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu17i_BFu8c) C1{ Fi:0 Fi:17 Fc:8}



static void Test_BFu0i_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu8c");
    static BFu0i_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu17i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu8c(Test_BFu0i_BFu17i_BFu8c, "BFu0i_BFu17i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu8i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu17i_BFu8i) C1{ Fi:0 Fi:17 Fi:8}



static void Test_BFu0i_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu8i");
    static BFu0i_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu8i(Test_BFu0i_BFu17i_BFu8i, "BFu0i_BFu17i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu8ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu17i_BFu8ll) C1{ Fi:0 Fi:17 FL:8}



static void Test_BFu0i_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu8ll");
    static BFu0i_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu8ll(Test_BFu0i_BFu17i_BFu8ll, "BFu0i_BFu17i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu8s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu17i_BFu8s) C1{ Fi:0 Fi:17 Fs:8}



static void Test_BFu0i_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu8s");
    static BFu0i_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu8s(Test_BFu0i_BFu17i_BFu8s, "BFu0i_BFu17i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu9i  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu17i_BFu9i) C1{ Fi:0 Fi:17 Fi:9}



static void Test_BFu0i_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu9i");
    static BFu0i_BFu17i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu9i(Test_BFu0i_BFu17i_BFu9i, "BFu0i_BFu17i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu9ll  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu17i_BFu9ll) C1{ Fi:0 Fi:17 FL:9}



static void Test_BFu0i_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu9ll");
    static BFu0i_BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu9ll(Test_BFu0i_BFu17i_BFu9ll, "BFu0i_BFu17i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_BFu9s  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu17i_BFu9s) C1{ Fi:0 Fi:17 Fs:9}



static void Test_BFu0i_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu17i_BFu9s");
    static BFu0i_BFu17i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_BFu9s(Test_BFu0i_BFu17i_BFu9s, "BFu0i_BFu17i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_C  {
  unsigned int  :0;
  unsigned int v1:17;
  char v2;
};
//SIG(1 BFu0i_BFu17i_C) C1{ Fi:0 Fi:17 Fc}



static void Test_BFu0i_BFu17i_C()
{
  {
    init_simple_test("BFu0i_BFu17i_C");
    static BFu0i_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_C");
    check_field_offset(lv, v2, 3, "BFu0i_BFu17i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_C(Test_BFu0i_BFu17i_C, "BFu0i_BFu17i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_D  {
  unsigned int  :0;
  unsigned int v1:17;
  double v2;
};
//SIG(1 BFu0i_BFu17i_D) C1{ Fi:0 Fi:17 FL}



static void Test_BFu0i_BFu17i_D()
{
  {
    init_simple_test("BFu0i_BFu17i_D");
    static BFu0i_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_D(Test_BFu0i_BFu17i_D, "BFu0i_BFu17i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_F  {
  unsigned int  :0;
  unsigned int v1:17;
  float v2;
};
//SIG(1 BFu0i_BFu17i_F) C1{ Fi:0 Fi:17 Fi}



static void Test_BFu0i_BFu17i_F()
{
  {
    init_simple_test("BFu0i_BFu17i_F");
    static BFu0i_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_F(Test_BFu0i_BFu17i_F, "BFu0i_BFu17i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_I  {
  unsigned int  :0;
  unsigned int v1:17;
  int v2;
};
//SIG(1 BFu0i_BFu17i_I) C1{ Fi:0 Fi:17 Fi}



static void Test_BFu0i_BFu17i_I()
{
  {
    init_simple_test("BFu0i_BFu17i_I");
    static BFu0i_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_I(Test_BFu0i_BFu17i_I, "BFu0i_BFu17i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Ip  {
  unsigned int  :0;
  unsigned int v1:17;
  int *v2;
};
//SIG(1 BFu0i_BFu17i_Ip) C1{ Fi:0 Fi:17 Fp}



static void Test_BFu0i_BFu17i_Ip()
{
  {
    init_simple_test("BFu0i_BFu17i_Ip");
    static BFu0i_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Ip(Test_BFu0i_BFu17i_Ip, "BFu0i_BFu17i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_L  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu17i_L) C1{ Fi:0 Fi:17 FL}



static void Test_BFu0i_BFu17i_L()
{
  {
    init_simple_test("BFu0i_BFu17i_L");
    static BFu0i_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_L(Test_BFu0i_BFu17i_L, "BFu0i_BFu17i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_S  {
  unsigned int  :0;
  unsigned int v1:17;
  short v2;
};
//SIG(1 BFu0i_BFu17i_S) C1{ Fi:0 Fi:17 Fs}



static void Test_BFu0i_BFu17i_S()
{
  {
    init_simple_test("BFu0i_BFu17i_S");
    static BFu0i_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_S");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_S(Test_BFu0i_BFu17i_S, "BFu0i_BFu17i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Uc  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu17i_Uc) C1{ Fi:0 Fi:17 Fc}



static void Test_BFu0i_BFu17i_Uc()
{
  {
    init_simple_test("BFu0i_BFu17i_Uc");
    static BFu0i_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Uc");
    check_field_offset(lv, v2, 3, "BFu0i_BFu17i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Uc(Test_BFu0i_BFu17i_Uc, "BFu0i_BFu17i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Ui  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu17i_Ui) C1{ Fi:0 Fi:17 Fi}



static void Test_BFu0i_BFu17i_Ui()
{
  {
    init_simple_test("BFu0i_BFu17i_Ui");
    static BFu0i_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Ui(Test_BFu0i_BFu17i_Ui, "BFu0i_BFu17i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Ul  {
  unsigned int  :0;
  unsigned int v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu17i_Ul) C1{ Fi:0 Fi:17 FL}



static void Test_BFu0i_BFu17i_Ul()
{
  {
    init_simple_test("BFu0i_BFu17i_Ul");
    static BFu0i_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Ul(Test_BFu0i_BFu17i_Ul, "BFu0i_BFu17i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Us  {
  unsigned int  :0;
  unsigned int v1:17;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu17i_Us) C1{ Fi:0 Fi:17 Fs}



static void Test_BFu0i_BFu17i_Us()
{
  {
    init_simple_test("BFu0i_BFu17i_Us");
    static BFu0i_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Us");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Us(Test_BFu0i_BFu17i_Us, "BFu0i_BFu17i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17i_Vp  {
  unsigned int  :0;
  unsigned int v1:17;
  void *v2;
};
//SIG(1 BFu0i_BFu17i_Vp) C1{ Fi:0 Fi:17 Fp}



static void Test_BFu0i_BFu17i_Vp()
{
  {
    init_simple_test("BFu0i_BFu17i_Vp");
    static BFu0i_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17i_Vp(Test_BFu0i_BFu17i_Vp, "BFu0i_BFu17i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll  {
  unsigned int  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0i_BFu17ll) C1{ Fi:0 FL:17}



static void Test_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu17ll");
    static BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll(Test_BFu0i_BFu17ll, "BFu0i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu0c  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu17ll_BFu0c) C1{ Fi:0 FL:17 Fc:0}



static void Test_BFu0i_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu0c");
    static BFu0i_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu0c(Test_BFu0i_BFu17ll_BFu0c, "BFu0i_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu0i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu17ll_BFu0i) C1{ Fi:0 FL:17 Fi:0}



static void Test_BFu0i_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu0i");
    static BFu0i_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu0i(Test_BFu0i_BFu17ll_BFu0i, "BFu0i_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu0ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu17ll_BFu0ll) C1{ Fi:0 FL:17 FL:0}



static void Test_BFu0i_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu0ll");
    static BFu0i_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu0ll(Test_BFu0i_BFu17ll_BFu0ll, "BFu0i_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu0s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu17ll_BFu0s) C1{ Fi:0 FL:17 Fs:0}



static void Test_BFu0i_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu0s");
    static BFu0i_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu0s(Test_BFu0i_BFu17ll_BFu0s, "BFu0i_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu15i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu17ll_BFu15i) C1{ Fi:0 FL:17 Fi:15}



static void Test_BFu0i_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu15i");
    static BFu0i_BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu15i(Test_BFu0i_BFu17ll_BFu15i, "BFu0i_BFu17ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu15ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu17ll_BFu15ll) C1{ Fi:0 FL:17 FL:15}



static void Test_BFu0i_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu15ll");
    static BFu0i_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu15ll(Test_BFu0i_BFu17ll_BFu15ll, "BFu0i_BFu17ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu15s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu17ll_BFu15s) C1{ Fi:0 FL:17 Fs:15}



static void Test_BFu0i_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu15s");
    static BFu0i_BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu17ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu15s(Test_BFu0i_BFu17ll_BFu15s, "BFu0i_BFu17ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu16i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu17ll_BFu16i) C1{ Fi:0 FL:17 Fi:16}



static void Test_BFu0i_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu16i");
    static BFu0i_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu17ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu16i(Test_BFu0i_BFu17ll_BFu16i, "BFu0i_BFu17ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu16ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu17ll_BFu16ll) C1{ Fi:0 FL:17 FL:16}



static void Test_BFu0i_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu16ll");
    static BFu0i_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0i_BFu17ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu16ll(Test_BFu0i_BFu17ll_BFu16ll, "BFu0i_BFu17ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu16s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu17ll_BFu16s) C1{ Fi:0 FL:17 Fs:16}



static void Test_BFu0i_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu16s");
    static BFu0i_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu17ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu16s(Test_BFu0i_BFu17ll_BFu16s, "BFu0i_BFu17ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu17i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu17ll_BFu17i) C1{ Fi:0 FL:17 Fi:17}



static void Test_BFu0i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu17i");
    static BFu0i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu17i(Test_BFu0i_BFu17ll_BFu17i, "BFu0i_BFu17ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu17ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu17ll_BFu17ll) C1{ Fi:0 FL:17 FL:17}



static void Test_BFu0i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu17ll");
    static BFu0i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu17ll(Test_BFu0i_BFu17ll_BFu17ll, "BFu0i_BFu17ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu1c  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu17ll_BFu1c) C1{ Fi:0 FL:17 Fc:1}



static void Test_BFu0i_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu1c");
    static BFu0i_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu1c(Test_BFu0i_BFu17ll_BFu1c, "BFu0i_BFu17ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu1i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0i_BFu17ll_BFu1i) C1{ Fi:0 FL:17 Fi:1}



static void Test_BFu0i_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu1i");
    static BFu0i_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu1i(Test_BFu0i_BFu17ll_BFu1i, "BFu0i_BFu17ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu1ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0i_BFu17ll_BFu1ll) C1{ Fi:0 FL:17 FL:1}



static void Test_BFu0i_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu1ll");
    static BFu0i_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu1ll(Test_BFu0i_BFu17ll_BFu1ll, "BFu0i_BFu17ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu1s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu0i_BFu17ll_BFu1s) C1{ Fi:0 FL:17 Fs:1}



static void Test_BFu0i_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu1s");
    static BFu0i_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0i_BFu17ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu1s(Test_BFu0i_BFu17ll_BFu1s, "BFu0i_BFu17ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu31i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0i_BFu17ll_BFu31i) C1{ Fi:0 FL:17 Fi:31}



static void Test_BFu0i_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu31i");
    static BFu0i_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0i_BFu17ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu31i(Test_BFu0i_BFu17ll_BFu31i, "BFu0i_BFu17ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu31ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0i_BFu17ll_BFu31ll) C1{ Fi:0 FL:17 FL:31}



static void Test_BFu0i_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu31ll");
    static BFu0i_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0i_BFu17ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu31ll(Test_BFu0i_BFu17ll_BFu31ll, "BFu0i_BFu17ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu32i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0i_BFu17ll_BFu32i) C1{ Fi:0 FL:17 Fi:32}



static void Test_BFu0i_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu32i");
    static BFu0i_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0i_BFu17ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu32i(Test_BFu0i_BFu17ll_BFu32i, "BFu0i_BFu17ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu32ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0i_BFu17ll_BFu32ll) C1{ Fi:0 FL:17 FL:32}



static void Test_BFu0i_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu32ll");
    static BFu0i_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0i_BFu17ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu32ll(Test_BFu0i_BFu17ll_BFu32ll, "BFu0i_BFu17ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu33  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0i_BFu17ll_BFu33) C1{ Fi:0 FL:17 FL:33}



static void Test_BFu0i_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu33");
    static BFu0i_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0i_BFu17ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu33(Test_BFu0i_BFu17ll_BFu33, "BFu0i_BFu17ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu7c  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0i_BFu17ll_BFu7c) C1{ Fi:0 FL:17 Fc:7}



static void Test_BFu0i_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu7c");
    static BFu0i_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu7c(Test_BFu0i_BFu17ll_BFu7c, "BFu0i_BFu17ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu7i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0i_BFu17ll_BFu7i) C1{ Fi:0 FL:17 Fi:7}



static void Test_BFu0i_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu7i");
    static BFu0i_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu7i(Test_BFu0i_BFu17ll_BFu7i, "BFu0i_BFu17ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu7ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0i_BFu17ll_BFu7ll) C1{ Fi:0 FL:17 FL:7}



static void Test_BFu0i_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu7ll");
    static BFu0i_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu7ll(Test_BFu0i_BFu17ll_BFu7ll, "BFu0i_BFu17ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu7s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu0i_BFu17ll_BFu7s) C1{ Fi:0 FL:17 Fs:7}



static void Test_BFu0i_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu7s");
    static BFu0i_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0i_BFu17ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu7s(Test_BFu0i_BFu17ll_BFu7s, "BFu0i_BFu17ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu8c  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0i_BFu17ll_BFu8c) C1{ Fi:0 FL:17 Fc:8}



static void Test_BFu0i_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu8c");
    static BFu0i_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0i_BFu17ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu8c(Test_BFu0i_BFu17ll_BFu8c, "BFu0i_BFu17ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu8i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0i_BFu17ll_BFu8i) C1{ Fi:0 FL:17 Fi:8}



static void Test_BFu0i_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu8i");
    static BFu0i_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu8i(Test_BFu0i_BFu17ll_BFu8i, "BFu0i_BFu17ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu8ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0i_BFu17ll_BFu8ll) C1{ Fi:0 FL:17 FL:8}



static void Test_BFu0i_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu8ll");
    static BFu0i_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu8ll(Test_BFu0i_BFu17ll_BFu8ll, "BFu0i_BFu17ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu8s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu0i_BFu17ll_BFu8s) C1{ Fi:0 FL:17 Fs:8}



static void Test_BFu0i_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu8s");
    static BFu0i_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0i_BFu17ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu8s(Test_BFu0i_BFu17ll_BFu8s, "BFu0i_BFu17ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu9i  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0i_BFu17ll_BFu9i) C1{ Fi:0 FL:17 Fi:9}



static void Test_BFu0i_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu9i");
    static BFu0i_BFu17ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu9i(Test_BFu0i_BFu17ll_BFu9i, "BFu0i_BFu17ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu9ll  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0i_BFu17ll_BFu9ll) C1{ Fi:0 FL:17 FL:9}



static void Test_BFu0i_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu9ll");
    static BFu0i_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu9ll(Test_BFu0i_BFu17ll_BFu9ll, "BFu0i_BFu17ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_BFu9s  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2:9;
};
//SIG(1 BFu0i_BFu17ll_BFu9s) C1{ Fi:0 FL:17 Fs:9}



static void Test_BFu0i_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu0i_BFu17ll_BFu9s");
    static BFu0i_BFu17ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0i_BFu17ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_BFu9s(Test_BFu0i_BFu17ll_BFu9s, "BFu0i_BFu17ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_C  {
  unsigned int  :0;
  __tsu64 v1:17;
  char v2;
};
//SIG(1 BFu0i_BFu17ll_C) C1{ Fi:0 FL:17 Fc}



static void Test_BFu0i_BFu17ll_C()
{
  {
    init_simple_test("BFu0i_BFu17ll_C");
    static BFu0i_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_C");
    check_field_offset(lv, v2, 3, "BFu0i_BFu17ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_C(Test_BFu0i_BFu17ll_C, "BFu0i_BFu17ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_D  {
  unsigned int  :0;
  __tsu64 v1:17;
  double v2;
};
//SIG(1 BFu0i_BFu17ll_D) C1{ Fi:0 FL:17 FL}



static void Test_BFu0i_BFu17ll_D()
{
  {
    init_simple_test("BFu0i_BFu17ll_D");
    static BFu0i_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_D(Test_BFu0i_BFu17ll_D, "BFu0i_BFu17ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_F  {
  unsigned int  :0;
  __tsu64 v1:17;
  float v2;
};
//SIG(1 BFu0i_BFu17ll_F) C1{ Fi:0 FL:17 Fi}



static void Test_BFu0i_BFu17ll_F()
{
  {
    init_simple_test("BFu0i_BFu17ll_F");
    static BFu0i_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_F");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_F(Test_BFu0i_BFu17ll_F, "BFu0i_BFu17ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_I  {
  unsigned int  :0;
  __tsu64 v1:17;
  int v2;
};
//SIG(1 BFu0i_BFu17ll_I) C1{ Fi:0 FL:17 Fi}



static void Test_BFu0i_BFu17ll_I()
{
  {
    init_simple_test("BFu0i_BFu17ll_I");
    static BFu0i_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_I");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_I(Test_BFu0i_BFu17ll_I, "BFu0i_BFu17ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Ip  {
  unsigned int  :0;
  __tsu64 v1:17;
  int *v2;
};
//SIG(1 BFu0i_BFu17ll_Ip) C1{ Fi:0 FL:17 Fp}



static void Test_BFu0i_BFu17ll_Ip()
{
  {
    init_simple_test("BFu0i_BFu17ll_Ip");
    static BFu0i_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Ip(Test_BFu0i_BFu17ll_Ip, "BFu0i_BFu17ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_L  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0i_BFu17ll_L) C1{ Fi:0 FL:17 FL}



static void Test_BFu0i_BFu17ll_L()
{
  {
    init_simple_test("BFu0i_BFu17ll_L");
    static BFu0i_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_L(Test_BFu0i_BFu17ll_L, "BFu0i_BFu17ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_S  {
  unsigned int  :0;
  __tsu64 v1:17;
  short v2;
};
//SIG(1 BFu0i_BFu17ll_S) C1{ Fi:0 FL:17 Fs}



static void Test_BFu0i_BFu17ll_S()
{
  {
    init_simple_test("BFu0i_BFu17ll_S");
    static BFu0i_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_S");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_S(Test_BFu0i_BFu17ll_S, "BFu0i_BFu17ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Uc  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned char v2;
};
//SIG(1 BFu0i_BFu17ll_Uc) C1{ Fi:0 FL:17 Fc}



static void Test_BFu0i_BFu17ll_Uc()
{
  {
    init_simple_test("BFu0i_BFu17ll_Uc");
    static BFu0i_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Uc");
    check_field_offset(lv, v2, 3, "BFu0i_BFu17ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Uc(Test_BFu0i_BFu17ll_Uc, "BFu0i_BFu17ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Ui  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned int v2;
};
//SIG(1 BFu0i_BFu17ll_Ui) C1{ Fi:0 FL:17 Fi}



static void Test_BFu0i_BFu17ll_Ui()
{
  {
    init_simple_test("BFu0i_BFu17ll_Ui");
    static BFu0i_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Ui(Test_BFu0i_BFu17ll_Ui, "BFu0i_BFu17ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Ul  {
  unsigned int  :0;
  __tsu64 v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0i_BFu17ll_Ul) C1{ Fi:0 FL:17 FL}



static void Test_BFu0i_BFu17ll_Ul()
{
  {
    init_simple_test("BFu0i_BFu17ll_Ul");
    static BFu0i_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0i_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Ul(Test_BFu0i_BFu17ll_Ul, "BFu0i_BFu17ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Us  {
  unsigned int  :0;
  __tsu64 v1:17;
  unsigned short v2;
};
//SIG(1 BFu0i_BFu17ll_Us) C1{ Fi:0 FL:17 Fs}



static void Test_BFu0i_BFu17ll_Us()
{
  {
    init_simple_test("BFu0i_BFu17ll_Us");
    static BFu0i_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0i_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Us");
    check_field_offset(lv, v2, 4, "BFu0i_BFu17ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Us(Test_BFu0i_BFu17ll_Us, "BFu0i_BFu17ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu17ll_Vp  {
  unsigned int  :0;
  __tsu64 v1:17;
  void *v2;
};
//SIG(1 BFu0i_BFu17ll_Vp) C1{ Fi:0 FL:17 Fp}



static void Test_BFu0i_BFu17ll_Vp()
{
  {
    init_simple_test("BFu0i_BFu17ll_Vp");
    static BFu0i_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0i_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0i_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0i_BFu17ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0i_BFu17ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu17ll_Vp(Test_BFu0i_BFu17ll_Vp, "BFu0i_BFu17ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c  {
  unsigned int  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0i_BFu1c) C1{ Fi:0 Fc:1}



static void Test_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu1c");
    static BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c(Test_BFu0i_BFu1c, "BFu0i_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu0c  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0i_BFu1c_BFu0c) C1{ Fi:0 Fc:1 Fc:0}



static void Test_BFu0i_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu0c");
    static BFu0i_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu0c(Test_BFu0i_BFu1c_BFu0c, "BFu0i_BFu1c_BFu0c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu0i  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0i_BFu1c_BFu0i) C1{ Fi:0 Fc:1 Fi:0}



static void Test_BFu0i_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu0i");
    static BFu0i_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu0i(Test_BFu0i_BFu1c_BFu0i, "BFu0i_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu0ll  {
  unsigned int  :0;
  unsigned char v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0i_BFu1c_BFu0ll) C1{ Fi:0 Fc:1 FL:0}



static void Test_BFu0i_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu0ll");
    static BFu0i_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu0ll(Test_BFu0i_BFu1c_BFu0ll, "BFu0i_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu0s  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0i_BFu1c_BFu0s) C1{ Fi:0 Fc:1 Fs:0}



static void Test_BFu0i_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu0s");
    static BFu0i_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu0s(Test_BFu0i_BFu1c_BFu0s, "BFu0i_BFu1c_BFu0s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu15i  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0i_BFu1c_BFu15i) C1{ Fi:0 Fc:1 Fi:15}



static void Test_BFu0i_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu15i");
    static BFu0i_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu1c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu15i(Test_BFu0i_BFu1c_BFu15i, "BFu0i_BFu1c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu15ll  {
  unsigned int  :0;
  unsigned char v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0i_BFu1c_BFu15ll) C1{ Fi:0 Fc:1 FL:15}



static void Test_BFu0i_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu15ll");
    static BFu0i_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu1c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu15ll(Test_BFu0i_BFu1c_BFu15ll, "BFu0i_BFu1c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu15s  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned short v2:15;
};
//SIG(1 BFu0i_BFu1c_BFu15s) C1{ Fi:0 Fc:1 Fs:15}



static void Test_BFu0i_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu15s");
    static BFu0i_BFu1c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0i_BFu1c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0i_BFu1c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu15s(Test_BFu0i_BFu1c_BFu15s, "BFu0i_BFu1c_BFu15s", ABISELECT(2,2));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu16i  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0i_BFu1c_BFu16i) C1{ Fi:0 Fc:1 Fi:16}



static void Test_BFu0i_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu16i");
    static BFu0i_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0i_BFu1c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu16i(Test_BFu0i_BFu1c_BFu16i, "BFu0i_BFu1c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu16ll  {
  unsigned int  :0;
  unsigned char v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0i_BFu1c_BFu16ll) C1{ Fi:0 Fc:1 FL:16}



static void Test_BFu0i_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu16ll");
    static BFu0i_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0i_BFu1c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu16ll(Test_BFu0i_BFu1c_BFu16ll, "BFu0i_BFu1c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu16s  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned short v2:16;
};
//SIG(1 BFu0i_BFu1c_BFu16s) C1{ Fi:0 Fc:1 Fs:16}



static void Test_BFu0i_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu16s");
    static BFu0i_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu1c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0i_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0i_BFu1c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu16s(Test_BFu0i_BFu1c_BFu16s, "BFu0i_BFu1c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu17i  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0i_BFu1c_BFu17i) C1{ Fi:0 Fc:1 Fi:17}



static void Test_BFu0i_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu17i");
    static BFu0i_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0i_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0i_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0i_BFu1c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu17i(Test_BFu0i_BFu1c_BFu17i, "BFu0i_BFu1c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu17ll  {
  unsigned int  :0;
  unsigned char v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0i_BFu1c_BFu17ll) C1{ Fi:0 Fc:1 FL:17}



static void Test_BFu0i_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu17ll");
    static BFu0i_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0i_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0i_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0i_BFu1c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu17ll(Test_BFu0i_BFu1c_BFu17ll, "BFu0i_BFu1c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu0i_BFu1c_BFu1c  {
  unsigned int  :0;
  unsigned char v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0i_BFu1c_BFu1c) C1{ Fi:0 Fc:1 Fc:1}



static void Test_BFu0i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu0i_BFu1c_BFu1c");
    static BFu0i_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0i_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0i_BFu1c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu0i_BFu1c_BFu1c(Test_BFu0i_BFu1c_BFu1c, "BFu0i_BFu1c_BFu1c", ABISELECT(1,1));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

