This patch fixes an omission in the handling of delayed aspects on derived
types. The type may inherit a representation aspect from its parent, but have
no explicit aspect specifications. At the point it is frozen, the parent is
frozen as well and its explicit aspects have been analyzed. The inherited
aspects of the derived type can then be captured properly.

Tested in ACATS test C35A001.

Tested on x86_64-pc-linux-gnu, committed on trunk

2017-09-06  Ed Schonberg  <schonb...@adacore.com>

        * freeze.adb (Freeze_Entity): For a derived type that has no
        explicit delayed aspects but may inherit delayed aspects from its
        parent type, analyze aspect at freeze point for proper capture
        of an inherited aspect.

Index: freeze.adb
===================================================================
--- freeze.adb  (revision 251760)
+++ freeze.adb  (working copy)
@@ -5266,8 +5266,12 @@
       --  pragma or attribute definition clause in the tree at this point. We
       --  also analyze the aspect specification node at the freeze point when
       --  the aspect doesn't correspond to pragma/attribute definition clause.
+      --  In addition, a derived type may have inherited aspects that were
+      --  delayed in the parent, so these must also be captured now.
 
-      if Has_Delayed_Aspects (E) then
+      if Has_Delayed_Aspects (E)
+         or else May_Inherit_Delayed_Rep_Aspects (E)
+      then
          Analyze_Aspects_At_Freeze_Point (E);
       end if;
 

Reply via email to