[patch] Fix pr16247

Rafael Espíndola rafael.espindola at gmail.com
Mon Jun 17 07:18:38 PDT 2013


ping (both the patch and the comment about language visibility).

On 11 June 2013 09:02, Rafael Espíndola <rafael.espindola at gmail.com> wrote:
> On 10 June 2013 19:08, Rafael Espíndola <rafael.espindola at gmail.com> wrote:
>> Richard pointed out on IRC that the patch should look at the
>> redeclaration context to avoid problems with one of the functions
>> being in a extern "C++". Implementing that found some interesting
>> problems. Consider
>>
>> extern "C" {
>>   static void foo(int x);
>>   static void foo() {
>>   }
>>   void foo(int x) {
>>   }
>> }
>>
>> This should be valid, since both functions have internal linkage and
>> therefore none of them has C language linkage. Commenting the first
>> declaration makes the code invalid as now the last one is extern C and
>> [dcl.link] p6 kicks in. This means we have to do "normal" overload
>> resolution first to see if the last decl we are looking at has C
>> language linkage or not.
>
> BTW, is this sufficient evidence that we should just give static
> functions C language linkage? I just checked http://gcc.godbolt.org/
> and gcc 4.8 and icc 13 (which is edg based, no?), reject
>
> extern "C" {
>   static void foo() {
>   }
>   static void foo(int x) {
>   }
> }
>
> We are putting quiet a bit of effort to make sure we accept it and I
> still can't see the value.
>
> Cheers,
> Rafael




More information about the cfe-commits mailing list