<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/79790>79790</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[x86_64] va_arg will get wrong result
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
CoTinker
</td>
</tr>
</table>
<pre>
demo.c
```
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct S271 { union{}a; long long b; } ;
struct S271 s271;
void check271va (int z, ...) {
struct S271 arg, *p;
va_list ap;
__builtin_va_start(ap, z);
p = &s271;
arg = __builtin_va_arg(ap, struct S271);
if (p->b != arg.b) {
printf("Fail!\n");
printf("p->b:%lld , arg.b:%lld\n", p->b, arg.b);
}
__builtin_va_end(ap);
}
int main (void) {
s271.b = 1;
check271va (1, s271);
}
```
wrong output (clang) :
```
% clang++ demo.c
% ./a.out
Fail!
p->b:1 , arg.b:140726027523432
```
https://godbolt.org/z/Esx44jdxT
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VM1uqzoQfpphYxWZsYlhwSIJ5QXu2UcGO8StAwibtLdPf2VIk5DeHimaaDzffPOPdM60ndYFpDtIy0hO_tSPxb7_Y7p3PUZ1r_4tlD73cQO0BLqFDb3-FhWZ6Ro7KU2A7Z1X1tTxCdjrL2bT_8U6mq59NM_S-XFqPPkHRUJA7MjUmb4DsQNRSmA7YvuuXUQdVBAlAbb76etQJDfDIi-9UaQ56eYdRXKRBDAznSdfgHsSxzFgHiIuWEIIeaSTYxtggNvhxhowF3mwxnkiH54Ph3oy1pvucJEH5-XoATM5BP8vwHzlPxBgJQHcrPINFjm2s23FNqdx5XpI75nVHENxwwuw15oAJoFHjm1cr2scRtP5I2AGiJU0NiDTfQeIz4Rzqg_ohRrYFjC1VpGQzxLg--lGtCdX8A3yxA2ivCuranWnrtXePW7oRYYBnqXpQr1hvj-HiCKJ67mT6_6uFyGZO_rUynus9RV8jGH_-skPkw_OjZVdO0dm21_OJiVX0A5wR1YXhimJASsZ95Nfnr5nMSu3VierLiecCtxQFCkyzvB_w568H9w8kQqwantV99bHfdih6guwenWfnL-pzz-RKpjKWS4jXSSCbtIkyTmPTgVnklKZ55gInrHsmGo8JnVGFRUbzpSOTIEUOU0wp4KmnMcpy1VWK5UmjNcsbYBTfZbGxtZeziF2ZJybdCFykdPIylpbN3-NEDv9QWZj2Ju0jMYi-LzUU-uA03Bm7s7ijbfzZ-wz2xw2HNKSLPdBPoy1pNWeLGMatZusj6bRFk_9MP401XHTnwGrwHv9exnG_k03HrCas3GA1ZztfwEAAP__NqttaQ">