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

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 STRUCT_IF_C BFu0c_BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFs0s_BFs0s, BFu0c_BFu0s_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFs0s_BFu0c, BFu0c_BFu0s_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFs0s_BFu0i, BFu0c_BFu0s_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFs0s_BFu0ll, BFu0c_BFu0s_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFs0s_BFu0s, BFu0c_BFu0s_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c, BFu0c_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFs0c, BFu0c_BFu0s_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFs0i, BFu0c_BFu0s_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFs0ll, BFu0c_BFu0s_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFs0s, BFu0c_BFu0s_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFu0c, BFu0c_BFu0s_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFu0i, BFu0c_BFu0s_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFu0ll, BFu0c_BFu0s_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0c_BFu0s, BFu0c_BFu0s_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i, BFu0c_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFs0c, BFu0c_BFu0s_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFs0i, BFu0c_BFu0s_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFs0ll, BFu0c_BFu0s_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFs0s, BFu0c_BFu0s_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFu0c, BFu0c_BFu0s_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFu0i, BFu0c_BFu0s_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFu0ll, BFu0c_BFu0s_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0i_BFu0s, BFu0c_BFu0s_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll, BFu0c_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFs0c, BFu0c_BFu0s_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFs0i, BFu0c_BFu0s_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFs0ll, BFu0c_BFu0s_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFs0s, BFu0c_BFu0s_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFu0c, BFu0c_BFu0s_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFu0i, BFu0c_BFu0s_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFu0ll, BFu0c_BFu0s_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0ll_BFu0s, BFu0c_BFu0s_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s, BFu0c_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFs0c, BFu0c_BFu0s_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFs0i, BFu0c_BFu0s_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFs0ll, BFu0c_BFu0s_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFs0s, BFu0c_BFu0s_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFu0c, BFu0c_BFu0s_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFu0i, BFu0c_BFu0s_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFu0ll, BFu0c_BFu0s_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0c_BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0c_BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0c_BFu0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu0s_BFu0s, BFu0c_BFu0s_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu15i, BFu0c_BFu0s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu15ll, BFu0c_BFu0s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu15s, BFu0c_BFu0s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu16i, BFu0c_BFu0s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu16ll, BFu0c_BFu0s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu16s, BFu0c_BFu0s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu17i, BFu0c_BFu0s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu17ll, BFu0c_BFu0s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu1c, BFu0c_BFu0s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu1i, BFu0c_BFu0s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu1ll, BFu0c_BFu0s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu1s, BFu0c_BFu0s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu31i, BFu0c_BFu0s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu31ll, BFu0c_BFu0s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu32i, BFu0c_BFu0s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu32ll, BFu0c_BFu0s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu33, BFu0c_BFu0s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu7c, BFu0c_BFu0s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu7i, BFu0c_BFu0s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu7ll, BFu0c_BFu0s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu7s, BFu0c_BFu0s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu8c, BFu0c_BFu0s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu8i, BFu0c_BFu0s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu8ll, BFu0c_BFu0s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu8s, BFu0c_BFu0s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu9i, BFu0c_BFu0s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu9ll, BFu0c_BFu0s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_BFu9s, BFu0c_BFu0s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_C, BFu0c_BFu0s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_D, BFu0c_BFu0s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_F, BFu0c_BFu0s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_I, BFu0c_BFu0s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Ip, BFu0c_BFu0s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_L, BFu0c_BFu0s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_S, BFu0c_BFu0s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Uc, BFu0c_BFu0s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Ui, BFu0c_BFu0s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Ul, BFu0c_BFu0s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Us, BFu0c_BFu0s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu0s_Vp, BFu0c_BFu0s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i, BFu0c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu0c, BFu0c_BFu15i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu0i, BFu0c_BFu15i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu0ll, BFu0c_BFu15i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu0s, BFu0c_BFu15i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu15i, BFu0c_BFu15i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu15ll, BFu0c_BFu15i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu15s, BFu0c_BFu15i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu16i, BFu0c_BFu15i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu16ll, BFu0c_BFu15i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu16s, BFu0c_BFu15i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu17i, BFu0c_BFu15i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu17ll, BFu0c_BFu15i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu1c, BFu0c_BFu15i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu1i, BFu0c_BFu15i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu1ll, BFu0c_BFu15i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu1s, BFu0c_BFu15i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu31i, BFu0c_BFu15i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu31ll, BFu0c_BFu15i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu32i, BFu0c_BFu15i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu32ll, BFu0c_BFu15i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu33, BFu0c_BFu15i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu7c, BFu0c_BFu15i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu7i, BFu0c_BFu15i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu7ll, BFu0c_BFu15i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu7s, BFu0c_BFu15i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu8c, BFu0c_BFu15i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu8i, BFu0c_BFu15i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu8ll, BFu0c_BFu15i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu8s, BFu0c_BFu15i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu9i, BFu0c_BFu15i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu9ll, BFu0c_BFu15i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_BFu9s, BFu0c_BFu15i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_C, BFu0c_BFu15i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_D, BFu0c_BFu15i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_F, BFu0c_BFu15i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_I, BFu0c_BFu15i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Ip, BFu0c_BFu15i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_L, BFu0c_BFu15i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_S, BFu0c_BFu15i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Uc, BFu0c_BFu15i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Ui, BFu0c_BFu15i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Ul, BFu0c_BFu15i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Us, BFu0c_BFu15i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15i_Vp, BFu0c_BFu15i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll, BFu0c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu0c, BFu0c_BFu15ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu0i, BFu0c_BFu15ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu0ll, BFu0c_BFu15ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu0s, BFu0c_BFu15ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu15i, BFu0c_BFu15ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu15ll, BFu0c_BFu15ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu15s, BFu0c_BFu15ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu16i, BFu0c_BFu15ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu16ll, BFu0c_BFu15ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu16s, BFu0c_BFu15ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu17i, BFu0c_BFu15ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu17ll, BFu0c_BFu15ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu1c, BFu0c_BFu15ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu1i, BFu0c_BFu15ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu1ll, BFu0c_BFu15ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu1s, BFu0c_BFu15ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu31i, BFu0c_BFu15ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu31ll, BFu0c_BFu15ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu32i, BFu0c_BFu15ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu32ll, BFu0c_BFu15ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu33, BFu0c_BFu15ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu7c, BFu0c_BFu15ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu7i, BFu0c_BFu15ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu7ll, BFu0c_BFu15ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu7s, BFu0c_BFu15ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu8c, BFu0c_BFu15ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu8i, BFu0c_BFu15ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu8ll, BFu0c_BFu15ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu8s, BFu0c_BFu15ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu9i, BFu0c_BFu15ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu9ll, BFu0c_BFu15ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_BFu9s, BFu0c_BFu15ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_C, BFu0c_BFu15ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_D, BFu0c_BFu15ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_F, BFu0c_BFu15ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_I, BFu0c_BFu15ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Ip, BFu0c_BFu15ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_L, BFu0c_BFu15ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_S, BFu0c_BFu15ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Uc, BFu0c_BFu15ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Ui, BFu0c_BFu15ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Ul, BFu0c_BFu15ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Us, BFu0c_BFu15ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15ll_Vp, BFu0c_BFu15ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s, BFu0c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu0c, BFu0c_BFu15s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu0i, BFu0c_BFu15s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu0ll, BFu0c_BFu15s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu0s, BFu0c_BFu15s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu15i, BFu0c_BFu15s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu15ll, BFu0c_BFu15s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu15s, BFu0c_BFu15s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu16i, BFu0c_BFu15s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu16ll, BFu0c_BFu15s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu16s, BFu0c_BFu15s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu17i, BFu0c_BFu15s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu17ll, BFu0c_BFu15s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu1c, BFu0c_BFu15s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu1i, BFu0c_BFu15s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu1ll, BFu0c_BFu15s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu1s, BFu0c_BFu15s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu31i, BFu0c_BFu15s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu31ll, BFu0c_BFu15s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu32i, BFu0c_BFu15s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu32ll, BFu0c_BFu15s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu33, BFu0c_BFu15s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu7c, BFu0c_BFu15s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu7i, BFu0c_BFu15s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu7ll, BFu0c_BFu15s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu7s, BFu0c_BFu15s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu8c, BFu0c_BFu15s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu8i, BFu0c_BFu15s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu8ll, BFu0c_BFu15s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu8s, BFu0c_BFu15s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu9i, BFu0c_BFu15s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu9ll, BFu0c_BFu15s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_BFu9s, BFu0c_BFu15s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_C, BFu0c_BFu15s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_D, BFu0c_BFu15s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_F, BFu0c_BFu15s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_I, BFu0c_BFu15s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Ip, BFu0c_BFu15s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_L, BFu0c_BFu15s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_S, BFu0c_BFu15s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Uc, BFu0c_BFu15s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Ui, BFu0c_BFu15s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Ul, BFu0c_BFu15s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Us, BFu0c_BFu15s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu15s_Vp, BFu0c_BFu15s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i, BFu0c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu0c, BFu0c_BFu16i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu0i, BFu0c_BFu16i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu0ll, BFu0c_BFu16i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu0s, BFu0c_BFu16i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu15i, BFu0c_BFu16i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu15ll, BFu0c_BFu16i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu15s, BFu0c_BFu16i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu16i, BFu0c_BFu16i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu16ll, BFu0c_BFu16i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu16s, BFu0c_BFu16i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu17i, BFu0c_BFu16i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu17ll, BFu0c_BFu16i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu1c, BFu0c_BFu16i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu1i, BFu0c_BFu16i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu1ll, BFu0c_BFu16i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu1s, BFu0c_BFu16i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu31i, BFu0c_BFu16i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu31ll, BFu0c_BFu16i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu32i, BFu0c_BFu16i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu32ll, BFu0c_BFu16i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu33, BFu0c_BFu16i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu7c, BFu0c_BFu16i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu7i, BFu0c_BFu16i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu7ll, BFu0c_BFu16i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu7s, BFu0c_BFu16i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu8c, BFu0c_BFu16i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu8i, BFu0c_BFu16i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu8ll, BFu0c_BFu16i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu8s, BFu0c_BFu16i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu9i, BFu0c_BFu16i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu9ll, BFu0c_BFu16i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_BFu9s, BFu0c_BFu16i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_C, BFu0c_BFu16i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_D, BFu0c_BFu16i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_F, BFu0c_BFu16i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_I, BFu0c_BFu16i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Ip, BFu0c_BFu16i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_L, BFu0c_BFu16i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_S, BFu0c_BFu16i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Uc, BFu0c_BFu16i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Ui, BFu0c_BFu16i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Ul, BFu0c_BFu16i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Us, BFu0c_BFu16i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16i_Vp, BFu0c_BFu16i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll, BFu0c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu0c, BFu0c_BFu16ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu0i, BFu0c_BFu16ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu0ll, BFu0c_BFu16ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu0s, BFu0c_BFu16ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu15i, BFu0c_BFu16ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu15ll, BFu0c_BFu16ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu15s, BFu0c_BFu16ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu16i, BFu0c_BFu16ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu16ll, BFu0c_BFu16ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu16s, BFu0c_BFu16ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu17i, BFu0c_BFu16ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu17ll, BFu0c_BFu16ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu1c, BFu0c_BFu16ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu1i, BFu0c_BFu16ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu1ll, BFu0c_BFu16ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu1s, BFu0c_BFu16ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu31i, BFu0c_BFu16ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu31ll, BFu0c_BFu16ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu32i, BFu0c_BFu16ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu32ll, BFu0c_BFu16ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu33, BFu0c_BFu16ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu7c, BFu0c_BFu16ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu7i, BFu0c_BFu16ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu7ll, BFu0c_BFu16ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu7s, BFu0c_BFu16ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu8c, BFu0c_BFu16ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu8i, BFu0c_BFu16ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu8ll, BFu0c_BFu16ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu8s, BFu0c_BFu16ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu9i, BFu0c_BFu16ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu9ll, BFu0c_BFu16ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_BFu9s, BFu0c_BFu16ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_C, BFu0c_BFu16ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_D, BFu0c_BFu16ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_F, BFu0c_BFu16ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_I, BFu0c_BFu16ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Ip, BFu0c_BFu16ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_L, BFu0c_BFu16ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_S, BFu0c_BFu16ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Uc, BFu0c_BFu16ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Ui, BFu0c_BFu16ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Ul, BFu0c_BFu16ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Us, BFu0c_BFu16ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16ll_Vp, BFu0c_BFu16ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s, BFu0c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu0c, BFu0c_BFu16s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu0i, BFu0c_BFu16s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu0ll, BFu0c_BFu16s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu0s, BFu0c_BFu16s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu15i, BFu0c_BFu16s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu15ll, BFu0c_BFu16s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu15s, BFu0c_BFu16s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu16i, BFu0c_BFu16s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu16ll, BFu0c_BFu16s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu16s, BFu0c_BFu16s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu17i, BFu0c_BFu16s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu17ll, BFu0c_BFu16s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu1c, BFu0c_BFu16s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu1i, BFu0c_BFu16s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu1ll, BFu0c_BFu16s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu1s, BFu0c_BFu16s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu31i, BFu0c_BFu16s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu31ll, BFu0c_BFu16s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu32i, BFu0c_BFu16s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu32ll, BFu0c_BFu16s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu33, BFu0c_BFu16s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu7c, BFu0c_BFu16s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu7i, BFu0c_BFu16s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu7ll, BFu0c_BFu16s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu7s, BFu0c_BFu16s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu8c, BFu0c_BFu16s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu8i, BFu0c_BFu16s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu8ll, BFu0c_BFu16s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu8s, BFu0c_BFu16s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu9i, BFu0c_BFu16s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu9ll, BFu0c_BFu16s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_BFu9s, BFu0c_BFu16s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_C, BFu0c_BFu16s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_D, BFu0c_BFu16s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_F, BFu0c_BFu16s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_I, BFu0c_BFu16s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Ip, BFu0c_BFu16s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_L, BFu0c_BFu16s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_S, BFu0c_BFu16s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Uc, BFu0c_BFu16s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Ui, BFu0c_BFu16s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Ul, BFu0c_BFu16s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Us, BFu0c_BFu16s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu16s_Vp, BFu0c_BFu16s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i, BFu0c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu0c, BFu0c_BFu17i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu0i, BFu0c_BFu17i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu0ll, BFu0c_BFu17i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu0s, BFu0c_BFu17i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu15i, BFu0c_BFu17i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu15ll, BFu0c_BFu17i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu15s, BFu0c_BFu17i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu16i, BFu0c_BFu17i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu16ll, BFu0c_BFu17i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu16s, BFu0c_BFu17i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu17i, BFu0c_BFu17i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu17ll, BFu0c_BFu17i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu1c, BFu0c_BFu17i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu1i, BFu0c_BFu17i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu1ll, BFu0c_BFu17i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu1s, BFu0c_BFu17i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu31i, BFu0c_BFu17i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu31ll, BFu0c_BFu17i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu32i, BFu0c_BFu17i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu32ll, BFu0c_BFu17i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu33, BFu0c_BFu17i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu7c, BFu0c_BFu17i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu7i, BFu0c_BFu17i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu7ll, BFu0c_BFu17i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu7s, BFu0c_BFu17i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu8c, BFu0c_BFu17i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu8i, BFu0c_BFu17i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu8ll, BFu0c_BFu17i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu8s, BFu0c_BFu17i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu9i, BFu0c_BFu17i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu9ll, BFu0c_BFu17i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_BFu9s, BFu0c_BFu17i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_C, BFu0c_BFu17i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_D, BFu0c_BFu17i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_F, BFu0c_BFu17i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_I, BFu0c_BFu17i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Ip, BFu0c_BFu17i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_L, BFu0c_BFu17i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_S, BFu0c_BFu17i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Uc, BFu0c_BFu17i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Ui, BFu0c_BFu17i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Ul, BFu0c_BFu17i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Us, BFu0c_BFu17i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17i_Vp, BFu0c_BFu17i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll, BFu0c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu0c, BFu0c_BFu17ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu0i, BFu0c_BFu17ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu0ll, BFu0c_BFu17ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu0s, BFu0c_BFu17ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu15i, BFu0c_BFu17ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu15ll, BFu0c_BFu17ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu15s, BFu0c_BFu17ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu16i, BFu0c_BFu17ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu16ll, BFu0c_BFu17ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu16s, BFu0c_BFu17ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu17i, BFu0c_BFu17ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu17ll, BFu0c_BFu17ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu1c, BFu0c_BFu17ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu1i, BFu0c_BFu17ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu1ll, BFu0c_BFu17ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu1s, BFu0c_BFu17ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu31i, BFu0c_BFu17ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu31ll, BFu0c_BFu17ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu32i, BFu0c_BFu17ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu32ll, BFu0c_BFu17ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu33, BFu0c_BFu17ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu7c, BFu0c_BFu17ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu7i, BFu0c_BFu17ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu7ll, BFu0c_BFu17ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu7s, BFu0c_BFu17ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu8c, BFu0c_BFu17ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu8i, BFu0c_BFu17ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu8ll, BFu0c_BFu17ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu8s, BFu0c_BFu17ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu9i, BFu0c_BFu17ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu9ll, BFu0c_BFu17ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_BFu9s, BFu0c_BFu17ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_C, BFu0c_BFu17ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_D, BFu0c_BFu17ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_F, BFu0c_BFu17ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_I, BFu0c_BFu17ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Ip, BFu0c_BFu17ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_L, BFu0c_BFu17ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_S, BFu0c_BFu17ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Uc, BFu0c_BFu17ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Ui, BFu0c_BFu17ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Ul, BFu0c_BFu17ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Us, BFu0c_BFu17ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu17ll_Vp, BFu0c_BFu17ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c, BFu0c_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu0c, BFu0c_BFu1c_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu0i, BFu0c_BFu1c_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu0ll, BFu0c_BFu1c_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu0s, BFu0c_BFu1c_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu15i, BFu0c_BFu1c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu15ll, BFu0c_BFu1c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu15s, BFu0c_BFu1c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu16i, BFu0c_BFu1c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu16ll, BFu0c_BFu1c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu16s, BFu0c_BFu1c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu17i, BFu0c_BFu1c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu17ll, BFu0c_BFu1c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu1c, BFu0c_BFu1c_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu1i, BFu0c_BFu1c_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu1ll, BFu0c_BFu1c_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu1s, BFu0c_BFu1c_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu31i, BFu0c_BFu1c_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu31ll, BFu0c_BFu1c_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu32i, BFu0c_BFu1c_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu32ll, BFu0c_BFu1c_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu33, BFu0c_BFu1c_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu7c, BFu0c_BFu1c_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu7i, BFu0c_BFu1c_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu7ll, BFu0c_BFu1c_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu7s, BFu0c_BFu1c_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu8c, BFu0c_BFu1c_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu8i, BFu0c_BFu1c_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu8ll, BFu0c_BFu1c_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu8s, BFu0c_BFu1c_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu9i, BFu0c_BFu1c_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu9ll, BFu0c_BFu1c_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_BFu9s, BFu0c_BFu1c_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_C, BFu0c_BFu1c_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_D, BFu0c_BFu1c_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_F, BFu0c_BFu1c_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_I, BFu0c_BFu1c_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Ip, BFu0c_BFu1c_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_L, BFu0c_BFu1c_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_S, BFu0c_BFu1c_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Uc, BFu0c_BFu1c_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Ui, BFu0c_BFu1c_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Ul, BFu0c_BFu1c_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Us, BFu0c_BFu1c_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1c_Vp, BFu0c_BFu1c_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i, BFu0c_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu0c, BFu0c_BFu1i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu0i, BFu0c_BFu1i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu0ll, BFu0c_BFu1i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu0s, BFu0c_BFu1i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu15i, BFu0c_BFu1i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu15ll, BFu0c_BFu1i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu15s, BFu0c_BFu1i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu16i, BFu0c_BFu1i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu16ll, BFu0c_BFu1i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu16s, BFu0c_BFu1i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu17i, BFu0c_BFu1i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu17ll, BFu0c_BFu1i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu1c, BFu0c_BFu1i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu1i, BFu0c_BFu1i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu1ll, BFu0c_BFu1i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu1s, BFu0c_BFu1i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu31i, BFu0c_BFu1i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu31ll, BFu0c_BFu1i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu32i, BFu0c_BFu1i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu32ll, BFu0c_BFu1i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu33, BFu0c_BFu1i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu7c, BFu0c_BFu1i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu7i, BFu0c_BFu1i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu7ll, BFu0c_BFu1i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu7s, BFu0c_BFu1i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu8c, BFu0c_BFu1i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu8i, BFu0c_BFu1i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu8ll, BFu0c_BFu1i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu8s, BFu0c_BFu1i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu9i, BFu0c_BFu1i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu9ll, BFu0c_BFu1i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_BFu9s, BFu0c_BFu1i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_C, BFu0c_BFu1i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_D, BFu0c_BFu1i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_F, BFu0c_BFu1i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_I, BFu0c_BFu1i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Ip, BFu0c_BFu1i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_L, BFu0c_BFu1i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_S, BFu0c_BFu1i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Uc, BFu0c_BFu1i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Ui, BFu0c_BFu1i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Ul, BFu0c_BFu1i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Us, BFu0c_BFu1i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1i_Vp, BFu0c_BFu1i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll, BFu0c_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu0c, BFu0c_BFu1ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu0i, BFu0c_BFu1ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu0ll, BFu0c_BFu1ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu0s, BFu0c_BFu1ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu15i, BFu0c_BFu1ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu15ll, BFu0c_BFu1ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu15s, BFu0c_BFu1ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu16i, BFu0c_BFu1ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu16ll, BFu0c_BFu1ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu16s, BFu0c_BFu1ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu17i, BFu0c_BFu1ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu17ll, BFu0c_BFu1ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu1c, BFu0c_BFu1ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu1i, BFu0c_BFu1ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu1ll, BFu0c_BFu1ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu1s, BFu0c_BFu1ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu31i, BFu0c_BFu1ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu31ll, BFu0c_BFu1ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu32i, BFu0c_BFu1ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu32ll, BFu0c_BFu1ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu33, BFu0c_BFu1ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu7c, BFu0c_BFu1ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu7i, BFu0c_BFu1ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu7ll, BFu0c_BFu1ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu7s, BFu0c_BFu1ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu8c, BFu0c_BFu1ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu8i, BFu0c_BFu1ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu8ll, BFu0c_BFu1ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu8s, BFu0c_BFu1ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu9i, BFu0c_BFu1ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu9ll, BFu0c_BFu1ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_BFu9s, BFu0c_BFu1ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_C, BFu0c_BFu1ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_D, BFu0c_BFu1ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_F, BFu0c_BFu1ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_I, BFu0c_BFu1ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Ip, BFu0c_BFu1ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_L, BFu0c_BFu1ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_S, BFu0c_BFu1ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Uc, BFu0c_BFu1ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Ui, BFu0c_BFu1ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Ul, BFu0c_BFu1ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Us, BFu0c_BFu1ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1ll_Vp, BFu0c_BFu1ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s, BFu0c_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu0c, BFu0c_BFu1s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu0i, BFu0c_BFu1s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu0ll, BFu0c_BFu1s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu0s, BFu0c_BFu1s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu15i, BFu0c_BFu1s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu15ll, BFu0c_BFu1s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu15s, BFu0c_BFu1s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu16i, BFu0c_BFu1s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu16ll, BFu0c_BFu1s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu16s, BFu0c_BFu1s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu17i, BFu0c_BFu1s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu17ll, BFu0c_BFu1s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu1c, BFu0c_BFu1s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu1i, BFu0c_BFu1s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu1ll, BFu0c_BFu1s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu1s, BFu0c_BFu1s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu31i, BFu0c_BFu1s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu31ll, BFu0c_BFu1s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu32i, BFu0c_BFu1s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu32ll, BFu0c_BFu1s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu33, BFu0c_BFu1s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu7c, BFu0c_BFu1s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu7i, BFu0c_BFu1s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu7ll, BFu0c_BFu1s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu7s, BFu0c_BFu1s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu8c, BFu0c_BFu1s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu8i, BFu0c_BFu1s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu8ll, BFu0c_BFu1s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu8s, BFu0c_BFu1s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu9i, BFu0c_BFu1s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu9ll, BFu0c_BFu1s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_BFu9s, BFu0c_BFu1s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_C, BFu0c_BFu1s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_D, BFu0c_BFu1s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_F, BFu0c_BFu1s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_I, BFu0c_BFu1s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Ip, BFu0c_BFu1s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_L, BFu0c_BFu1s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_S, BFu0c_BFu1s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Uc, BFu0c_BFu1s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Ui, BFu0c_BFu1s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Ul, BFu0c_BFu1s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Us, BFu0c_BFu1s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu1s_Vp, BFu0c_BFu1s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i, BFu0c_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu0c, BFu0c_BFu31i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu0i, BFu0c_BFu31i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu0ll, BFu0c_BFu31i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu0s, BFu0c_BFu31i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu15i, BFu0c_BFu31i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu15ll, BFu0c_BFu31i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu15s, BFu0c_BFu31i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu16i, BFu0c_BFu31i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu16ll, BFu0c_BFu31i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu16s, BFu0c_BFu31i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu17i, BFu0c_BFu31i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu17ll, BFu0c_BFu31i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu1c, BFu0c_BFu31i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu1i, BFu0c_BFu31i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu1ll, BFu0c_BFu31i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu1s, BFu0c_BFu31i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu31i, BFu0c_BFu31i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu31ll, BFu0c_BFu31i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu32i, BFu0c_BFu31i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu32ll, BFu0c_BFu31i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu33, BFu0c_BFu31i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu7c, BFu0c_BFu31i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu7i, BFu0c_BFu31i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu7ll, BFu0c_BFu31i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu7s, BFu0c_BFu31i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu8c, BFu0c_BFu31i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu8i, BFu0c_BFu31i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu8ll, BFu0c_BFu31i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu8s, BFu0c_BFu31i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu9i, BFu0c_BFu31i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu9ll, BFu0c_BFu31i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_BFu9s, BFu0c_BFu31i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_C, BFu0c_BFu31i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_D, BFu0c_BFu31i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_F, BFu0c_BFu31i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_I, BFu0c_BFu31i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Ip, BFu0c_BFu31i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_L, BFu0c_BFu31i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_S, BFu0c_BFu31i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Uc, BFu0c_BFu31i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Ui, BFu0c_BFu31i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Ul, BFu0c_BFu31i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Us, BFu0c_BFu31i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31i_Vp, BFu0c_BFu31i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll, BFu0c_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu0c, BFu0c_BFu31ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu0i, BFu0c_BFu31ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu0ll, BFu0c_BFu31ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu0s, BFu0c_BFu31ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu15i, BFu0c_BFu31ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu15ll, BFu0c_BFu31ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu15s, BFu0c_BFu31ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu16i, BFu0c_BFu31ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu16ll, BFu0c_BFu31ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu16s, BFu0c_BFu31ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu17i, BFu0c_BFu31ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu17ll, BFu0c_BFu31ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu1c, BFu0c_BFu31ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu1i, BFu0c_BFu31ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu1ll, BFu0c_BFu31ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu1s, BFu0c_BFu31ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu31i, BFu0c_BFu31ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu31ll, BFu0c_BFu31ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu32i, BFu0c_BFu31ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu32ll, BFu0c_BFu31ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu33, BFu0c_BFu31ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu7c, BFu0c_BFu31ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu7i, BFu0c_BFu31ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu7ll, BFu0c_BFu31ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu7s, BFu0c_BFu31ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu8c, BFu0c_BFu31ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu8i, BFu0c_BFu31ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu8ll, BFu0c_BFu31ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu8s, BFu0c_BFu31ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu9i, BFu0c_BFu31ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu9ll, BFu0c_BFu31ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_BFu9s, BFu0c_BFu31ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_C, BFu0c_BFu31ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_D, BFu0c_BFu31ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_F, BFu0c_BFu31ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_I, BFu0c_BFu31ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Ip, BFu0c_BFu31ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_L, BFu0c_BFu31ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_S, BFu0c_BFu31ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Uc, BFu0c_BFu31ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Ui, BFu0c_BFu31ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Ul, BFu0c_BFu31ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Us, BFu0c_BFu31ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu31ll_Vp, BFu0c_BFu31ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i, BFu0c_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu0c, BFu0c_BFu32i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu0i, BFu0c_BFu32i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu0ll, BFu0c_BFu32i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu0s, BFu0c_BFu32i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu15i, BFu0c_BFu32i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu15ll, BFu0c_BFu32i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu15s, BFu0c_BFu32i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu16i, BFu0c_BFu32i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu16ll, BFu0c_BFu32i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu16s, BFu0c_BFu32i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu17i, BFu0c_BFu32i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu17ll, BFu0c_BFu32i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu1c, BFu0c_BFu32i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu1i, BFu0c_BFu32i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu1ll, BFu0c_BFu32i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu1s, BFu0c_BFu32i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu31i, BFu0c_BFu32i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu31ll, BFu0c_BFu32i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu32i, BFu0c_BFu32i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu32ll, BFu0c_BFu32i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu33, BFu0c_BFu32i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu7c, BFu0c_BFu32i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu7i, BFu0c_BFu32i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu7ll, BFu0c_BFu32i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu7s, BFu0c_BFu32i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu8c, BFu0c_BFu32i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu8i, BFu0c_BFu32i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu8ll, BFu0c_BFu32i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu8s, BFu0c_BFu32i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu9i, BFu0c_BFu32i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu9ll, BFu0c_BFu32i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_BFu9s, BFu0c_BFu32i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_C, BFu0c_BFu32i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_D, BFu0c_BFu32i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_F, BFu0c_BFu32i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_I, BFu0c_BFu32i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Ip, BFu0c_BFu32i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_L, BFu0c_BFu32i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_S, BFu0c_BFu32i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Uc, BFu0c_BFu32i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Ui, BFu0c_BFu32i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Ul, BFu0c_BFu32i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Us, BFu0c_BFu32i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32i_Vp, BFu0c_BFu32i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll, BFu0c_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu0c, BFu0c_BFu32ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu0i, BFu0c_BFu32ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu0ll, BFu0c_BFu32ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu0s, BFu0c_BFu32ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu15i, BFu0c_BFu32ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu15ll, BFu0c_BFu32ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu15s, BFu0c_BFu32ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu16i, BFu0c_BFu32ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu16ll, BFu0c_BFu32ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu16s, BFu0c_BFu32ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu17i, BFu0c_BFu32ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu17ll, BFu0c_BFu32ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu1c, BFu0c_BFu32ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu1i, BFu0c_BFu32ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu1ll, BFu0c_BFu32ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu1s, BFu0c_BFu32ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu31i, BFu0c_BFu32ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu31ll, BFu0c_BFu32ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu32i, BFu0c_BFu32ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu32ll, BFu0c_BFu32ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu33, BFu0c_BFu32ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu7c, BFu0c_BFu32ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu7i, BFu0c_BFu32ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu7ll, BFu0c_BFu32ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu7s, BFu0c_BFu32ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu8c, BFu0c_BFu32ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu8i, BFu0c_BFu32ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu8ll, BFu0c_BFu32ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu8s, BFu0c_BFu32ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu9i, BFu0c_BFu32ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu9ll, BFu0c_BFu32ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_BFu9s, BFu0c_BFu32ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_C, BFu0c_BFu32ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_D, BFu0c_BFu32ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_F, BFu0c_BFu32ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_I, BFu0c_BFu32ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Ip, BFu0c_BFu32ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_L, BFu0c_BFu32ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_S, BFu0c_BFu32ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Uc, BFu0c_BFu32ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Ui, BFu0c_BFu32ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Ul, BFu0c_BFu32ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Us, BFu0c_BFu32ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu32ll_Vp, BFu0c_BFu32ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33, BFu0c_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu0c, BFu0c_BFu33_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu0i, BFu0c_BFu33_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu0ll, BFu0c_BFu33_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu0s, BFu0c_BFu33_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu15i, BFu0c_BFu33_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu15ll, BFu0c_BFu33_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu15s, BFu0c_BFu33_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu16i, BFu0c_BFu33_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu16ll, BFu0c_BFu33_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu16s, BFu0c_BFu33_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu17i, BFu0c_BFu33_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu17ll, BFu0c_BFu33_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu1c, BFu0c_BFu33_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu1i, BFu0c_BFu33_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu1ll, BFu0c_BFu33_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu1s, BFu0c_BFu33_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu31i, BFu0c_BFu33_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu31ll, BFu0c_BFu33_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu32i, BFu0c_BFu33_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu32ll, BFu0c_BFu33_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu33, BFu0c_BFu33_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu7c, BFu0c_BFu33_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu7i, BFu0c_BFu33_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu7ll, BFu0c_BFu33_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu7s, BFu0c_BFu33_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu8c, BFu0c_BFu33_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu8i, BFu0c_BFu33_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu8ll, BFu0c_BFu33_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu8s, BFu0c_BFu33_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu9i, BFu0c_BFu33_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu9ll, BFu0c_BFu33_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_BFu9s, BFu0c_BFu33_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_C, BFu0c_BFu33_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_D, BFu0c_BFu33_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_F, BFu0c_BFu33_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_I, BFu0c_BFu33_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Ip, BFu0c_BFu33_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_L, BFu0c_BFu33_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_S, BFu0c_BFu33_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Uc, BFu0c_BFu33_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Ui, BFu0c_BFu33_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Ul, BFu0c_BFu33_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Us, BFu0c_BFu33_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu33_Vp, BFu0c_BFu33_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c, BFu0c_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu0c, BFu0c_BFu7c_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu0i, BFu0c_BFu7c_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu0ll, BFu0c_BFu7c_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu0s, BFu0c_BFu7c_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu15i, BFu0c_BFu7c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu15ll, BFu0c_BFu7c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu15s, BFu0c_BFu7c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu16i, BFu0c_BFu7c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu16ll, BFu0c_BFu7c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu16s, BFu0c_BFu7c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu17i, BFu0c_BFu7c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu17ll, BFu0c_BFu7c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu1c, BFu0c_BFu7c_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu1i, BFu0c_BFu7c_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu1ll, BFu0c_BFu7c_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu1s, BFu0c_BFu7c_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu31i, BFu0c_BFu7c_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu31ll, BFu0c_BFu7c_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu32i, BFu0c_BFu7c_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu32ll, BFu0c_BFu7c_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu33, BFu0c_BFu7c_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu7c, BFu0c_BFu7c_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu7i, BFu0c_BFu7c_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu7ll, BFu0c_BFu7c_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu7s, BFu0c_BFu7c_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu8c, BFu0c_BFu7c_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu8i, BFu0c_BFu7c_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu8ll, BFu0c_BFu7c_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu8s, BFu0c_BFu7c_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu9i, BFu0c_BFu7c_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu9ll, BFu0c_BFu7c_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_BFu9s, BFu0c_BFu7c_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_C, BFu0c_BFu7c_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_D, BFu0c_BFu7c_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_F, BFu0c_BFu7c_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_I, BFu0c_BFu7c_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Ip, BFu0c_BFu7c_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_L, BFu0c_BFu7c_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_S, BFu0c_BFu7c_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Uc, BFu0c_BFu7c_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Ui, BFu0c_BFu7c_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Ul, BFu0c_BFu7c_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Us, BFu0c_BFu7c_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7c_Vp, BFu0c_BFu7c_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i, BFu0c_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu0c, BFu0c_BFu7i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu0i, BFu0c_BFu7i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu0ll, BFu0c_BFu7i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu0s, BFu0c_BFu7i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu15i, BFu0c_BFu7i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu15ll, BFu0c_BFu7i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu15s, BFu0c_BFu7i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu16i, BFu0c_BFu7i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu16ll, BFu0c_BFu7i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu16s, BFu0c_BFu7i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu17i, BFu0c_BFu7i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu17ll, BFu0c_BFu7i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu1c, BFu0c_BFu7i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu1i, BFu0c_BFu7i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu1ll, BFu0c_BFu7i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu1s, BFu0c_BFu7i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu31i, BFu0c_BFu7i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu31ll, BFu0c_BFu7i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu32i, BFu0c_BFu7i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu32ll, BFu0c_BFu7i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu33, BFu0c_BFu7i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu7c, BFu0c_BFu7i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu7i, BFu0c_BFu7i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu7ll, BFu0c_BFu7i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu7s, BFu0c_BFu7i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu8c, BFu0c_BFu7i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu8i, BFu0c_BFu7i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu8ll, BFu0c_BFu7i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu8s, BFu0c_BFu7i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu9i, BFu0c_BFu7i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu9ll, BFu0c_BFu7i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_BFu9s, BFu0c_BFu7i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_C, BFu0c_BFu7i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_D, BFu0c_BFu7i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_F, BFu0c_BFu7i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_I, BFu0c_BFu7i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Ip, BFu0c_BFu7i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_L, BFu0c_BFu7i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_S, BFu0c_BFu7i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Uc, BFu0c_BFu7i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Ui, BFu0c_BFu7i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Ul, BFu0c_BFu7i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Us, BFu0c_BFu7i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7i_Vp, BFu0c_BFu7i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll, BFu0c_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu0c, BFu0c_BFu7ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu0i, BFu0c_BFu7ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu0ll, BFu0c_BFu7ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu0s, BFu0c_BFu7ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu15i, BFu0c_BFu7ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu15ll, BFu0c_BFu7ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu15s, BFu0c_BFu7ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu16i, BFu0c_BFu7ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu16ll, BFu0c_BFu7ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu16s, BFu0c_BFu7ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu17i, BFu0c_BFu7ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu17ll, BFu0c_BFu7ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu1c, BFu0c_BFu7ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu1i, BFu0c_BFu7ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu1ll, BFu0c_BFu7ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu1s, BFu0c_BFu7ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu31i, BFu0c_BFu7ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu31ll, BFu0c_BFu7ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu32i, BFu0c_BFu7ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu32ll, BFu0c_BFu7ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu33, BFu0c_BFu7ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu7c, BFu0c_BFu7ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu7i, BFu0c_BFu7ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu7ll, BFu0c_BFu7ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu7s, BFu0c_BFu7ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu8c, BFu0c_BFu7ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu8i, BFu0c_BFu7ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu8ll, BFu0c_BFu7ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu8s, BFu0c_BFu7ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu9i, BFu0c_BFu7ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu9ll, BFu0c_BFu7ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_BFu9s, BFu0c_BFu7ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_C, BFu0c_BFu7ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_D, BFu0c_BFu7ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_F, BFu0c_BFu7ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_I, BFu0c_BFu7ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Ip, BFu0c_BFu7ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_L, BFu0c_BFu7ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_S, BFu0c_BFu7ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Uc, BFu0c_BFu7ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Ui, BFu0c_BFu7ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Ul, BFu0c_BFu7ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Us, BFu0c_BFu7ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7ll_Vp, BFu0c_BFu7ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s, BFu0c_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu0c, BFu0c_BFu7s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu0i, BFu0c_BFu7s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu0ll, BFu0c_BFu7s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu0s, BFu0c_BFu7s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu15i, BFu0c_BFu7s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu15ll, BFu0c_BFu7s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu15s, BFu0c_BFu7s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu16i, BFu0c_BFu7s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu16ll, BFu0c_BFu7s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu16s, BFu0c_BFu7s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu17i, BFu0c_BFu7s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu17ll, BFu0c_BFu7s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu1c, BFu0c_BFu7s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu1i, BFu0c_BFu7s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu1ll, BFu0c_BFu7s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu1s, BFu0c_BFu7s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu31i, BFu0c_BFu7s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu31ll, BFu0c_BFu7s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu32i, BFu0c_BFu7s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu32ll, BFu0c_BFu7s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu33, BFu0c_BFu7s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu7c, BFu0c_BFu7s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu7i, BFu0c_BFu7s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu7ll, BFu0c_BFu7s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu7s, BFu0c_BFu7s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu8c, BFu0c_BFu7s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu8i, BFu0c_BFu7s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu8ll, BFu0c_BFu7s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu8s, BFu0c_BFu7s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu9i, BFu0c_BFu7s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu9ll, BFu0c_BFu7s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_BFu9s, BFu0c_BFu7s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_C, BFu0c_BFu7s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_D, BFu0c_BFu7s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_F, BFu0c_BFu7s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_I, BFu0c_BFu7s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Ip, BFu0c_BFu7s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_L, BFu0c_BFu7s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_S, BFu0c_BFu7s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Uc, BFu0c_BFu7s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Ui, BFu0c_BFu7s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Ul, BFu0c_BFu7s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Us, BFu0c_BFu7s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu7s_Vp, BFu0c_BFu7s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c, BFu0c_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu0c, BFu0c_BFu8c_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu0i, BFu0c_BFu8c_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu0ll, BFu0c_BFu8c_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu0s, BFu0c_BFu8c_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu15i, BFu0c_BFu8c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu15ll, BFu0c_BFu8c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu15s, BFu0c_BFu8c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu16i, BFu0c_BFu8c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu16ll, BFu0c_BFu8c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu16s, BFu0c_BFu8c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu17i, BFu0c_BFu8c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu17ll, BFu0c_BFu8c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu1c, BFu0c_BFu8c_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu1i, BFu0c_BFu8c_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu1ll, BFu0c_BFu8c_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu1s, BFu0c_BFu8c_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu31i, BFu0c_BFu8c_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu31ll, BFu0c_BFu8c_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu32i, BFu0c_BFu8c_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu32ll, BFu0c_BFu8c_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu33, BFu0c_BFu8c_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu7c, BFu0c_BFu8c_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu7i, BFu0c_BFu8c_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu7ll, BFu0c_BFu8c_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu7s, BFu0c_BFu8c_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu8c, BFu0c_BFu8c_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu8i, BFu0c_BFu8c_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu8ll, BFu0c_BFu8c_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu8s, BFu0c_BFu8c_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu9i, BFu0c_BFu8c_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu9ll, BFu0c_BFu8c_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_BFu9s, BFu0c_BFu8c_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_C, BFu0c_BFu8c_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_D, BFu0c_BFu8c_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_F, BFu0c_BFu8c_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_I, BFu0c_BFu8c_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Ip, BFu0c_BFu8c_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_L, BFu0c_BFu8c_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_S, BFu0c_BFu8c_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Uc, BFu0c_BFu8c_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Ui, BFu0c_BFu8c_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Ul, BFu0c_BFu8c_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Us, BFu0c_BFu8c_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8c_Vp, BFu0c_BFu8c_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i, BFu0c_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu0c, BFu0c_BFu8i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu0i, BFu0c_BFu8i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu0ll, BFu0c_BFu8i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu0s, BFu0c_BFu8i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu15i, BFu0c_BFu8i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu15ll, BFu0c_BFu8i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu15s, BFu0c_BFu8i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu16i, BFu0c_BFu8i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu16ll, BFu0c_BFu8i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu16s, BFu0c_BFu8i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu17i, BFu0c_BFu8i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu17ll, BFu0c_BFu8i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu1c, BFu0c_BFu8i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu1i, BFu0c_BFu8i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu1ll, BFu0c_BFu8i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu1s, BFu0c_BFu8i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu31i, BFu0c_BFu8i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu31ll, BFu0c_BFu8i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu32i, BFu0c_BFu8i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu32ll, BFu0c_BFu8i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu33, BFu0c_BFu8i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu7c, BFu0c_BFu8i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu7i, BFu0c_BFu8i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu7ll, BFu0c_BFu8i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu7s, BFu0c_BFu8i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu8c, BFu0c_BFu8i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu8i, BFu0c_BFu8i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu8ll, BFu0c_BFu8i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu8s, BFu0c_BFu8i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu9i, BFu0c_BFu8i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu9ll, BFu0c_BFu8i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_BFu9s, BFu0c_BFu8i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_C, BFu0c_BFu8i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_D, BFu0c_BFu8i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_F, BFu0c_BFu8i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_I, BFu0c_BFu8i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Ip, BFu0c_BFu8i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_L, BFu0c_BFu8i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_S, BFu0c_BFu8i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Uc, BFu0c_BFu8i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Ui, BFu0c_BFu8i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Ul, BFu0c_BFu8i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Us, BFu0c_BFu8i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8i_Vp, BFu0c_BFu8i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll, BFu0c_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu0c, BFu0c_BFu8ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu0i, BFu0c_BFu8ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu0ll, BFu0c_BFu8ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu0s, BFu0c_BFu8ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu15i, BFu0c_BFu8ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu15ll, BFu0c_BFu8ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu15s, BFu0c_BFu8ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu16i, BFu0c_BFu8ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu16ll, BFu0c_BFu8ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu16s, BFu0c_BFu8ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu17i, BFu0c_BFu8ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu17ll, BFu0c_BFu8ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu1c, BFu0c_BFu8ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu1i, BFu0c_BFu8ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu1ll, BFu0c_BFu8ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu1s, BFu0c_BFu8ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu31i, BFu0c_BFu8ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu31ll, BFu0c_BFu8ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu32i, BFu0c_BFu8ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu32ll, BFu0c_BFu8ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu33, BFu0c_BFu8ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu7c, BFu0c_BFu8ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu7i, BFu0c_BFu8ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu7ll, BFu0c_BFu8ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu7s, BFu0c_BFu8ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu8c, BFu0c_BFu8ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu8i, BFu0c_BFu8ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu8ll, BFu0c_BFu8ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu8s, BFu0c_BFu8ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu9i, BFu0c_BFu8ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu9ll, BFu0c_BFu8ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_BFu9s, BFu0c_BFu8ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_C, BFu0c_BFu8ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_D, BFu0c_BFu8ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_F, BFu0c_BFu8ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_I, BFu0c_BFu8ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Ip, BFu0c_BFu8ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_L, BFu0c_BFu8ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_S, BFu0c_BFu8ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Uc, BFu0c_BFu8ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Ui, BFu0c_BFu8ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Ul, BFu0c_BFu8ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Us, BFu0c_BFu8ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8ll_Vp, BFu0c_BFu8ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s, BFu0c_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu0c, BFu0c_BFu8s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu0i, BFu0c_BFu8s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu0ll, BFu0c_BFu8s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu0s, BFu0c_BFu8s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu15i, BFu0c_BFu8s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu15ll, BFu0c_BFu8s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu15s, BFu0c_BFu8s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu16i, BFu0c_BFu8s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu16ll, BFu0c_BFu8s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu16s, BFu0c_BFu8s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu17i, BFu0c_BFu8s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu17ll, BFu0c_BFu8s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu1c, BFu0c_BFu8s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu1i, BFu0c_BFu8s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu1ll, BFu0c_BFu8s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu1s, BFu0c_BFu8s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu31i, BFu0c_BFu8s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu31ll, BFu0c_BFu8s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu32i, BFu0c_BFu8s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu32ll, BFu0c_BFu8s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu33, BFu0c_BFu8s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu7c, BFu0c_BFu8s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu7i, BFu0c_BFu8s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu7ll, BFu0c_BFu8s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu7s, BFu0c_BFu8s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu8c, BFu0c_BFu8s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu8i, BFu0c_BFu8s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu8ll, BFu0c_BFu8s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu8s, BFu0c_BFu8s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu9i, BFu0c_BFu8s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu9ll, BFu0c_BFu8s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_BFu9s, BFu0c_BFu8s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_C, BFu0c_BFu8s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_D, BFu0c_BFu8s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_F, BFu0c_BFu8s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_I, BFu0c_BFu8s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Ip, BFu0c_BFu8s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_L, BFu0c_BFu8s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_S, BFu0c_BFu8s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Uc, BFu0c_BFu8s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Ui, BFu0c_BFu8s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Ul, BFu0c_BFu8s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Us, BFu0c_BFu8s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu8s_Vp, BFu0c_BFu8s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i, BFu0c_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu0c, BFu0c_BFu9i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu0i, BFu0c_BFu9i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu0ll, BFu0c_BFu9i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu0s, BFu0c_BFu9i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu15i, BFu0c_BFu9i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu15ll, BFu0c_BFu9i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu15s, BFu0c_BFu9i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu16i, BFu0c_BFu9i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu16ll, BFu0c_BFu9i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu16s, BFu0c_BFu9i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu17i, BFu0c_BFu9i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu17ll, BFu0c_BFu9i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu1c, BFu0c_BFu9i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu1i, BFu0c_BFu9i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu1ll, BFu0c_BFu9i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu1s, BFu0c_BFu9i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu31i, BFu0c_BFu9i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu31ll, BFu0c_BFu9i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu32i, BFu0c_BFu9i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu32ll, BFu0c_BFu9i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu33, BFu0c_BFu9i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu7c, BFu0c_BFu9i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu7i, BFu0c_BFu9i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu7ll, BFu0c_BFu9i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu7s, BFu0c_BFu9i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu8c, BFu0c_BFu9i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu8i, BFu0c_BFu9i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu8ll, BFu0c_BFu9i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu8s, BFu0c_BFu9i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu9i, BFu0c_BFu9i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu9ll, BFu0c_BFu9i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_BFu9s, BFu0c_BFu9i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_C, BFu0c_BFu9i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_D, BFu0c_BFu9i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_F, BFu0c_BFu9i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_I, BFu0c_BFu9i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Ip, BFu0c_BFu9i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_L, BFu0c_BFu9i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_S, BFu0c_BFu9i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Uc, BFu0c_BFu9i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Ui, BFu0c_BFu9i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Ul, BFu0c_BFu9i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Us, BFu0c_BFu9i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9i_Vp, BFu0c_BFu9i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll, BFu0c_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu0c, BFu0c_BFu9ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu0i, BFu0c_BFu9ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu0ll, BFu0c_BFu9ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu0s, BFu0c_BFu9ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu15i, BFu0c_BFu9ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu15ll, BFu0c_BFu9ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu15s, BFu0c_BFu9ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu16i, BFu0c_BFu9ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu16ll, BFu0c_BFu9ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu16s, BFu0c_BFu9ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu17i, BFu0c_BFu9ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu17ll, BFu0c_BFu9ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu1c, BFu0c_BFu9ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu1i, BFu0c_BFu9ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu1ll, BFu0c_BFu9ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu1s, BFu0c_BFu9ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu31i, BFu0c_BFu9ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu31ll, BFu0c_BFu9ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu32i, BFu0c_BFu9ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu32ll, BFu0c_BFu9ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu33, BFu0c_BFu9ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu7c, BFu0c_BFu9ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu7i, BFu0c_BFu9ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu7ll, BFu0c_BFu9ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu7s, BFu0c_BFu9ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu8c, BFu0c_BFu9ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu8i, BFu0c_BFu9ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu8ll, BFu0c_BFu9ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu8s, BFu0c_BFu9ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu9i, BFu0c_BFu9ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu9ll, BFu0c_BFu9ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_BFu9s, BFu0c_BFu9ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_C, BFu0c_BFu9ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_D, BFu0c_BFu9ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_F, BFu0c_BFu9ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_I, BFu0c_BFu9ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Ip, BFu0c_BFu9ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_L, BFu0c_BFu9ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_S, BFu0c_BFu9ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Uc, BFu0c_BFu9ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Ui, BFu0c_BFu9ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Ul, BFu0c_BFu9ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Us, BFu0c_BFu9ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9ll_Vp, BFu0c_BFu9ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s, BFu0c_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu0c, BFu0c_BFu9s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu0i, BFu0c_BFu9s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu0ll, BFu0c_BFu9s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu0s, BFu0c_BFu9s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu15i, BFu0c_BFu9s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu15ll, BFu0c_BFu9s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu15s, BFu0c_BFu9s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu16i, BFu0c_BFu9s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu16ll, BFu0c_BFu9s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu16s, BFu0c_BFu9s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu17i, BFu0c_BFu9s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu17ll, BFu0c_BFu9s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu1c, BFu0c_BFu9s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu1i, BFu0c_BFu9s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu1ll, BFu0c_BFu9s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu1s, BFu0c_BFu9s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu31i, BFu0c_BFu9s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu31ll, BFu0c_BFu9s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu32i, BFu0c_BFu9s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu32ll, BFu0c_BFu9s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu33, BFu0c_BFu9s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu7c, BFu0c_BFu9s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu7i, BFu0c_BFu9s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu7ll, BFu0c_BFu9s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu7s, BFu0c_BFu9s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu8c, BFu0c_BFu9s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu8i, BFu0c_BFu9s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu8ll, BFu0c_BFu9s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu8s, BFu0c_BFu9s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu9i, BFu0c_BFu9s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu9ll, BFu0c_BFu9s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_BFu9s, BFu0c_BFu9s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_C, BFu0c_BFu9s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_D, BFu0c_BFu9s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_F, BFu0c_BFu9s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_I, BFu0c_BFu9s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Ip, BFu0c_BFu9s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_L, BFu0c_BFu9s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_S, BFu0c_BFu9s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Uc, BFu0c_BFu9s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Ui, BFu0c_BFu9s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Ul, BFu0c_BFu9s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Us, BFu0c_BFu9s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_BFu9s_Vp, BFu0c_BFu9s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C, BFu0c_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu0c, BFu0c_C_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu0i, BFu0c_C_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu0ll, BFu0c_C_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu0s, BFu0c_C_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu15i, BFu0c_C_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu15ll, BFu0c_C_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu15s, BFu0c_C_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu16i, BFu0c_C_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu16ll, BFu0c_C_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu16s, BFu0c_C_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu17i, BFu0c_C_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu17ll, BFu0c_C_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu1c, BFu0c_C_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu1i, BFu0c_C_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu1ll, BFu0c_C_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu1s, BFu0c_C_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu31i, BFu0c_C_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu31ll, BFu0c_C_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu32i, BFu0c_C_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu32ll, BFu0c_C_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu33, BFu0c_C_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu7c, BFu0c_C_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu7i, BFu0c_C_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu7ll, BFu0c_C_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu7s, BFu0c_C_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu8c, BFu0c_C_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu8i, BFu0c_C_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu8ll, BFu0c_C_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu8s, BFu0c_C_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu9i, BFu0c_C_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu9ll, BFu0c_C_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_BFu9s, BFu0c_C_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_C, BFu0c_C_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_D, BFu0c_C_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_F, BFu0c_C_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_I, BFu0c_C_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Ip, BFu0c_C_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_L, BFu0c_C_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_S, BFu0c_C_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Uc, BFu0c_C_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Ui, BFu0c_C_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Ul, BFu0c_C_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Us, BFu0c_C_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_C_Vp, BFu0c_C_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D, BFu0c_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu0c, BFu0c_D_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu0i, BFu0c_D_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu0ll, BFu0c_D_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu0s, BFu0c_D_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu15i, BFu0c_D_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu15ll, BFu0c_D_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu15s, BFu0c_D_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu16i, BFu0c_D_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu16ll, BFu0c_D_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu16s, BFu0c_D_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu17i, BFu0c_D_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu17ll, BFu0c_D_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu1c, BFu0c_D_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu1i, BFu0c_D_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu1ll, BFu0c_D_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu1s, BFu0c_D_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu31i, BFu0c_D_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu31ll, BFu0c_D_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu32i, BFu0c_D_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu32ll, BFu0c_D_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu33, BFu0c_D_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu7c, BFu0c_D_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu7i, BFu0c_D_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu7ll, BFu0c_D_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu7s, BFu0c_D_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu8c, BFu0c_D_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu8i, BFu0c_D_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu8ll, BFu0c_D_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu8s, BFu0c_D_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu9i, BFu0c_D_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu9ll, BFu0c_D_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_BFu9s, BFu0c_D_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_C, BFu0c_D_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_D, BFu0c_D_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_F, BFu0c_D_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_I, BFu0c_D_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Ip, BFu0c_D_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_L, BFu0c_D_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_S, BFu0c_D_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Uc, BFu0c_D_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Ui, BFu0c_D_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Ul, BFu0c_D_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Us, BFu0c_D_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_D_Vp, BFu0c_D_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F, BFu0c_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu0c, BFu0c_F_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu0i, BFu0c_F_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu0ll, BFu0c_F_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu0s, BFu0c_F_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu15i, BFu0c_F_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu15ll, BFu0c_F_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu15s, BFu0c_F_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu16i, BFu0c_F_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu16ll, BFu0c_F_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu16s, BFu0c_F_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu17i, BFu0c_F_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu17ll, BFu0c_F_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu1c, BFu0c_F_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu1i, BFu0c_F_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu1ll, BFu0c_F_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu1s, BFu0c_F_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu31i, BFu0c_F_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu31ll, BFu0c_F_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu32i, BFu0c_F_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu32ll, BFu0c_F_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu33, BFu0c_F_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu7c, BFu0c_F_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu7i, BFu0c_F_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu7ll, BFu0c_F_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu7s, BFu0c_F_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu8c, BFu0c_F_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu8i, BFu0c_F_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu8ll, BFu0c_F_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu8s, BFu0c_F_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu9i, BFu0c_F_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu9ll, BFu0c_F_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_BFu9s, BFu0c_F_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_C, BFu0c_F_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_D, BFu0c_F_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_F, BFu0c_F_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_I, BFu0c_F_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Ip, BFu0c_F_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_L, BFu0c_F_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_S, BFu0c_F_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Uc, BFu0c_F_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Ui, BFu0c_F_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Ul, BFu0c_F_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Us, BFu0c_F_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_F_Vp, BFu0c_F_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I, BFu0c_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu0c, BFu0c_I_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu0i, BFu0c_I_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu0ll, BFu0c_I_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu0s, BFu0c_I_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu15i, BFu0c_I_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu15ll, BFu0c_I_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu15s, BFu0c_I_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu16i, BFu0c_I_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu16ll, BFu0c_I_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu16s, BFu0c_I_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu17i, BFu0c_I_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu17ll, BFu0c_I_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu1c, BFu0c_I_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu1i, BFu0c_I_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu1ll, BFu0c_I_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu1s, BFu0c_I_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu31i, BFu0c_I_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu31ll, BFu0c_I_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu32i, BFu0c_I_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu32ll, BFu0c_I_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu33, BFu0c_I_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu7c, BFu0c_I_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu7i, BFu0c_I_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu7ll, BFu0c_I_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu7s, BFu0c_I_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu8c, BFu0c_I_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu8i, BFu0c_I_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu8ll, BFu0c_I_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu8s, BFu0c_I_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu9i, BFu0c_I_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu9ll, BFu0c_I_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_BFu9s, BFu0c_I_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_C, BFu0c_I_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_D, BFu0c_I_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_F, BFu0c_I_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_I, BFu0c_I_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Ip, BFu0c_I_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_L, BFu0c_I_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_S, BFu0c_I_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Uc, BFu0c_I_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Ui, BFu0c_I_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Ul, BFu0c_I_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Us, BFu0c_I_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_I_Vp, BFu0c_I_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip, BFu0c_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu0c, BFu0c_Ip_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu0i, BFu0c_Ip_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu0ll, BFu0c_Ip_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu0s, BFu0c_Ip_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu15i, BFu0c_Ip_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu15ll, BFu0c_Ip_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu15s, BFu0c_Ip_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu16i, BFu0c_Ip_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu16ll, BFu0c_Ip_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu16s, BFu0c_Ip_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu17i, BFu0c_Ip_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu17ll, BFu0c_Ip_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu1c, BFu0c_Ip_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu1i, BFu0c_Ip_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu1ll, BFu0c_Ip_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu1s, BFu0c_Ip_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu31i, BFu0c_Ip_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu31ll, BFu0c_Ip_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu32i, BFu0c_Ip_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu32ll, BFu0c_Ip_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu33, BFu0c_Ip_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu7c, BFu0c_Ip_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu7i, BFu0c_Ip_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu7ll, BFu0c_Ip_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu7s, BFu0c_Ip_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu8c, BFu0c_Ip_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu8i, BFu0c_Ip_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu8ll, BFu0c_Ip_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu8s, BFu0c_Ip_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu9i, BFu0c_Ip_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu9ll, BFu0c_Ip_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_BFu9s, BFu0c_Ip_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_C, BFu0c_Ip_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_D, BFu0c_Ip_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_F, BFu0c_Ip_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_I, BFu0c_Ip_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Ip, BFu0c_Ip_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_L, BFu0c_Ip_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_S, BFu0c_Ip_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Uc, BFu0c_Ip_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Ui, BFu0c_Ip_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Ul, BFu0c_Ip_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Us, BFu0c_Ip_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ip_Vp, BFu0c_Ip_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L, BFu0c_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu0c, BFu0c_L_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu0i, BFu0c_L_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu0ll, BFu0c_L_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu0s, BFu0c_L_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu15i, BFu0c_L_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu15ll, BFu0c_L_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu15s, BFu0c_L_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu16i, BFu0c_L_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu16ll, BFu0c_L_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu16s, BFu0c_L_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu17i, BFu0c_L_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu17ll, BFu0c_L_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu1c, BFu0c_L_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu1i, BFu0c_L_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu1ll, BFu0c_L_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu1s, BFu0c_L_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu31i, BFu0c_L_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu31ll, BFu0c_L_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu32i, BFu0c_L_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu32ll, BFu0c_L_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu33, BFu0c_L_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu7c, BFu0c_L_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu7i, BFu0c_L_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu7ll, BFu0c_L_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu7s, BFu0c_L_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu8c, BFu0c_L_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu8i, BFu0c_L_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu8ll, BFu0c_L_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu8s, BFu0c_L_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu9i, BFu0c_L_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu9ll, BFu0c_L_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_BFu9s, BFu0c_L_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_C, BFu0c_L_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_D, BFu0c_L_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_F, BFu0c_L_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_I, BFu0c_L_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Ip, BFu0c_L_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_L, BFu0c_L_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_S, BFu0c_L_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Uc, BFu0c_L_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Ui, BFu0c_L_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Ul, BFu0c_L_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Us, BFu0c_L_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_L_Vp, BFu0c_L_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S, BFu0c_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu0c, BFu0c_S_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu0i, BFu0c_S_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu0ll, BFu0c_S_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu0s, BFu0c_S_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu15i, BFu0c_S_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu15ll, BFu0c_S_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu15s, BFu0c_S_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu16i, BFu0c_S_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu16ll, BFu0c_S_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu16s, BFu0c_S_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu17i, BFu0c_S_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu17ll, BFu0c_S_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu1c, BFu0c_S_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu1i, BFu0c_S_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu1ll, BFu0c_S_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu1s, BFu0c_S_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu31i, BFu0c_S_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu31ll, BFu0c_S_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu32i, BFu0c_S_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu32ll, BFu0c_S_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu33, BFu0c_S_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu7c, BFu0c_S_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu7i, BFu0c_S_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu7ll, BFu0c_S_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu7s, BFu0c_S_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu8c, BFu0c_S_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu8i, BFu0c_S_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu8ll, BFu0c_S_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu8s, BFu0c_S_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu9i, BFu0c_S_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu9ll, BFu0c_S_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_BFu9s, BFu0c_S_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_C, BFu0c_S_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_D, BFu0c_S_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_F, BFu0c_S_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_I, BFu0c_S_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Ip, BFu0c_S_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_L, BFu0c_S_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_S, BFu0c_S_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Uc, BFu0c_S_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Ui, BFu0c_S_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Ul, BFu0c_S_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Us, BFu0c_S_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_S_Vp, BFu0c_S_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc, BFu0c_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu0c, BFu0c_Uc_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu0i, BFu0c_Uc_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu0ll, BFu0c_Uc_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu0s, BFu0c_Uc_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu15i, BFu0c_Uc_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu15ll, BFu0c_Uc_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu15s, BFu0c_Uc_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu16i, BFu0c_Uc_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu16ll, BFu0c_Uc_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu16s, BFu0c_Uc_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu17i, BFu0c_Uc_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu17ll, BFu0c_Uc_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu1c, BFu0c_Uc_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu1i, BFu0c_Uc_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu1ll, BFu0c_Uc_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu1s, BFu0c_Uc_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu31i, BFu0c_Uc_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu31ll, BFu0c_Uc_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu32i, BFu0c_Uc_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu32ll, BFu0c_Uc_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu33, BFu0c_Uc_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu7c, BFu0c_Uc_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu7i, BFu0c_Uc_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu7ll, BFu0c_Uc_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu7s, BFu0c_Uc_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu8c, BFu0c_Uc_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu8i, BFu0c_Uc_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu8ll, BFu0c_Uc_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu8s, BFu0c_Uc_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu9i, BFu0c_Uc_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu9ll, BFu0c_Uc_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_BFu9s, BFu0c_Uc_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_C, BFu0c_Uc_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_D, BFu0c_Uc_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_F, BFu0c_Uc_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_I, BFu0c_Uc_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Ip, BFu0c_Uc_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_L, BFu0c_Uc_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_S, BFu0c_Uc_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Uc, BFu0c_Uc_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Ui, BFu0c_Uc_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Ul, BFu0c_Uc_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Us, BFu0c_Uc_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Uc_Vp, BFu0c_Uc_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui, BFu0c_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu0c, BFu0c_Ui_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu0i, BFu0c_Ui_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu0ll, BFu0c_Ui_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu0s, BFu0c_Ui_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu15i, BFu0c_Ui_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu15ll, BFu0c_Ui_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu15s, BFu0c_Ui_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu16i, BFu0c_Ui_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu16ll, BFu0c_Ui_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu16s, BFu0c_Ui_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu17i, BFu0c_Ui_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu17ll, BFu0c_Ui_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu1c, BFu0c_Ui_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu1i, BFu0c_Ui_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu1ll, BFu0c_Ui_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu1s, BFu0c_Ui_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu31i, BFu0c_Ui_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu31ll, BFu0c_Ui_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu32i, BFu0c_Ui_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu32ll, BFu0c_Ui_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu33, BFu0c_Ui_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu7c, BFu0c_Ui_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu7i, BFu0c_Ui_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu7ll, BFu0c_Ui_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu7s, BFu0c_Ui_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu8c, BFu0c_Ui_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu8i, BFu0c_Ui_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu8ll, BFu0c_Ui_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu8s, BFu0c_Ui_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu9i, BFu0c_Ui_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu9ll, BFu0c_Ui_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_BFu9s, BFu0c_Ui_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_C, BFu0c_Ui_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_D, BFu0c_Ui_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_F, BFu0c_Ui_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_I, BFu0c_Ui_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Ip, BFu0c_Ui_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_L, BFu0c_Ui_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_S, BFu0c_Ui_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Uc, BFu0c_Ui_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Ui, BFu0c_Ui_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Ul, BFu0c_Ui_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Us, BFu0c_Ui_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ui_Vp, BFu0c_Ui_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul, BFu0c_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu0c, BFu0c_Ul_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu0i, BFu0c_Ul_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu0ll, BFu0c_Ul_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu0s, BFu0c_Ul_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu15i, BFu0c_Ul_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu15ll, BFu0c_Ul_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu15s, BFu0c_Ul_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu16i, BFu0c_Ul_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu16ll, BFu0c_Ul_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu16s, BFu0c_Ul_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu17i, BFu0c_Ul_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu17ll, BFu0c_Ul_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu1c, BFu0c_Ul_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu1i, BFu0c_Ul_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu1ll, BFu0c_Ul_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu1s, BFu0c_Ul_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu31i, BFu0c_Ul_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu31ll, BFu0c_Ul_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu32i, BFu0c_Ul_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu32ll, BFu0c_Ul_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu33, BFu0c_Ul_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu7c, BFu0c_Ul_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu7i, BFu0c_Ul_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu7ll, BFu0c_Ul_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu7s, BFu0c_Ul_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu8c, BFu0c_Ul_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu8i, BFu0c_Ul_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu8ll, BFu0c_Ul_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu8s, BFu0c_Ul_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu9i, BFu0c_Ul_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu9ll, BFu0c_Ul_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_BFu9s, BFu0c_Ul_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_C, BFu0c_Ul_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_D, BFu0c_Ul_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_F, BFu0c_Ul_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_I, BFu0c_Ul_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Ip, BFu0c_Ul_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_L, BFu0c_Ul_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_S, BFu0c_Ul_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Uc, BFu0c_Ul_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Ui, BFu0c_Ul_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Ul, BFu0c_Ul_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Us, BFu0c_Ul_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Ul_Vp, BFu0c_Ul_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us, BFu0c_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu0c, BFu0c_Us_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu0i, BFu0c_Us_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu0ll, BFu0c_Us_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu0s, BFu0c_Us_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu15i, BFu0c_Us_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu15ll, BFu0c_Us_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu15s, BFu0c_Us_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu16i, BFu0c_Us_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu16ll, BFu0c_Us_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu16s, BFu0c_Us_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu17i, BFu0c_Us_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu17ll, BFu0c_Us_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu1c, BFu0c_Us_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu1i, BFu0c_Us_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu1ll, BFu0c_Us_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu1s, BFu0c_Us_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu31i, BFu0c_Us_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu31ll, BFu0c_Us_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu32i, BFu0c_Us_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu32ll, BFu0c_Us_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu33, BFu0c_Us_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu7c, BFu0c_Us_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu7i, BFu0c_Us_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu7ll, BFu0c_Us_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu7s, BFu0c_Us_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu8c, BFu0c_Us_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu8i, BFu0c_Us_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu8ll, BFu0c_Us_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu8s, BFu0c_Us_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu9i, BFu0c_Us_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu9ll, BFu0c_Us_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_BFu9s, BFu0c_Us_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_C, BFu0c_Us_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_D, BFu0c_Us_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_F, BFu0c_Us_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_I, BFu0c_Us_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Ip, BFu0c_Us_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_L, BFu0c_Us_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_S, BFu0c_Us_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Uc, BFu0c_Us_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Ui, BFu0c_Us_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Ul, BFu0c_Us_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Us, BFu0c_Us_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Us_Vp, BFu0c_Us_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp, BFu0c_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu0c, BFu0c_Vp_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu0i, BFu0c_Vp_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu0ll, BFu0c_Vp_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu0s, BFu0c_Vp_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu15i, BFu0c_Vp_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu15ll, BFu0c_Vp_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu15s, BFu0c_Vp_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu16i, BFu0c_Vp_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu16ll, BFu0c_Vp_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu16s, BFu0c_Vp_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu17i, BFu0c_Vp_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu17ll, BFu0c_Vp_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu1c, BFu0c_Vp_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu1i, BFu0c_Vp_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu1ll, BFu0c_Vp_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu1s, BFu0c_Vp_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu31i, BFu0c_Vp_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu31ll, BFu0c_Vp_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu32i, BFu0c_Vp_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu32ll, BFu0c_Vp_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu33, BFu0c_Vp_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu7c, BFu0c_Vp_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu7i, BFu0c_Vp_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu7ll, BFu0c_Vp_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu7s, BFu0c_Vp_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu8c, BFu0c_Vp_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu8i, BFu0c_Vp_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu8ll, BFu0c_Vp_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu8s, BFu0c_Vp_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu9i, BFu0c_Vp_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu9ll, BFu0c_Vp_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_BFu9s, BFu0c_Vp_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_C, BFu0c_Vp_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_D, BFu0c_Vp_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_F, BFu0c_Vp_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_I, BFu0c_Vp_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Ip, BFu0c_Vp_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_L, BFu0c_Vp_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_S, BFu0c_Vp_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Uc, BFu0c_Vp_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Ui, BFu0c_Vp_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Ul, BFu0c_Vp_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Us, BFu0c_Vp_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0c_Vp_Vp, BFu0c_Vp_Vp)
//============================================================================


struct  BFu0i  {
  unsigned int  :0;
};
//SIG(1 BFu0i) C1{ Fi:0}



static void Test_BFu0i()
{
  {
    init_simple_test("BFu0i");
    static STRUCT_IF_C BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i, BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c, BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c, BFu0i_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFs0c, BFu0i_BFs0c_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFs0i, BFu0i_BFs0c_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFs0ll, BFu0i_BFs0c_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFs0s, BFu0i_BFs0c_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFu0c, BFu0i_BFs0c_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFu0i, BFu0i_BFs0c_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFu0ll, BFu0i_BFs0c_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0c_BFu0s, BFu0i_BFs0c_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i, BFu0i_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFs0c, BFu0i_BFs0c_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFs0i, BFu0i_BFs0c_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFs0ll, BFu0i_BFs0c_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFs0s, BFu0i_BFs0c_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFu0c, BFu0i_BFs0c_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFu0i, BFu0i_BFs0c_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFu0ll, BFu0i_BFs0c_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0i_BFu0s, BFu0i_BFs0c_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll, BFu0i_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFs0c, BFu0i_BFs0c_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFs0i, BFu0i_BFs0c_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFs0ll, BFu0i_BFs0c_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFs0s, BFu0i_BFs0c_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFu0c, BFu0i_BFs0c_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFu0i, BFu0i_BFs0c_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFu0ll, BFu0i_BFs0c_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0ll_BFu0s, BFu0i_BFs0c_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s, BFu0i_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFs0c, BFu0i_BFs0c_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFs0i, BFu0i_BFs0c_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFs0ll, BFu0i_BFs0c_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFs0s, BFu0i_BFs0c_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFu0c, BFu0i_BFs0c_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFu0i, BFu0i_BFs0c_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFu0ll, BFu0i_BFs0c_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFs0s_BFu0s, BFu0i_BFs0c_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c, BFu0i_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFs0c, BFu0i_BFs0c_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFs0i, BFu0i_BFs0c_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFs0ll, BFu0i_BFs0c_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFs0s, BFu0i_BFs0c_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFu0c, BFu0i_BFs0c_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFu0i, BFu0i_BFs0c_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFu0ll, BFu0i_BFs0c_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0c_BFu0s, BFu0i_BFs0c_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i, BFu0i_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFs0c, BFu0i_BFs0c_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFs0i, BFu0i_BFs0c_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFs0ll, BFu0i_BFs0c_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFs0s, BFu0i_BFs0c_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFu0c, BFu0i_BFs0c_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFu0i, BFu0i_BFs0c_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFu0ll, BFu0i_BFs0c_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0i_BFu0s, BFu0i_BFs0c_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll, BFu0i_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFs0c, BFu0i_BFs0c_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFs0i, BFu0i_BFs0c_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFs0ll, BFu0i_BFs0c_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFs0s, BFu0i_BFs0c_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFu0c, BFu0i_BFs0c_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFu0i, BFu0i_BFs0c_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFu0ll, BFu0i_BFs0c_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0ll_BFu0s, BFu0i_BFs0c_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s, BFu0i_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFs0c, BFu0i_BFs0c_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFs0i, BFu0i_BFs0c_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFs0ll, BFu0i_BFs0c_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFs0s, BFu0i_BFs0c_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFu0c, BFu0i_BFs0c_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFu0i, BFu0i_BFs0c_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFu0ll, BFu0i_BFs0c_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0c_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0c_BFu0s_BFu0s, BFu0i_BFs0c_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i, BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c, BFu0i_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFs0c, BFu0i_BFs0i_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFs0i, BFu0i_BFs0i_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFs0ll, BFu0i_BFs0i_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFs0s, BFu0i_BFs0i_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFu0c, BFu0i_BFs0i_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFu0i, BFu0i_BFs0i_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFu0ll, BFu0i_BFs0i_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0c_BFu0s, BFu0i_BFs0i_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i, BFu0i_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFs0c, BFu0i_BFs0i_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFs0i, BFu0i_BFs0i_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFs0ll, BFu0i_BFs0i_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFs0s, BFu0i_BFs0i_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFu0c, BFu0i_BFs0i_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFu0i, BFu0i_BFs0i_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFu0ll, BFu0i_BFs0i_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0i_BFu0s, BFu0i_BFs0i_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll, BFu0i_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFs0c, BFu0i_BFs0i_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFs0i, BFu0i_BFs0i_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFs0ll, BFu0i_BFs0i_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFs0s, BFu0i_BFs0i_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFu0c, BFu0i_BFs0i_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFu0i, BFu0i_BFs0i_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFu0ll, BFu0i_BFs0i_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0ll_BFu0s, BFu0i_BFs0i_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s, BFu0i_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFs0c, BFu0i_BFs0i_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFs0i, BFu0i_BFs0i_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFs0ll, BFu0i_BFs0i_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFs0s, BFu0i_BFs0i_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFu0c, BFu0i_BFs0i_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFu0i, BFu0i_BFs0i_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFu0ll, BFu0i_BFs0i_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFs0s_BFu0s, BFu0i_BFs0i_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c, BFu0i_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFs0c, BFu0i_BFs0i_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFs0i, BFu0i_BFs0i_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFs0ll, BFu0i_BFs0i_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFs0s, BFu0i_BFs0i_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFu0c, BFu0i_BFs0i_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFu0i, BFu0i_BFs0i_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFu0ll, BFu0i_BFs0i_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0c_BFu0s, BFu0i_BFs0i_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i, BFu0i_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFs0c, BFu0i_BFs0i_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFs0i, BFu0i_BFs0i_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFs0ll, BFu0i_BFs0i_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFs0s, BFu0i_BFs0i_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFu0c, BFu0i_BFs0i_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFu0i, BFu0i_BFs0i_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFu0ll, BFu0i_BFs0i_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0i_BFu0s, BFu0i_BFs0i_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll, BFu0i_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFs0c, BFu0i_BFs0i_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFs0i, BFu0i_BFs0i_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFs0ll, BFu0i_BFs0i_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFs0s, BFu0i_BFs0i_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFu0c, BFu0i_BFs0i_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFu0i, BFu0i_BFs0i_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFu0ll, BFu0i_BFs0i_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0ll_BFu0s, BFu0i_BFs0i_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s, BFu0i_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFs0c, BFu0i_BFs0i_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFs0i, BFu0i_BFs0i_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFs0ll, BFu0i_BFs0i_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFs0s, BFu0i_BFs0i_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFu0c, BFu0i_BFs0i_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFu0i, BFu0i_BFs0i_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFu0ll, BFu0i_BFs0i_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0i_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0i_BFu0s_BFu0s, BFu0i_BFs0i_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll, BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c, BFu0i_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFs0c, BFu0i_BFs0ll_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFs0i, BFu0i_BFs0ll_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFs0ll, BFu0i_BFs0ll_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFs0s, BFu0i_BFs0ll_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFu0c, BFu0i_BFs0ll_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFu0i, BFu0i_BFs0ll_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFu0ll, BFu0i_BFs0ll_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0c_BFu0s, BFu0i_BFs0ll_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i, BFu0i_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFs0c, BFu0i_BFs0ll_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFs0i, BFu0i_BFs0ll_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFs0ll, BFu0i_BFs0ll_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFs0s, BFu0i_BFs0ll_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFu0c, BFu0i_BFs0ll_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFu0i, BFu0i_BFs0ll_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFu0ll, BFu0i_BFs0ll_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0i_BFu0s, BFu0i_BFs0ll_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll, BFu0i_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFs0c, BFu0i_BFs0ll_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFs0i, BFu0i_BFs0ll_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFs0ll, BFu0i_BFs0ll_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFs0s, BFu0i_BFs0ll_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFu0c, BFu0i_BFs0ll_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFu0i, BFu0i_BFs0ll_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFu0ll, BFu0i_BFs0ll_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0ll_BFu0s, BFu0i_BFs0ll_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s, BFu0i_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFs0c, BFu0i_BFs0ll_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFs0i, BFu0i_BFs0ll_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFs0ll, BFu0i_BFs0ll_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFs0s, BFu0i_BFs0ll_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFu0c, BFu0i_BFs0ll_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFu0i, BFu0i_BFs0ll_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFu0ll, BFu0i_BFs0ll_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFs0s_BFu0s, BFu0i_BFs0ll_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c, BFu0i_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFs0c, BFu0i_BFs0ll_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFs0i, BFu0i_BFs0ll_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFs0ll, BFu0i_BFs0ll_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFs0s, BFu0i_BFs0ll_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFu0c, BFu0i_BFs0ll_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFu0i, BFu0i_BFs0ll_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFu0ll, BFu0i_BFs0ll_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0c_BFu0s, BFu0i_BFs0ll_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i, BFu0i_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFs0c, BFu0i_BFs0ll_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFs0i, BFu0i_BFs0ll_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFs0ll, BFu0i_BFs0ll_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFs0s, BFu0i_BFs0ll_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFu0c, BFu0i_BFs0ll_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFu0i, BFu0i_BFs0ll_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFu0ll, BFu0i_BFs0ll_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0i_BFu0s, BFu0i_BFs0ll_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll, BFu0i_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFs0c, BFu0i_BFs0ll_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFs0i, BFu0i_BFs0ll_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFs0ll, BFu0i_BFs0ll_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFs0s, BFu0i_BFs0ll_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFu0c, BFu0i_BFs0ll_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFu0i, BFu0i_BFs0ll_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFu0ll, BFu0i_BFs0ll_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0ll_BFu0s, BFu0i_BFs0ll_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s, BFu0i_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFs0c, BFu0i_BFs0ll_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFs0i, BFu0i_BFs0ll_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFs0ll, BFu0i_BFs0ll_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFs0s, BFu0i_BFs0ll_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFu0c, BFu0i_BFs0ll_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFu0i, BFu0i_BFs0ll_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFu0ll, BFu0i_BFs0ll_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0ll_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0ll_BFu0s_BFu0s, BFu0i_BFs0ll_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s, BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c, BFu0i_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFs0c, BFu0i_BFs0s_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFs0i, BFu0i_BFs0s_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFs0ll, BFu0i_BFs0s_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFs0s, BFu0i_BFs0s_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFu0c, BFu0i_BFs0s_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFu0i, BFu0i_BFs0s_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFu0ll, BFu0i_BFs0s_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0c_BFu0s, BFu0i_BFs0s_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i, BFu0i_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFs0c, BFu0i_BFs0s_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFs0i, BFu0i_BFs0s_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFs0ll, BFu0i_BFs0s_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFs0s, BFu0i_BFs0s_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFu0c, BFu0i_BFs0s_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFu0i, BFu0i_BFs0s_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFu0ll, BFu0i_BFs0s_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0i_BFu0s, BFu0i_BFs0s_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll, BFu0i_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFs0c, BFu0i_BFs0s_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFs0i, BFu0i_BFs0s_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFs0ll, BFu0i_BFs0s_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFs0s, BFu0i_BFs0s_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFu0c, BFu0i_BFs0s_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFu0i, BFu0i_BFs0s_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFu0ll, BFu0i_BFs0s_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0ll_BFu0s, BFu0i_BFs0s_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s, BFu0i_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFs0c, BFu0i_BFs0s_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFs0i, BFu0i_BFs0s_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFs0ll, BFu0i_BFs0s_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFs0s, BFu0i_BFs0s_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFu0c, BFu0i_BFs0s_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFu0i, BFu0i_BFs0s_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFu0ll, BFu0i_BFs0s_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFs0s_BFu0s, BFu0i_BFs0s_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c, BFu0i_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFs0c, BFu0i_BFs0s_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFs0i, BFu0i_BFs0s_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFs0ll, BFu0i_BFs0s_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFs0s, BFu0i_BFs0s_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFu0c, BFu0i_BFs0s_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFu0i, BFu0i_BFs0s_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFu0ll, BFu0i_BFs0s_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0c_BFu0s, BFu0i_BFs0s_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i, BFu0i_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFs0c, BFu0i_BFs0s_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFs0i, BFu0i_BFs0s_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFs0ll, BFu0i_BFs0s_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFs0s, BFu0i_BFs0s_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFu0c, BFu0i_BFs0s_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFu0i, BFu0i_BFs0s_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFu0ll, BFu0i_BFs0s_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0i_BFu0s, BFu0i_BFs0s_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll, BFu0i_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFs0c, BFu0i_BFs0s_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFs0i, BFu0i_BFs0s_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFs0ll, BFu0i_BFs0s_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFs0s, BFu0i_BFs0s_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFu0c, BFu0i_BFs0s_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFu0i, BFu0i_BFs0s_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFu0ll, BFu0i_BFs0s_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0ll_BFu0s, BFu0i_BFs0s_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s, BFu0i_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFs0c, BFu0i_BFs0s_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFs0i, BFu0i_BFs0s_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFs0ll, BFu0i_BFs0s_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFs0s, BFu0i_BFs0s_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFu0c, BFu0i_BFs0s_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFu0i, BFu0i_BFs0s_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFu0ll, BFu0i_BFs0s_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFs0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFs0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFs0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFs0s_BFu0s_BFu0s, BFu0i_BFs0s_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c, BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c, BFu0i_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFs0c, BFu0i_BFu0c_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFs0i, BFu0i_BFu0c_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFs0ll, BFu0i_BFu0c_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFs0s, BFu0i_BFu0c_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFu0c, BFu0i_BFu0c_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFu0i, BFu0i_BFu0c_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFu0ll, BFu0i_BFu0c_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0c_BFu0s, BFu0i_BFu0c_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i, BFu0i_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFs0c, BFu0i_BFu0c_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFs0i, BFu0i_BFu0c_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFs0ll, BFu0i_BFu0c_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFs0s, BFu0i_BFu0c_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFu0c, BFu0i_BFu0c_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFu0i, BFu0i_BFu0c_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFu0ll, BFu0i_BFu0c_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0i_BFu0s, BFu0i_BFu0c_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll, BFu0i_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFs0c, BFu0i_BFu0c_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFs0i, BFu0i_BFu0c_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFs0ll, BFu0i_BFu0c_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFs0s, BFu0i_BFu0c_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFu0c, BFu0i_BFu0c_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFu0i, BFu0i_BFu0c_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFu0ll, BFu0i_BFu0c_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0ll_BFu0s, BFu0i_BFu0c_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s, BFu0i_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFs0c, BFu0i_BFu0c_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFs0i, BFu0i_BFu0c_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFs0ll, BFu0i_BFu0c_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFs0s, BFu0i_BFu0c_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFu0c, BFu0i_BFu0c_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFu0i, BFu0i_BFu0c_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFu0ll, BFu0i_BFu0c_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFs0s_BFu0s, BFu0i_BFu0c_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c, BFu0i_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFs0c, BFu0i_BFu0c_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFs0i, BFu0i_BFu0c_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFs0ll, BFu0i_BFu0c_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFs0s, BFu0i_BFu0c_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFu0c, BFu0i_BFu0c_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFu0i, BFu0i_BFu0c_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFu0ll, BFu0i_BFu0c_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0c_BFu0s, BFu0i_BFu0c_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i, BFu0i_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFs0c, BFu0i_BFu0c_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFs0i, BFu0i_BFu0c_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFs0ll, BFu0i_BFu0c_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFs0s, BFu0i_BFu0c_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFu0c, BFu0i_BFu0c_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFu0i, BFu0i_BFu0c_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFu0ll, BFu0i_BFu0c_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0i_BFu0s, BFu0i_BFu0c_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll, BFu0i_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFs0c, BFu0i_BFu0c_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFs0i, BFu0i_BFu0c_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFs0ll, BFu0i_BFu0c_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFs0s, BFu0i_BFu0c_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFu0c, BFu0i_BFu0c_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFu0i, BFu0i_BFu0c_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFu0ll, BFu0i_BFu0c_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0ll_BFu0s, BFu0i_BFu0c_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s, BFu0i_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFs0c, BFu0i_BFu0c_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFs0i, BFu0i_BFu0c_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFs0ll, BFu0i_BFu0c_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFs0s, BFu0i_BFu0c_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFu0c, BFu0i_BFu0c_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFu0i, BFu0i_BFu0c_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFu0ll, BFu0i_BFu0c_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0c_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu0s_BFu0s, BFu0i_BFu0c_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu15i, BFu0i_BFu0c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu15ll, BFu0i_BFu0c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu15s, BFu0i_BFu0c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu16i, BFu0i_BFu0c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu16ll, BFu0i_BFu0c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu16s, BFu0i_BFu0c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu17i, BFu0i_BFu0c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu17ll, BFu0i_BFu0c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu1c, BFu0i_BFu0c_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu1i, BFu0i_BFu0c_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu1ll, BFu0i_BFu0c_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu1s, BFu0i_BFu0c_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu31i, BFu0i_BFu0c_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu31ll, BFu0i_BFu0c_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu32i, BFu0i_BFu0c_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu32ll, BFu0i_BFu0c_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu33, BFu0i_BFu0c_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu7c, BFu0i_BFu0c_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu7i, BFu0i_BFu0c_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu7ll, BFu0i_BFu0c_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu7s, BFu0i_BFu0c_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu8c, BFu0i_BFu0c_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu8i, BFu0i_BFu0c_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu8ll, BFu0i_BFu0c_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu8s, BFu0i_BFu0c_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu9i, BFu0i_BFu0c_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu9ll, BFu0i_BFu0c_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_BFu9s, BFu0i_BFu0c_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_C, BFu0i_BFu0c_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_D, BFu0i_BFu0c_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_F, BFu0i_BFu0c_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_I, BFu0i_BFu0c_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Ip, BFu0i_BFu0c_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_L, BFu0i_BFu0c_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_S, BFu0i_BFu0c_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Uc, BFu0i_BFu0c_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Ui, BFu0i_BFu0c_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Ul, BFu0i_BFu0c_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Us, BFu0i_BFu0c_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0c_Vp, BFu0i_BFu0c_Vp)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i, BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c, BFu0i_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFs0c, BFu0i_BFu0i_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFs0i, BFu0i_BFu0i_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFs0ll, BFu0i_BFu0i_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFs0s, BFu0i_BFu0i_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFu0c, BFu0i_BFu0i_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFu0i, BFu0i_BFu0i_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFu0ll, BFu0i_BFu0i_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0c_BFu0s, BFu0i_BFu0i_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i, BFu0i_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFs0c, BFu0i_BFu0i_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFs0i, BFu0i_BFu0i_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFs0ll, BFu0i_BFu0i_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFs0s, BFu0i_BFu0i_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFu0c, BFu0i_BFu0i_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFu0i, BFu0i_BFu0i_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFu0ll, BFu0i_BFu0i_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0i_BFu0s, BFu0i_BFu0i_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll, BFu0i_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFs0c, BFu0i_BFu0i_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFs0i, BFu0i_BFu0i_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFs0ll, BFu0i_BFu0i_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFs0s, BFu0i_BFu0i_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFu0c, BFu0i_BFu0i_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFu0i, BFu0i_BFu0i_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFu0ll, BFu0i_BFu0i_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0ll_BFu0s, BFu0i_BFu0i_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s, BFu0i_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFs0c, BFu0i_BFu0i_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFs0i, BFu0i_BFu0i_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFs0ll, BFu0i_BFu0i_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFs0s, BFu0i_BFu0i_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFu0c, BFu0i_BFu0i_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFu0i, BFu0i_BFu0i_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFu0ll, BFu0i_BFu0i_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFs0s_BFu0s, BFu0i_BFu0i_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c, BFu0i_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFs0c, BFu0i_BFu0i_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFs0i, BFu0i_BFu0i_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFs0ll, BFu0i_BFu0i_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFs0s, BFu0i_BFu0i_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFu0c, BFu0i_BFu0i_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFu0i, BFu0i_BFu0i_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFu0ll, BFu0i_BFu0i_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0c_BFu0s, BFu0i_BFu0i_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i, BFu0i_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFs0c, BFu0i_BFu0i_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFs0i, BFu0i_BFu0i_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFs0ll, BFu0i_BFu0i_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFs0s, BFu0i_BFu0i_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFu0c, BFu0i_BFu0i_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFu0i, BFu0i_BFu0i_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFu0ll, BFu0i_BFu0i_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0i_BFu0s, BFu0i_BFu0i_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll, BFu0i_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFs0c, BFu0i_BFu0i_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFs0i, BFu0i_BFu0i_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFs0ll, BFu0i_BFu0i_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFs0s, BFu0i_BFu0i_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFu0c, BFu0i_BFu0i_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFu0i, BFu0i_BFu0i_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFu0ll, BFu0i_BFu0i_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0ll_BFu0s, BFu0i_BFu0i_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s, BFu0i_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFs0c, BFu0i_BFu0i_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFs0i, BFu0i_BFu0i_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFs0ll, BFu0i_BFu0i_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFs0s, BFu0i_BFu0i_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFu0c, BFu0i_BFu0i_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFu0i, BFu0i_BFu0i_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFu0ll, BFu0i_BFu0i_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0i_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu0s_BFu0s, BFu0i_BFu0i_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu15i, BFu0i_BFu0i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu15ll, BFu0i_BFu0i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu15s, BFu0i_BFu0i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu16i, BFu0i_BFu0i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu16ll, BFu0i_BFu0i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu16s, BFu0i_BFu0i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu17i, BFu0i_BFu0i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu17ll, BFu0i_BFu0i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu1c, BFu0i_BFu0i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu1i, BFu0i_BFu0i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu1ll, BFu0i_BFu0i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu1s, BFu0i_BFu0i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu31i, BFu0i_BFu0i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu31ll, BFu0i_BFu0i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu32i, BFu0i_BFu0i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu32ll, BFu0i_BFu0i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu33, BFu0i_BFu0i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu7c, BFu0i_BFu0i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu7i, BFu0i_BFu0i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu7ll, BFu0i_BFu0i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu7s, BFu0i_BFu0i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu8c, BFu0i_BFu0i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu8i, BFu0i_BFu0i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu8ll, BFu0i_BFu0i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu8s, BFu0i_BFu0i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu9i, BFu0i_BFu0i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu9ll, BFu0i_BFu0i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_BFu9s, BFu0i_BFu0i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_C, BFu0i_BFu0i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_D, BFu0i_BFu0i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_F, BFu0i_BFu0i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_I, BFu0i_BFu0i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Ip, BFu0i_BFu0i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_L, BFu0i_BFu0i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_S, BFu0i_BFu0i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Uc, BFu0i_BFu0i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Ui, BFu0i_BFu0i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Ul, BFu0i_BFu0i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Us, BFu0i_BFu0i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0i_Vp, BFu0i_BFu0i_Vp)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll, BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c, BFu0i_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFs0c, BFu0i_BFu0ll_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFs0i, BFu0i_BFu0ll_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFs0ll, BFu0i_BFu0ll_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFs0s, BFu0i_BFu0ll_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFu0c, BFu0i_BFu0ll_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFu0i, BFu0i_BFu0ll_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFu0ll, BFu0i_BFu0ll_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0c_BFu0s, BFu0i_BFu0ll_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i, BFu0i_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFs0c, BFu0i_BFu0ll_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFs0i, BFu0i_BFu0ll_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFs0ll, BFu0i_BFu0ll_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFs0s, BFu0i_BFu0ll_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFu0c, BFu0i_BFu0ll_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFu0i, BFu0i_BFu0ll_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFu0ll, BFu0i_BFu0ll_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0i_BFu0s, BFu0i_BFu0ll_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll, BFu0i_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFs0c, BFu0i_BFu0ll_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFs0i, BFu0i_BFu0ll_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFs0ll, BFu0i_BFu0ll_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFs0s, BFu0i_BFu0ll_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFu0c, BFu0i_BFu0ll_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFu0i, BFu0i_BFu0ll_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFu0ll, BFu0i_BFu0ll_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0ll_BFu0s, BFu0i_BFu0ll_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s, BFu0i_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFs0c, BFu0i_BFu0ll_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFs0i, BFu0i_BFu0ll_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFs0ll, BFu0i_BFu0ll_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFs0s, BFu0i_BFu0ll_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFu0c, BFu0i_BFu0ll_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFu0i, BFu0i_BFu0ll_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFu0ll, BFu0i_BFu0ll_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFs0s_BFu0s, BFu0i_BFu0ll_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c, BFu0i_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFs0c, BFu0i_BFu0ll_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFs0i, BFu0i_BFu0ll_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFs0ll, BFu0i_BFu0ll_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFs0s, BFu0i_BFu0ll_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFu0c, BFu0i_BFu0ll_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFu0i, BFu0i_BFu0ll_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFu0ll, BFu0i_BFu0ll_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0c_BFu0s, BFu0i_BFu0ll_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i, BFu0i_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFs0c, BFu0i_BFu0ll_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFs0i, BFu0i_BFu0ll_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFs0ll, BFu0i_BFu0ll_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFs0s, BFu0i_BFu0ll_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFu0c, BFu0i_BFu0ll_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFu0i, BFu0i_BFu0ll_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFu0ll, BFu0i_BFu0ll_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0i_BFu0s, BFu0i_BFu0ll_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll, BFu0i_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFs0c, BFu0i_BFu0ll_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFs0i, BFu0i_BFu0ll_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFs0ll, BFu0i_BFu0ll_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFs0s, BFu0i_BFu0ll_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFu0c, BFu0i_BFu0ll_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFu0i, BFu0i_BFu0ll_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFu0ll, BFu0i_BFu0ll_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0ll_BFu0s, BFu0i_BFu0ll_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s, BFu0i_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFs0c, BFu0i_BFu0ll_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFs0i, BFu0i_BFu0ll_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFs0ll, BFu0i_BFu0ll_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFs0s, BFu0i_BFu0ll_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFu0c, BFu0i_BFu0ll_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFu0i, BFu0i_BFu0ll_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFu0ll, BFu0i_BFu0ll_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0ll_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu0s_BFu0s, BFu0i_BFu0ll_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu15i, BFu0i_BFu0ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu15ll, BFu0i_BFu0ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu15s, BFu0i_BFu0ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu16i, BFu0i_BFu0ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu16ll, BFu0i_BFu0ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu16s, BFu0i_BFu0ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu17i, BFu0i_BFu0ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu17ll, BFu0i_BFu0ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu1c, BFu0i_BFu0ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu1i, BFu0i_BFu0ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu1ll, BFu0i_BFu0ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu1s, BFu0i_BFu0ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu31i, BFu0i_BFu0ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu31ll, BFu0i_BFu0ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu32i, BFu0i_BFu0ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu32ll, BFu0i_BFu0ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu33, BFu0i_BFu0ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu7c, BFu0i_BFu0ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu7i, BFu0i_BFu0ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu7ll, BFu0i_BFu0ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu7s, BFu0i_BFu0ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu8c, BFu0i_BFu0ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu8i, BFu0i_BFu0ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu8ll, BFu0i_BFu0ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu8s, BFu0i_BFu0ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu9i, BFu0i_BFu0ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu9ll, BFu0i_BFu0ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_BFu9s, BFu0i_BFu0ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_C, BFu0i_BFu0ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_D, BFu0i_BFu0ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_F, BFu0i_BFu0ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_I, BFu0i_BFu0ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Ip, BFu0i_BFu0ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_L, BFu0i_BFu0ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_S, BFu0i_BFu0ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Uc, BFu0i_BFu0ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Ui, BFu0i_BFu0ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Ul, BFu0i_BFu0ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Us, BFu0i_BFu0ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0ll_Vp, BFu0i_BFu0ll_Vp)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s, BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c, BFu0i_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFs0c, BFu0i_BFu0s_BFs0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFs0i, BFu0i_BFu0s_BFs0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFs0ll, BFu0i_BFu0s_BFs0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFs0s, BFu0i_BFu0s_BFs0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFu0c, BFu0i_BFu0s_BFs0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFu0i, BFu0i_BFu0s_BFs0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFu0ll, BFu0i_BFu0s_BFs0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0c_BFu0s, BFu0i_BFu0s_BFs0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i, BFu0i_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFs0c, BFu0i_BFu0s_BFs0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFs0i, BFu0i_BFu0s_BFs0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFs0ll, BFu0i_BFu0s_BFs0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFs0s, BFu0i_BFu0s_BFs0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFu0c, BFu0i_BFu0s_BFs0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFu0i, BFu0i_BFu0s_BFs0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFu0ll, BFu0i_BFu0s_BFs0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0i_BFu0s, BFu0i_BFu0s_BFs0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll, BFu0i_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFs0c, BFu0i_BFu0s_BFs0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFs0i, BFu0i_BFu0s_BFs0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFs0ll, BFu0i_BFu0s_BFs0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFs0s, BFu0i_BFu0s_BFs0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFu0c, BFu0i_BFu0s_BFs0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFu0i, BFu0i_BFu0s_BFs0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFu0ll, BFu0i_BFu0s_BFs0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0ll_BFu0s, BFu0i_BFu0s_BFs0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s, BFu0i_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFs0c, BFu0i_BFu0s_BFs0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFs0i, BFu0i_BFu0s_BFs0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFs0ll, BFu0i_BFu0s_BFs0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFs0s, BFu0i_BFu0s_BFs0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFu0c, BFu0i_BFu0s_BFs0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFu0i, BFu0i_BFu0s_BFs0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFu0ll, BFu0i_BFu0s_BFs0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFs0s_BFu0s, BFu0i_BFu0s_BFs0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c, BFu0i_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFs0c, BFu0i_BFu0s_BFu0c_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFs0i, BFu0i_BFu0s_BFu0c_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFs0ll, BFu0i_BFu0s_BFu0c_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFs0s, BFu0i_BFu0s_BFu0c_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFu0c, BFu0i_BFu0s_BFu0c_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFu0i, BFu0i_BFu0s_BFu0c_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFu0ll, BFu0i_BFu0s_BFu0c_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0c_BFu0s, BFu0i_BFu0s_BFu0c_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i, BFu0i_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFs0c, BFu0i_BFu0s_BFu0i_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFs0i, BFu0i_BFu0s_BFu0i_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFs0ll, BFu0i_BFu0s_BFu0i_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFs0s, BFu0i_BFu0s_BFu0i_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFu0c, BFu0i_BFu0s_BFu0i_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFu0i, BFu0i_BFu0s_BFu0i_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFu0ll, BFu0i_BFu0s_BFu0i_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0i_BFu0s, BFu0i_BFu0s_BFu0i_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll, BFu0i_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFs0c, BFu0i_BFu0s_BFu0ll_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFs0i, BFu0i_BFu0s_BFu0ll_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFs0ll, BFu0i_BFu0s_BFu0ll_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFs0s, BFu0i_BFu0s_BFu0ll_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFu0c, BFu0i_BFu0s_BFu0ll_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFu0i, BFu0i_BFu0s_BFu0ll_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFu0ll, BFu0i_BFu0s_BFu0ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0ll_BFu0s, BFu0i_BFu0s_BFu0ll_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s, BFu0i_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFs0c, BFu0i_BFu0s_BFu0s_BFs0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFs0i, BFu0i_BFu0s_BFu0s_BFs0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFs0ll, BFu0i_BFu0s_BFu0s_BFs0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFs0s, BFu0i_BFu0s_BFu0s_BFs0s)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFu0c, BFu0i_BFu0s_BFu0s_BFu0c)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFu0i, BFu0i_BFu0s_BFu0s_BFu0i)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFu0ll, BFu0i_BFu0s_BFu0s_BFu0ll)
//============================================================================


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 STRUCT_IF_C BFu0i_BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0i_BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0i_BFu0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu0s_BFu0s, BFu0i_BFu0s_BFu0s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu15i, BFu0i_BFu0s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu15ll, BFu0i_BFu0s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu15s, BFu0i_BFu0s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu16i, BFu0i_BFu0s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu16ll, BFu0i_BFu0s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu16s, BFu0i_BFu0s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu17i, BFu0i_BFu0s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu17ll, BFu0i_BFu0s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu1c, BFu0i_BFu0s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu1i, BFu0i_BFu0s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu1ll, BFu0i_BFu0s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu1s, BFu0i_BFu0s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu31i, BFu0i_BFu0s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu31ll, BFu0i_BFu0s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu32i, BFu0i_BFu0s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu32ll, BFu0i_BFu0s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu33, BFu0i_BFu0s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu7c, BFu0i_BFu0s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu7i, BFu0i_BFu0s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu7ll, BFu0i_BFu0s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu7s, BFu0i_BFu0s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu8c, BFu0i_BFu0s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu8i, BFu0i_BFu0s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu8ll, BFu0i_BFu0s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu8s, BFu0i_BFu0s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu9i, BFu0i_BFu0s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu9ll, BFu0i_BFu0s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_BFu9s, BFu0i_BFu0s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_C, BFu0i_BFu0s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_D, BFu0i_BFu0s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_F, BFu0i_BFu0s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_I, BFu0i_BFu0s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Ip, BFu0i_BFu0s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_L, BFu0i_BFu0s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_S, BFu0i_BFu0s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Uc, BFu0i_BFu0s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Ui, BFu0i_BFu0s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Ul, BFu0i_BFu0s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Us, BFu0i_BFu0s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu0s_Vp, BFu0i_BFu0s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i, BFu0i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu0c, BFu0i_BFu15i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu0i, BFu0i_BFu15i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu0ll, BFu0i_BFu15i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu0s, BFu0i_BFu15i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu15i, BFu0i_BFu15i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu15ll, BFu0i_BFu15i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu15s, BFu0i_BFu15i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu16i, BFu0i_BFu15i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu16ll, BFu0i_BFu15i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu16s, BFu0i_BFu15i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu17i, BFu0i_BFu15i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu17ll, BFu0i_BFu15i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu1c, BFu0i_BFu15i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu1i, BFu0i_BFu15i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu1ll, BFu0i_BFu15i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu1s, BFu0i_BFu15i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu31i, BFu0i_BFu15i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu31ll, BFu0i_BFu15i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu32i, BFu0i_BFu15i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu32ll, BFu0i_BFu15i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu33, BFu0i_BFu15i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu7c, BFu0i_BFu15i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu7i, BFu0i_BFu15i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu7ll, BFu0i_BFu15i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu7s, BFu0i_BFu15i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu8c, BFu0i_BFu15i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu8i, BFu0i_BFu15i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu8ll, BFu0i_BFu15i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu8s, BFu0i_BFu15i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu9i, BFu0i_BFu15i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu9ll, BFu0i_BFu15i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_BFu9s, BFu0i_BFu15i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_C, BFu0i_BFu15i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_D, BFu0i_BFu15i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_F, BFu0i_BFu15i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_I, BFu0i_BFu15i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Ip, BFu0i_BFu15i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_L, BFu0i_BFu15i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_S, BFu0i_BFu15i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Uc, BFu0i_BFu15i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Ui, BFu0i_BFu15i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Ul, BFu0i_BFu15i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Us, BFu0i_BFu15i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15i_Vp, BFu0i_BFu15i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll, BFu0i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu0c, BFu0i_BFu15ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu0i, BFu0i_BFu15ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu0ll, BFu0i_BFu15ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu0s, BFu0i_BFu15ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu15i, BFu0i_BFu15ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu15ll, BFu0i_BFu15ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu15s, BFu0i_BFu15ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu16i, BFu0i_BFu15ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu16ll, BFu0i_BFu15ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu16s, BFu0i_BFu15ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu17i, BFu0i_BFu15ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu17ll, BFu0i_BFu15ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu1c, BFu0i_BFu15ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu1i, BFu0i_BFu15ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu1ll, BFu0i_BFu15ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu1s, BFu0i_BFu15ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu31i, BFu0i_BFu15ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu31ll, BFu0i_BFu15ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu32i, BFu0i_BFu15ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu32ll, BFu0i_BFu15ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu33, BFu0i_BFu15ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu7c, BFu0i_BFu15ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu7i, BFu0i_BFu15ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu7ll, BFu0i_BFu15ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu7s, BFu0i_BFu15ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu8c, BFu0i_BFu15ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu8i, BFu0i_BFu15ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu8ll, BFu0i_BFu15ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu8s, BFu0i_BFu15ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu9i, BFu0i_BFu15ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu9ll, BFu0i_BFu15ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_BFu9s, BFu0i_BFu15ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_C, BFu0i_BFu15ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_D, BFu0i_BFu15ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_F, BFu0i_BFu15ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_I, BFu0i_BFu15ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Ip, BFu0i_BFu15ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_L, BFu0i_BFu15ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_S, BFu0i_BFu15ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Uc, BFu0i_BFu15ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Ui, BFu0i_BFu15ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Ul, BFu0i_BFu15ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Us, BFu0i_BFu15ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15ll_Vp, BFu0i_BFu15ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s, BFu0i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu0c, BFu0i_BFu15s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu0i, BFu0i_BFu15s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu0ll, BFu0i_BFu15s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu0s, BFu0i_BFu15s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu15i, BFu0i_BFu15s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu15ll, BFu0i_BFu15s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu15s, BFu0i_BFu15s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu16i, BFu0i_BFu15s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu16ll, BFu0i_BFu15s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu16s, BFu0i_BFu15s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu17i, BFu0i_BFu15s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu17ll, BFu0i_BFu15s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu1c, BFu0i_BFu15s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu1i, BFu0i_BFu15s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu1ll, BFu0i_BFu15s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu1s, BFu0i_BFu15s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu31i, BFu0i_BFu15s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu31ll, BFu0i_BFu15s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu32i, BFu0i_BFu15s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu32ll, BFu0i_BFu15s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu33, BFu0i_BFu15s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu7c, BFu0i_BFu15s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu7i, BFu0i_BFu15s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu7ll, BFu0i_BFu15s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu7s, BFu0i_BFu15s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu8c, BFu0i_BFu15s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu8i, BFu0i_BFu15s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu8ll, BFu0i_BFu15s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu8s, BFu0i_BFu15s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu9i, BFu0i_BFu15s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu9ll, BFu0i_BFu15s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_BFu9s, BFu0i_BFu15s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_C, BFu0i_BFu15s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_D, BFu0i_BFu15s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_F, BFu0i_BFu15s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_I, BFu0i_BFu15s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Ip, BFu0i_BFu15s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_L, BFu0i_BFu15s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_S, BFu0i_BFu15s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Uc, BFu0i_BFu15s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Ui, BFu0i_BFu15s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Ul, BFu0i_BFu15s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Us, BFu0i_BFu15s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu15s_Vp, BFu0i_BFu15s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i, BFu0i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu0c, BFu0i_BFu16i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu0i, BFu0i_BFu16i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu0ll, BFu0i_BFu16i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu0s, BFu0i_BFu16i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu15i, BFu0i_BFu16i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu15ll, BFu0i_BFu16i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu15s, BFu0i_BFu16i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu16i, BFu0i_BFu16i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu16ll, BFu0i_BFu16i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu16s, BFu0i_BFu16i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu17i, BFu0i_BFu16i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu17ll, BFu0i_BFu16i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu1c, BFu0i_BFu16i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu1i, BFu0i_BFu16i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu1ll, BFu0i_BFu16i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu1s, BFu0i_BFu16i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu31i, BFu0i_BFu16i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu31ll, BFu0i_BFu16i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu32i, BFu0i_BFu16i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu32ll, BFu0i_BFu16i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu33, BFu0i_BFu16i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu7c, BFu0i_BFu16i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu7i, BFu0i_BFu16i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu7ll, BFu0i_BFu16i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu7s, BFu0i_BFu16i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu8c, BFu0i_BFu16i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu8i, BFu0i_BFu16i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu8ll, BFu0i_BFu16i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu8s, BFu0i_BFu16i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu9i, BFu0i_BFu16i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu9ll, BFu0i_BFu16i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_BFu9s, BFu0i_BFu16i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_C, BFu0i_BFu16i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_D, BFu0i_BFu16i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_F, BFu0i_BFu16i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_I, BFu0i_BFu16i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Ip, BFu0i_BFu16i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_L, BFu0i_BFu16i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_S, BFu0i_BFu16i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Uc, BFu0i_BFu16i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Ui, BFu0i_BFu16i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Ul, BFu0i_BFu16i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Us, BFu0i_BFu16i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16i_Vp, BFu0i_BFu16i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll, BFu0i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu0c, BFu0i_BFu16ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu0i, BFu0i_BFu16ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu0ll, BFu0i_BFu16ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu0s, BFu0i_BFu16ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu15i, BFu0i_BFu16ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu15ll, BFu0i_BFu16ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu15s, BFu0i_BFu16ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu16i, BFu0i_BFu16ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu16ll, BFu0i_BFu16ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu16s, BFu0i_BFu16ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu17i, BFu0i_BFu16ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu17ll, BFu0i_BFu16ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu1c, BFu0i_BFu16ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu1i, BFu0i_BFu16ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu1ll, BFu0i_BFu16ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu1s, BFu0i_BFu16ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu31i, BFu0i_BFu16ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu31ll, BFu0i_BFu16ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu32i, BFu0i_BFu16ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu32ll, BFu0i_BFu16ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu33, BFu0i_BFu16ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu7c, BFu0i_BFu16ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu7i, BFu0i_BFu16ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu7ll, BFu0i_BFu16ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu7s, BFu0i_BFu16ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu8c, BFu0i_BFu16ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu8i, BFu0i_BFu16ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu8ll, BFu0i_BFu16ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu8s, BFu0i_BFu16ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu9i, BFu0i_BFu16ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu9ll, BFu0i_BFu16ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_BFu9s, BFu0i_BFu16ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_C, BFu0i_BFu16ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_D, BFu0i_BFu16ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_F, BFu0i_BFu16ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_I, BFu0i_BFu16ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Ip, BFu0i_BFu16ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_L, BFu0i_BFu16ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_S, BFu0i_BFu16ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Uc, BFu0i_BFu16ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Ui, BFu0i_BFu16ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Ul, BFu0i_BFu16ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Us, BFu0i_BFu16ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16ll_Vp, BFu0i_BFu16ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s, BFu0i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu0c, BFu0i_BFu16s_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu0i, BFu0i_BFu16s_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu0ll, BFu0i_BFu16s_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu0s, BFu0i_BFu16s_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu15i, BFu0i_BFu16s_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu15ll, BFu0i_BFu16s_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu15s, BFu0i_BFu16s_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu16i, BFu0i_BFu16s_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu16ll, BFu0i_BFu16s_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu16s, BFu0i_BFu16s_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu17i, BFu0i_BFu16s_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu17ll, BFu0i_BFu16s_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu1c, BFu0i_BFu16s_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu1i, BFu0i_BFu16s_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu1ll, BFu0i_BFu16s_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu1s, BFu0i_BFu16s_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu31i, BFu0i_BFu16s_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu31ll, BFu0i_BFu16s_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu32i, BFu0i_BFu16s_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu32ll, BFu0i_BFu16s_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu33, BFu0i_BFu16s_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu7c, BFu0i_BFu16s_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu7i, BFu0i_BFu16s_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu7ll, BFu0i_BFu16s_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu7s, BFu0i_BFu16s_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu8c, BFu0i_BFu16s_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu8i, BFu0i_BFu16s_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu8ll, BFu0i_BFu16s_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu8s, BFu0i_BFu16s_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu9i, BFu0i_BFu16s_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu9ll, BFu0i_BFu16s_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_BFu9s, BFu0i_BFu16s_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_C, BFu0i_BFu16s_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_D, BFu0i_BFu16s_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_F, BFu0i_BFu16s_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_I, BFu0i_BFu16s_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Ip, BFu0i_BFu16s_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_L, BFu0i_BFu16s_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_S, BFu0i_BFu16s_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Uc, BFu0i_BFu16s_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Ui, BFu0i_BFu16s_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Ul, BFu0i_BFu16s_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Us, BFu0i_BFu16s_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu16s_Vp, BFu0i_BFu16s_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i, BFu0i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu0c, BFu0i_BFu17i_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu0i, BFu0i_BFu17i_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu0ll, BFu0i_BFu17i_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu0s, BFu0i_BFu17i_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu15i, BFu0i_BFu17i_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu15ll, BFu0i_BFu17i_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu15s, BFu0i_BFu17i_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu16i, BFu0i_BFu17i_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu16ll, BFu0i_BFu17i_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu16s, BFu0i_BFu17i_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu17i, BFu0i_BFu17i_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu17ll, BFu0i_BFu17i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu1c, BFu0i_BFu17i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu1i, BFu0i_BFu17i_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu1ll, BFu0i_BFu17i_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu1s, BFu0i_BFu17i_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu31i, BFu0i_BFu17i_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu31ll, BFu0i_BFu17i_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu32i, BFu0i_BFu17i_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu32ll, BFu0i_BFu17i_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu33, BFu0i_BFu17i_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu7c, BFu0i_BFu17i_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu7i, BFu0i_BFu17i_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu7ll, BFu0i_BFu17i_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu7s, BFu0i_BFu17i_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu8c, BFu0i_BFu17i_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu8i, BFu0i_BFu17i_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu8ll, BFu0i_BFu17i_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu8s, BFu0i_BFu17i_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu9i, BFu0i_BFu17i_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu9ll, BFu0i_BFu17i_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_BFu9s, BFu0i_BFu17i_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_C, BFu0i_BFu17i_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_D, BFu0i_BFu17i_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_F, BFu0i_BFu17i_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_I, BFu0i_BFu17i_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Ip, BFu0i_BFu17i_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_L, BFu0i_BFu17i_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_S, BFu0i_BFu17i_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Uc, BFu0i_BFu17i_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Ui, BFu0i_BFu17i_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Ul, BFu0i_BFu17i_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Us, BFu0i_BFu17i_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17i_Vp, BFu0i_BFu17i_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll, BFu0i_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu0c, BFu0i_BFu17ll_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu0i, BFu0i_BFu17ll_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu0ll, BFu0i_BFu17ll_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu0s, BFu0i_BFu17ll_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu15i, BFu0i_BFu17ll_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu15ll, BFu0i_BFu17ll_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu15s, BFu0i_BFu17ll_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu16i, BFu0i_BFu17ll_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu16ll, BFu0i_BFu17ll_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu16s, BFu0i_BFu17ll_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu17i, BFu0i_BFu17ll_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu17ll, BFu0i_BFu17ll_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu1c, BFu0i_BFu17ll_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu1i, BFu0i_BFu17ll_BFu1i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu1ll, BFu0i_BFu17ll_BFu1ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu1s, BFu0i_BFu17ll_BFu1s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu31i, BFu0i_BFu17ll_BFu31i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu31ll, BFu0i_BFu17ll_BFu31ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu32i, BFu0i_BFu17ll_BFu32i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu32ll, BFu0i_BFu17ll_BFu32ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu33, BFu0i_BFu17ll_BFu33)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu7c, BFu0i_BFu17ll_BFu7c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu7i, BFu0i_BFu17ll_BFu7i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu7ll, BFu0i_BFu17ll_BFu7ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu7s, BFu0i_BFu17ll_BFu7s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu8c, BFu0i_BFu17ll_BFu8c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu8i, BFu0i_BFu17ll_BFu8i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu8ll, BFu0i_BFu17ll_BFu8ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu8s, BFu0i_BFu17ll_BFu8s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu9i, BFu0i_BFu17ll_BFu9i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu9ll, BFu0i_BFu17ll_BFu9ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_BFu9s, BFu0i_BFu17ll_BFu9s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_C, BFu0i_BFu17ll_C)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_D, BFu0i_BFu17ll_D)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_F, BFu0i_BFu17ll_F)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_I, BFu0i_BFu17ll_I)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Ip, BFu0i_BFu17ll_Ip)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_L, BFu0i_BFu17ll_L)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_S, BFu0i_BFu17ll_S)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Uc, BFu0i_BFu17ll_Uc)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Ui, BFu0i_BFu17ll_Ui)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Ul, BFu0i_BFu17ll_Ul)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Us, BFu0i_BFu17ll_Us)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu17ll_Vp, BFu0i_BFu17ll_Vp)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c, BFu0i_BFu1c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu0c, BFu0i_BFu1c_BFu0c)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu0i, BFu0i_BFu1c_BFu0i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu0ll, BFu0i_BFu1c_BFu0ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu0s, BFu0i_BFu1c_BFu0s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu15i, BFu0i_BFu1c_BFu15i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu15ll, BFu0i_BFu1c_BFu15ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu15s, BFu0i_BFu1c_BFu15s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu16i, BFu0i_BFu1c_BFu16i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu16ll, BFu0i_BFu1c_BFu16ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu16s, BFu0i_BFu1c_BFu16s)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu17i, BFu0i_BFu1c_BFu17i)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu17ll, BFu0i_BFu1c_BFu17ll)
//============================================================================


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 STRUCT_IF_C 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");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0i_BFu1c_BFu1c, BFu0i_BFu1c_BFu1c)
//============================================================================

