IMA vs tree-ssa

Mark Mitchell mark@codesourcery.com
Tue Mar 9 11:14:00 GMT 2004


Joseph S. Myers wrote:

>On Tue, 9 Mar 2004, Mark Mitchell wrote:
>
>  
>
>>However, I don't think there's any point in all of us debating this
>>issue.  We don't agree on the answer, and none of us has a particularly
>>good way of backing up our position.  To me, this idea of multiple
>>completions of the same incomplete type is ghastly.  You, however,
>>believe it is what the standard requires, and apparently that it is also
>>what the committe intended.
>>    
>>
>
>This seems simply to be a difference between C and C++ backgrounds.  
>Types in C do not have linkage; those in C++ do.  I don't know whether
>this is a deliberate difference, but it is a fairly fundamental one.
>  
>
You and Gaby keep telling me this and I believe you.  I worked on C 
stuff for years before I worked on C++ stuff -- I have roughly as much C 
background as C++ background.

I know that CenterLine's error-checking tools would have complained 
about trying to complete the same type in two different ways in a single 
program, and that our stuff was very widely used, including by AT&T in 
tons of code.  Our design priority was to issue no errors that would 
annoy real users (so, for example, we didn't warn about int/long 
mismatches on systems where they were the same size).  Therefore, the 
fact that we did warn about multiple completions and that we did not get 
complaints suggests that either (a) this doesn't happen very often, or 
(b) users consider it to be a bug when informed that it is happened.

>>I would appreciate it if you would communicate with the C committee to
>>find out what they really intend.  Ultimately, it's their opinion that
>>matters.  We can't resolve this issue just by talking among ourselves.
>>    
>>
>
>What is the actual concrete defect here?  (As far as I know the only
>relevant procedure here is sending DRs - there isn't one for "requests to
>identify intent".  Asking the WG14 reflector a question may get answers
>"obviously yes", "obviously no" and "it's obvious, but I won't say which
>way" to the same question, but doesn't get a good indicator of committee
>intent.) 
>
Well, it would get a good indicator of what other experts on C think the 
intent was.  It can't hurt to get more input, so let's get it!   If all 
the replies agree with one position or the other, we'll have a clear 
indicator.

The defect, in my opinion, is that the standard does not say:

  If there exists a translation unit A such that a tagged type named T 
is incomplete in
  that translation unit, then the program has undefined behavior if 
there is more than
  one translation unit where a tagged type named T is complete and any 
of the
  complete types is not compatible with any of the other complete types.

You are very good with wording such things; you might be able to 
wordsmith that statement more accurately than I, even if you do not 
agree with it.

Note that those words do not imply that there may not exist two 
definitions of a tagged type with the same name; just that if so there 
may not be translation units in which that tag type appears as an 
incomplete type.  The intuition is that either the type is being used 
privately in one or more translation units (in which case it is OK for 
multiple types to have the same name) or it is used publicly (in which 
case all definitions must agree).  If you are using the opaque 
(incomplete) type in a header, then all definitions must match.

I believe that the example that Geoff posted is a compelling argument in 
favor of such a rule.  It is hard for me to believe that the C commitee 
intended that the code he posted have defined behavior.  I'm willing to 
shown otherwise, but I'd like to hear  that some collection of commitee 
members agree that this code is valid before committing us to complex 
machinations in the compiler to deal with this corner case.

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com



More information about the Gcc mailing list