<div dir="ltr">Hi, cfe-commits,<div><br></div><div>When I run gcc testsuite pr44575.c on clang, then I found a stack overflow issue.</div><div>The root cause is since it want to copy {double, double} (16-byte) back to stack but clang only allocate float[3] (12-byte) in this case.</div><div>It happens after release 3.4, and I found this is modified at this commit:</div><div><br></div><div><br></div><div style="text-align:start"><span style="text-align:right;background-color:initial">    c</span><span style="color:black;font-size:1em;line-height:1.1em;font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace;text-align:right;white-space:pre;background-color:initial">ommit eeb00624413d4a4856e66809b84c558d2cdce17f</span></div><div><div class="" style="margin:0px!important;padding:0px!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;font-size:1em!important;min-height:inherit!important;background:none!important"><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">Author: Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>></code></div><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">Date:   Fri Jun 7 23:20:55 2013 +0000</code></div><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"> </div><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">    </code><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">Fix va_arg on x86-64 for a struct containing a single int128_t.  PR16248</code></div><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"> </div><div class="" style="margin:0px!important;padding:0px 1em!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;outline:0px!important;overflow:visible!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;white-space:pre!important;background-image:none!important;background-repeat:initial!important"><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">    </code><code class="" style="font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important;border-top-left-radius:0px!important;border-top-right-radius:0px!important;border-bottom-right-radius:0px!important;border-bottom-left-radius:0px!important;border:0px!important;float:none!important;height:auto!important;line-height:1.1em!important;margin:0px!important;outline:0px!important;overflow:visible!important;padding:0px!important;vertical-align:baseline!important;width:auto!important;font-size:1em!important;min-height:inherit!important;display:inline!important;color:black!important;background:none!important">git-svn-id: <a href="https://llvm.org/svn/llvm-project/cfe/trunk@183590">https://llvm.org/svn/llvm-project/cfe/trunk@183590</a> 91177308-0d34-0410-b5e6-96231b3b80d8</code></div></div></div><div><br></div><div>Could somebody please have a look? Thanks!</div><div><br></div><div>If you want to reproduce, you can just use this simple code and found var i will be changed after va_arg extraction.</div><div><div><br></div><div>     1  /* PR target/44575 */</div><div>     2  // clang -O0 reduced.c && ./a.out</div><div>     3  #include <stdarg.h></div><div>     4</div><div>     5  struct S { float a[3]; } a;</div><div>     6</div><div>     7  void</div><div>     8  check (int z, ...)</div><div>     9  {</div><div>    10    va_list ap;</div><div>    11    int i = 0x5566;</div><div>    12    va_start (ap, z);</div><div>    13    va_arg (ap, struct S);</div><div>    14    if (i != 0x5566)</div><div>    15      abort();</div><div>    16  }</div><div>    17</div><div>    18  int</div><div>    19  main ()</div><div>    20  {</div><div>    21    a.a[2] = -49026;</div><div>    22    check (1, a);</div><div>    23    return 0;</div><div>    24  }</div><div><br></div><div><div><br></div>-- <br><div dir="ltr">Best Regards,<div>WenHan Gu (Nowar)</div></div>
</div></div></div>