The -gnatzr switch triggers the creation of distribution stubs for use by the implementation of PolyORB. Now these stubs declare tagged types and are generated at the very end of the analysis of compilation units, after the static dispatch tables have been built, so these tables are missing for the tagged types of the stubs. Therefore this change defers the generation of static dispatch tables for compilation units, which is the common case, until after the stubs are (potentially) generated. For the other cases, in particular the generic instances that are not compilation units, nothing is changed. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * exp_ch7.adb (Expand_N_Package_Body): Build static dispatch tables only for units that are not compilation units, unless they are generic instances. Do not push a scope for this. (Expand_N_Package_Declaration): Build static dispatch tables only for units that are both not compilation units and generic instances. * exp_disp.adb (Build_Static_Dispatch_Tables): Remove redundant early return. Push a scope for package bodies. * sem_ch10.adb: Add with and use clauses for Exp_Disp. (Analyze_Compilation_Unit): Build static dispatch tables here.