OSDN Git Service

gcc/ada/
authorsam <sam@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Feb 2008 11:53:55 +0000 (11:53 +0000)
committersam <sam@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Feb 2008 11:53:55 +0000 (11:53 +0000)
PR ada/34799
* sem_ch13.adb (Analyze_Record_Representation_Clause): Check
that underlying type is present.

    gcc/testsuite/
PR ada/34799
* gnat.dg/specs/pr34799.ads: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132707 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/sem_ch13.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/specs/pr34799.ads [new file with mode: 0644]

index 148d066..f509596 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-27  Samuel Tardieu  <sam@rfc1149.net>
+
+       PR ada/34799
+       * sem_ch13.adb (Analyze_Record_Representation_Clause): Check
+       that underlying type is present.
+
 2008-02-26  Tom Tromey  <tromey@redhat.com>
 
        * misc.c (internal_error_function): Remove test of
index 33a55a8..2b58c12 100644 (file)
@@ -2747,7 +2747,10 @@ package body Sem_Ch13 is
             --  We are only interested in the case where there is at least one
             --  unrepped component, and at least half the components have rep
             --  clauses. We figure that if less than half have them, then the
-            --  partial rep clause is really intentional.
+            --  partial rep clause is really intentional. If the component
+            --  type has no underlying type set at this point (as for a generic
+            --  formal type), we don't know enough to give a warning on the
+            --  component.
 
             if Num_Unrepped_Components > 0
               and then Num_Unrepped_Components < Num_Repped_Components
@@ -2756,6 +2759,7 @@ package body Sem_Ch13 is
                while Present (Comp) loop
                   if No (Component_Clause (Comp))
                     and then Comes_From_Source (Comp)
+                    and then Present (Underlying_Type (Etype (Comp)))
                     and then (Is_Scalar_Type (Underlying_Type (Etype (Comp)))
                                 or else Size_Known_At_Compile_Time
                                              (Underlying_Type (Etype (Comp))))
index 3435b5b..f3285de 100644 (file)
@@ -1,3 +1,8 @@
+2008-02-27  Samuel Tardieu  <sam@rfc1149.net>
+
+       PR ada/34799
+       * gnat.dg/specs/pr34799.ads: New test.
+
 2008-02-27  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/34971
diff --git a/gcc/testsuite/gnat.dg/specs/pr34799.ads b/gcc/testsuite/gnat.dg/specs/pr34799.ads
new file mode 100644 (file)
index 0000000..7d06049
--- /dev/null
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+-- { dg-options "-gnatwa" }
+
+package PR34799 is
+   generic
+      type Custom_T is private;
+   package Handler is
+      type Storage_T is record
+         A : Boolean;
+         B : Boolean;
+         C : Custom_T;
+      end record;
+
+      for Storage_T use record
+         A at 0 range 0..0;
+         B at 1 range 0..0;
+      end record;
+   end Handler;
+end PR34799;