<div class="gmail_quote">On Sat, Jan 14, 2012 at 4:29 PM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>></span> wrote:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">[On Sat, Jan 14, 2012 at 4:14 PM, Chandler Carruth <<a href="mailto:chandlerc@google.com">chandlerc@google.com</a>> wrote:<br>
> On Fri, Jan 13, 2012 at 9:16 PM, Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>><br>
> wrote:<br>
>><br>
>> On Fri, Jan 13, 2012 at 7:22 PM, Matt Beaumont-Gay <<a href="mailto:matthewbg@google.com">matthewbg@google.com</a>><br>
>> wrote:<br>
>> > Hi Eli,<br>
>> ><br>
>> > On Fri, Jan 13, 2012 at 15:41, Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>><br>
>> > wrote:<br>
>> >> Modified: cfe/trunk/test/SemaCXX/linkage.cpp<br>
>> >> URL:<br>
>> >> <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/linkage.cpp?rev=148158&r1=148157&r2=148158&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/linkage.cpp?rev=148158&r1=148157&r2=148158&view=diff</a><br>

>> >><br>
>> >> ==============================================================================<br>
>> >> --- cfe/trunk/test/SemaCXX/linkage.cpp (original)<br>
>> >> +++ cfe/trunk/test/SemaCXX/linkage.cpp Fri Jan 13 17:41:25 2012<br>
>> >> @@ -76,13 +76,15 @@<br>
>> >>     struct X {<br>
>> >>       int f() {<br>
>> >>         extern int g();<br>
>> >> -        extern int a;<br>
>> >> +        // FIXME: We don't compute the correct linkage for this<br>
>> >> variable<br>
>> >> +        // at the moment<br>
>> >> +        // extern int a;<br>
>> ><br>
>> > Are you planning on addressing this FIXME soon? We have some code<br>
>> > which looks roughly like this, and now Clang is producing a warning<br>
>> > "variable 'a' has internal linkage but is not defined".<br>
>><br>
>> Per the C++11 rules, this variable clearly has internal linkage, but<br>
>> the C++98 rules aren't very clear, and I'm not sure what the<br>
>> gcc-compatible rules are.  If you can point me to some description, I<br>
>> can implement it.<br>
><br>
><br>
> I'm not sure what C++11 rules you're referring to (I just haven't read that<br>
> part of the standard), but these definitely don't actually have internal<br>
> linkage... Both Clang and GCC give them external linkage and C mangling.<br>
> This is true even in C++11 mode, both with GCC and Clang in my tests... So<br>
> this warning looks like a false positive.<br>
<br>
</div></div>Oh, wait, nevermind, I was misreading the standard.  It's just that<br>
our code for this stuff appears a bit circular because our<br>
linkage-computation code distinguishes between UniqueExternal and<br>
External, while the standard doesn't.</blockquote><div><br></div><div>Yea, I'm trying to remember how this works... the linkage is UniqueExternal, but it still gets code-genned w/ C mangling and picked up correctly from another TU... I think I'm actually partially responsible for this working, but I'll have to dig more. It's not yet clear whether the warnings implementation needs to change or whether we're computing the wrong linkage kind and just patching it up later.... </div>
</div>