[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LuaJIT ignores conflicting typedefs
- From: Florian Weimer <fw@...>
- Date: Sun, 18 Dec 2011 23:18:14 +0100
* Mike Pall:
> Florian Weimer wrote:
>> I wonder what the correct semantics would be. Error out on any
>> redeclaration? Or only if the redeclaration differs in a significant
>> way? (Which could boil down to graph isormorphism.)
>
> C99 has strict rules for that. But most compilers use relaxed
> rules.
For duplicate typedefs? Those seem to be allowed in C++. But even in
C++, redeclaration of POD structs is not permitted.
The only extension in this area I'm aware of stems from the lack of
whole-program optimization: You can get away with declaring types
differently in different translation units. But this has never been a
deliberate extension as such.
> For the FFI one would want to use different rules in some places.
> E.g. some users may (wrongly) redeclare intptr_t because they just
> copied the CPP output for the wrong architecture.
My main concern is the lack of an include guard mechanism. For
instance, I may want to declare ssize_t because a C API I want to use
uses that type. But another library tries to declare ssize_t, too.
What should happen in this case?
Responsibility for resolving this conflict could be pushed to library
authors, either through coordination or name mangling. Both
approaches are a bit at odds with the FFI's appeal of simplicity
("just paste the declaration from the manpage into your sources").