2008-07-31 Gary Dismukes <dismukes@adacore.com>
authorGary Dismukes <dismukes@adacore.com>
Thu, 31 Jul 2008 13:53:55 +0000 (15:53 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 31 Jul 2008 13:53:55 +0000 (15:53 +0200)
* sem_aggr.adb:
(Resolve_Record_Aggregate): Bypass error that a type without
components must have a "null record" aggregate when compiling for Ada
2005, since it's legal to give an aggregate of form (others => <>)
for such a type.

From-SVN: r138412

gcc/ada/sem_aggr.adb

index 4f50dc0..d16b7d6 100644 (file)
@@ -2770,7 +2770,17 @@ package body Sem_Aggr is
          Error_Msg_N ("record aggregate cannot be null", N);
          return;
 
-      elsif No (First_Entity (Typ)) then
+      --  If the type has no components, then the aggregate should either
+      --  have "null record", or in Ada 2005 it could instead have a single
+      --  component association given by "others => <>". For Ada 95 we flag
+      --  an error at this point, but for Ada 2005 we proceed with checking
+      --  the associations below, which will catch the case where it's not
+      --  an aggregate with "others => <>". Note that the legality of a <>
+      --  aggregate for a null record type was established by AI05-016.
+
+      elsif No (First_Entity (Typ))
+         and then Ada_Version < Ada_05
+      then
          Error_Msg_N ("record aggregate must be null", N);
          return;
       end if;