This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++ PATCH] warning about empty extern "C" structures


On Wed, May 17, 2006 at 06:40:13PM +0200, Gabriel Dos Reis wrote:
> OK, please explain it to me again.
> 
> From my perspective
> 
>   extern "C" { struct S { }; }
> 
> is not turning the C++ compiler to define a C program.  So, the issue
> here is whether it would cause a portability problem with C programs
> -- this is a very rare case of C/c++ compatibility.  It also appears
> that the definition of S is permitted in GNU C with completely a
> different meaning.  Consequnently, the warning -- if we must have a
> warning -- should not be confined to the C++ front-end...

I can't get from your premises to your conclusion.

- It is a valid C++ construct, so obviously we shouldn't warn about it
in C++.

- It is a valid C construct in the GNU dialects, so we shouldn't warn
about it in C.

- Using it in extern "C" in the GNU dialects is obviously broken, since
it will be given the C++ layout, but the C version it is trying to
interface will be given the C layout, and they will not match.

I think that the only sensible options are warning or using the C
layout within extern "C".

> The arguments for this patch hold verbatim.

[for warning in C]

Absolutely they don't.  It has as clearly defined of a meaning in
gcc -std=gnu89 as it does in g++; they happen to be different.

-- 
Daniel Jacobowitz
CodeSourcery


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]