<div dir="ltr"><div><font face="monospace, monospace">Hello,</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I'm seeing an unexpected construction/destruction order in the program below with clang 3.9.0. Is this considered a bug? </font><span style="font-family:monospace,monospace">Thank you.</span></div><font face="monospace, monospace"><div><br></div><div><div>clang asm - <a href="https://godbolt.org/g/uGlpFa">https://godbolt.org/g/uGlpFa</a><br></div>gcc asm - <a href="https://godbolt.org/g/WDgcZP">https://godbolt.org/g/WDgcZP</a><br></div><div><br></div></font><div><font face="monospace, monospace">printf Output from clang (Unexpected):</font></div><div><div><font face="monospace, monospace">obj entered 0</font></div><div><font face="monospace, monospace">obj entered 1</font></div><div><font face="monospace, monospace">obj entered 2</font></div><div><font face="monospace, monospace">obj exited 2</font></div><div><font face="monospace, monospace">obj exited 1</font></div><div><font face="monospace, monospace">obj exited 0</font></div></div><div><br></div><div><span style="font-family:monospace,monospace">printf Output from gcc (Expected):</span></div><div><div><font face="monospace, monospace">obj entered 0</font></div><div><font face="monospace, monospace">obj exited 0</font></div><div><font face="monospace, monospace">obj entered 1</font></div><div><font face="monospace, monospace">obj exited 1</font></div><div><font face="monospace, monospace">obj entered 2</font></div><div><font face="monospace, monospace">obj exited 2</font></div><div style="font-family:monospace,monospace"><br></div></div><div style="font-family:monospace,monospace"><br></div><div style="font-family:monospace,monospace">Program:</div><div style="font-family:monospace,monospace"><br></div><div><span style="font-family:monospace,monospace">#include <stdint.h></span><br></div><div><div><div><font face="monospace, monospace">#include <stdio.h></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">class SomeClass</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>uint32_t k;</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>public:</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>SomeClass(uint32_t x)</font></div><div><font face="monospace, monospace">        { k = x; printf("obj entered %d\n", k); }</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>~SomeClass()</font></div><div><font face="monospace, monospace">        { printf("obj exited %d\n", k); }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">};</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">int main()</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>uint32_t ii = 0;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>switch(1)</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>default:</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>{</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                               </span>SomeClass someClass(ii++);</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                      </span>}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                               </span>SomeClass someClass2(ii++);</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                     </span>}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>{</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                               </span>SomeClass someClass3(ii++);</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">                     </span>}</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>}</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>}</font></div><div><font face="monospace, monospace">}</font></div></div><div><br></div></div></div>