Robert Dewar wrote: > Frode Tenneboe wrote: >> Using -gnatwa I get some elaboration issues with some legacy code in GNAT. >> One of these are: >> >> foo.adb:69:04: warning: instantiation of "Client" may raise Program_Error >> foo.adb:69:04: warning: missing pragma Elaborate_All for "bar" > If this message is not intelligible, I recommend reading > the entire chapter on elaboration issues in the users > guide. Elaboration is certainly a tricky issue, and > generally you should not turn on -gnatwl unless you know > what you are doing. I like to _think_ I know what I'm doing. :) However, elaboration is tricky and I have read the relevant chapter several times. Every time I read it I discover new neuances. I can only recomend everybody to read this chapter several times. The code is legacy code with complex dependencies and need some time to grow..... The warning is removed by adding (in the above example): pragma Elaborate_Body(bar) in bar.ads. However, I'm still not totatlly sure if this is the "correct" approach. But at least it makes more sense than adding pragma Elaborate_All in all clients using package bar. > We certainly find that helping customers work through > elaboration issues is a significant part of our support > effort, which is why we implemented the static model > of elaboration to try to ameliorate this in the future. I think the elaboration performed by GNAT is very good, especially considered when I tried to hand-elaborate a particular nasty piece of software it simply stops working. Even removing certain childs from packages which were not used there breaks the implementation. However, I find the above warning a bit misplaced in my case. I would have preferred: bar.adb:69:04: warning: instantiation of "Client" may raise Program_Error bar.adb:69:04: warning: missing pragma Elaborate_Body in spec or: bar.adb:69:04: warning: call to "Client" may raise Program_Error bar.adb:69:04: warning: missing pragma Elaborate_Body in spec I don't know if the compiler is able to detect this, but it would be nicer. I'm also unsure if this is always true, but alternatively: foo.adb:69:04: warning: instantiation of "Client" may raise Program_Error foo.adb:69:04: warning: missing pragma Elaborate_All for "bar" or foo.adb:69:04: warning: missing pragma Elaborate_Body in "bar" -Frode -- ^ Frode Tenneb� | email: ft@edh.ericsson.se ^ | Ericsson Radar AS. N-1788 Halden | | | Phone: +47 69 21 41 47 | Frode@IRC | | with Standard.Disclaimer; use Standard.Disclaimer; |