<div dir="ltr">On Wed, Sep 25, 2013 at 4:49 AM, Karthik Bhat <span dir="ltr"><<a href="mailto:blitz.opensource@gmail.com" target="_blank">blitz.opensource@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi All,<div>I was going through a gcc TC for C++11. The test case is as follows -</div><div><br></div><div>
<div>// { dg-options -std=c++0x }</div><div>// { dg-do run }</div><div><br></div><div>extern "C" void abort ();</div>
<div>extern int ar[2];</div><div><br></div><div>int f()</div><div>{</div><div> int k = 0;</div><div> if (ar[0] != 42 || ar[1] != 0)</div><div> abort();</div><div> return 1;</div><div>}</div><div><br></div><div>int i = f();</div>
<div><br></div><div>int ar[2] = {42,i};</div><div><br></div><div>int main()</div><div>{ </div><div> return 0;</div><div>}</div></div><div><br></div><div>During dynamic initialization of i in function f() the value of ar[0] is 0 in case of clang were as in case of gcc it is 42.</div>
<div><br></div><div>As per standard(section 3.6.2) all global values should initially be zero initialized followed by const initialized if possible before dynamic initialization takes place.</div><div>Hence as per standard the const initialization of int ar[2] = {42,i}; should fail as i is not a const here( which seems to be happening in clang). Hence ar[0],ar[1] is still zero initialized because of which during dynamic initialization in f() ar[0] is 0 which seems to be the correct behavior.</div>
<div><br></div><div>Can i conclude here that clang is behaving correctly and the tc is wrong? or am i missing something which this gcc tc wanted to capture?</div><div></div></div></blockquote></div><br></div><div class="gmail_extra">
As far as I can tell, your analysis is correct.</div><div class="gmail_extra"><br></div><div class="gmail_extra">-Eli</div></div>