struct mouse_button_str {
    unsigned char left : 1;
    unsigned char right : 1;
    unsigned char middle : 1;
} button;

static char fct(struct mouse_button_str newbutton) __attribute__((__noipa__));
static char
fct(struct mouse_button_str newbutton) {
    char l = newbutton.left;
    char r = newbutton.right;
    char m = newbutton.middle;
    return l && r && m;
}

int main(void) {
    struct mouse_button_str newbutton1;
    newbutton1.left = 1;
    newbutton1.middle = 1;
    newbutton1.right = 1;
    if (!fct(newbutton1))
        __builtin_abort();

    newbutton1.left = 0;
    newbutton1.middle = 1;
    newbutton1.right = 1;
    if (fct(newbutton1))
        __builtin_abort();
    newbutton1.left = 1;
    newbutton1.middle = 0;
    newbutton1.right = 1;
    if (fct(newbutton1))
        __builtin_abort();
    newbutton1.left = 1;
    newbutton1.middle = 1;
    newbutton1.right = 0;
    if (fct(newbutton1))
        __builtin_abort();


    newbutton1.left = 1;
    newbutton1.middle = 0;
    newbutton1.right = 0;
    if (fct(newbutton1))
        __builtin_abort();
    newbutton1.left = 0;
    newbutton1.middle = 1;
    newbutton1.right = 0;
    if (fct(newbutton1))
        __builtin_abort();
    newbutton1.left = 0;
    newbutton1.middle = 0;
    newbutton1.right = 1;
    if (fct(newbutton1))
        __builtin_abort();
    newbutton1.left = 0;
    newbutton1.middle = 0;
    newbutton1.right = 0;
    if (fct(newbutton1))
        __builtin_abort();
}
