<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/69872>69872</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Is a undefined behavior that apply __attribute__((aligned)) to C++ bit field?
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hstk30-hw
      </td>
    </tr>
</table>

<pre>
    In `C++17` standard say, 

> An alignment-specifier may be applied to a variable or to a class data member, but it shall not be applied to a
bit-field, a function parameter, or an exception-declaration (18.3).

The `alignment-specifier` is language realm, and `__attribute__((aligned))` is gcc extension.

https://discourse.llvm.org/t/whats-the-difference-between-attribute-aligned-x-and-c-11-alignas/62391 

This post mention it, but not enough. 

So, I want to know can we apply `__attribute__((aligned))` to c++'s bit field? Is a undefined behavior? Or like that post, what is diff between `alignas` and `__attribute__((aligned))` .

---

What lead to this problem is follow code:

```
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

extern void *memset (void *__s, int __c, size_t __n);

struct  S94 {
    long long int __attribute__((aligned)): 0;
};

struct S94 s94;

void check94va(int z, ...) {
    va_list ap;
 va_start(ap, z);
    struct S94 arg1 =  va_arg(ap, struct S94);
 long long int tmp = va_arg(ap, long long);
    //printf("result = %lld\n", tmp);
    if (tmp != 2LL) {
 printf("Fails!!!!\n");
    }
    va_end(ap);
}

int main(void) {
    memset(&s94, '\0', sizeof(s94));
 //printf("sizeof(s94) = %ld\n", sizeof(s94));
    check94va(1, s94, 2LL);
    return 0;
}
```

failed in aarch64 as C++ code compiled use clang++. If not apply ` __attribute__((aligned))` for `long long int`, it work.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVkuPozoT_TXOpkQEJiFhkUU_JlJLI32L-aS7jApcBN82NrJNZ3p-_VUBnQmZ170SIo3rdXxO2dUYgj5booPYPort8wqH2Dp_aEN8zdOkvawqp94PLxZEkT4J-SjkY7YTRQoholXoFQR8F_IJRPos0of5nX-CBwto9Nl2ZGMSeqp1o8lDh-9QEWDfG00KogOEN_QaK0Pg_LRQGwwBFEaEjrqKPBeohgg6QmjRGLAu3qeZSlc6Jo0mozgEoRlsHbWz0KPHjuKUynlAC_S1pp6NiaLaoMfRUch9tl_nQpbr2y39vyWm4CdbYjJ0AIP2POCZwBOabqxuFYecThij19UQ6XQSci_kfsxCSsiSnyn-XNdAXyPZoJ1dlG5j7IPIH4Q8CnlUOtRu8IHWxrx1a-fPQh6jkMdLizEksaVE6aYhT7ampKJ4IbLJFUIy106-JmhVUidZNi1hEPJYyLzMYLlvHaB3IQLvmgnS8UMNFoGsG87tehHzxbHHC1zQRpbm1boL1GjhMin2_m9piQ7qqeeE3AWodIRJ2_wILwEQBquo0ZYUVNTim3aeTf_zYPQrQWwxjtgZDtPDPDM5MNNyVRQDl_sPgi0ESpLk9vMvrmQIx7aMI3_eVYY6Lt84Y5gNp4glvT00RTo_06fMta3NoAhE_hSiMrpatyL_9Auzdr-xem3PvwtGvzCPb25Gb-HNaQVCPnTUBYp8PD5WTqfAxGob4XSq-c-gv9GJvyzTlD_epgvRD3UE-FJuQOxmEwCAcfY8vaZMfyA_f4D0e-rd88_LcJVQbu6MI_K6pfq13LyhkHuu-I2Rr9drIcslsDc8GR0iYH9Nw2shoo8Mq-fAb7c75agbAOjPGYj8eUyFfFDnoO8-i-glE7Hrx-C72KvTfeHpeui9trEZiZOewmDimETIrTFKbJ-skJLTxK6_T6AbVncsKzMOkp8_L0m5TX5EbQI7Xp-P5Hewds8LSsmqeS_lQsYbmXj3HWo799oPwkytOMIoWGSePnIntk8p_8x96BhnmBi-hfQjTXfeV75u6fpdRoBFT2Wj_wRrYnDh6ikO3t718E8vgPHdoDakQFtA9HVbbAADzIN4vEWgdl0_-gyBeHJyZ7B1DS_NeEVfr9w_H64ihcZ59l30ImPikx7h4vzrfPet1CFXZV7iig5ZUe7Koii3-ao9YFnvN_siL6huKNtitdtX2U6qosj3eVVtV_ogU5lnqZRpKcssXzdZgYR5RVmuCqx2YpNSh9pcR9xKhzDQoSj3O7kyWJEJ4z8sUlq6wGhkobbPK3_gmKQazkFsUj6_4XuWqKOhwy8mxzQuJrL-RBTf7B8i3E6l1eDNYTmvzzq2Q7WuXSfkkZHMP0nv3d9U8-Qe8Y_jl_f3TwAAAP__Pp3RHg">