This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran 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: Meissner examples - the last one to fall


On Oct 4, 2005, at 6:49 AM, Paul THOMAS wrote:

Error: 'rect_inductor' is a PRIVATE type and cannot be a dummy argument of 'mutual_ind_quad_cir_coil', which is PUBLIC at (1)
In file induct.f90:1824

Yes, I seem not to have understood what comprises a PRIVATE type in this context, or I have screwed up the implementation.

I didn't go look at induct.f90 to check the context, but the definition of a PRIVATE type in that context is *very* subtle. I recall the longish J3 discussions about the related interps. The short version (omitting all the supporting rationale, which goes on for a bit) is that a type is only private if it has the private attribute in the module where it is originally defined. If you import (va USE) a type into some other module and declare it private there, that doesn't actually make the type private - that just means that the second module doesn't "export" it. The language keyword PRIVATE is unfortunately misleading in that it doesn't mean private. In the words of the standard (or close to them - I didn't go find and copy the exact ones, but I recall them pretty well from the long debate), the private attribute means that the entity "is not a public entity of this module". Note the peculiar negative form. Why does it talk about not being public instead of about being private? That's because it might still be public from some other module. Indeed, it must have been if you managed to get it via USE in the first place. Only if it is declared private in the original module is it really private.


P.S. Most of this nitpicking is made irrelevant in f2003. In fact, I had to go check to make sure it was f2003 instead of f95. Alas, it isn't until f2003, so one still has to deal with it in f95. The whole constraint in question is "silly". It achieves nothing useful, invalidates perfectly sensible code (even after you interpret it correctly), and is based on a fundamental misconception of what accessibility is about. F2003 removes the silly restriction (and a few related ones).

--
Richard Maine                |  Good judgment comes from experience;
Richard.Maine@nasa.gov       |  experience comes from bad judgment.
                            |        -- Mark Twain


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