<div dir="ltr">On Wed, Sep 25, 2013 at 3:02 PM, Karen Shaeffer <span dir="ltr"><<a href="mailto:shaeffer@neuralscape.com" target="_blank">shaeffer@neuralscape.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">On Wed, Sep 25, 2013 at 02:40:37PM -0700, Eli Friedman wrote:<br>

> On Wed, Sep 25, 2013 at 4:49 AM, Karthik Bhat <<a href="mailto:blitz.opensource@gmail.com">blitz.opensource@gmail.com</a>>wrote:<br>
><br>
> > Hi All,<br>
> > I was going through a gcc TC for C++11. The test case is as follows -<br>
> ><br>
> > // { dg-options -std=c++0x }<br>
> > // { dg-do run }<br>
> ><br>
> > extern "C" void abort ();<br>
> > extern int ar[2];<br>
> ><br>
> > int f()<br>
> > {<br>
> >   int k = 0;<br>
> >   if (ar[0] != 42 || ar[1] != 0)<br>
> >     abort();<br>
> >   return 1;<br>
> > }<br>
> ><br>
> > int i = f();<br>
> ><br>
> > int ar[2] = {42,i};<br>
> ><br>
> > int main()<br>
> > {<br>
> >   return 0;<br>
> > }<br>
> ><br>
> > During dynamic initialization of i in function f() the value of ar[0] is 0<br>
> > in case of clang were as in case of gcc it is 42.<br>
> ><br>
> > As per standard(section 3.6.2) all global values should initially be zero<br>
> > initialized followed by const initialized if possible before dynamic<br>
> > initialization takes place.<br>
> > Hence as per standard the const initialization of int ar[2] = {42,i};<br>
> > should fail as i is not a const here( which seems to be happening in<br>
> > clang). Hence ar[0],ar[1] is still zero initialized because of which during<br>
> > dynamic initialization in f() ar[0]  is 0 which seems to be the correct<br>
> > behavior.<br>
> ><br>
> > Can i conclude here that clang is behaving correctly and the tc is wrong?<br>
> > or am i missing something which this gcc tc wanted to capture?<br>
> ><br>
><br>
> As far as I can tell, your analysis is correct.<br>
><br>
> -Eli<br>
<br>
</div></div>Hi,<br>
But isn't function f a constexpr? It doesn't modify anything and always<br>
returns 1.<br><br></blockquote><div><br></div><div>It doesn't matter what the implementation of "f" is; "f()" is still not a constant expression.  Please read [basic.start.init] and [expr.const] in the C++ standard.<br>
</div></div><br></div><div class="gmail_extra">-Eli</div></div>