public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Ada] Avoid warnings regarding rep clauses in generics
@ 2021-11-10  8:58 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2021-11-10  8:58 UTC (permalink / raw)
  To: gcc-patches; +Cc: Bob Duff

[-- Attachment #1: Type: text/plain, Size: 487 bytes --]

Representation-related node fields are not set for types in generic
units, so we should not warn based on the values of such fields. Also
avoid printing the values of such fields for -gnatR.

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

gcc/ada/

	* repinfo.adb (List_Common_Type_Info, List_Object_Info): Add
	check for In_Generic_Scope.
	(List_Component_Layout): Check for known static values.
	* sem_ch13.adb (Check_Record_Representation_Clause): Add check
	for In_Generic_Scope.

[-- Attachment #2: patch.diff --]
[-- Type: text/x-diff, Size: 2646 bytes --]

diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb
--- a/gcc/ada/repinfo.adb
+++ b/gcc/ada/repinfo.adb
@@ -38,6 +38,7 @@ with Output;         use Output;
 with Osint.C;        use Osint.C;
 with Sem_Aux;        use Sem_Aux;
 with Sem_Eval;       use Sem_Eval;
+with Sem_Util;
 with Sinfo;          use Sinfo;
 with Sinfo.Nodes;    use Sinfo.Nodes;
 with Sinfo.Utils;    use Sinfo.Utils;
@@ -426,11 +427,14 @@ package body Repinfo is
          end if;
 
       --  Alignment is not always set for task, protected, and class-wide
-      --  types.
+      --  types. Representation aspects are not computed for types in a
+      --  generic unit.
 
       else
          pragma Assert
-           (Is_Concurrent_Type (Ent) or else Is_Class_Wide_Type (Ent));
+           (Is_Concurrent_Type (Ent) or else
+              Is_Class_Wide_Type (Ent) or else
+              Sem_Util.In_Generic_Scope (Ent));
       end if;
    end List_Common_Type_Info;
 
@@ -902,6 +906,13 @@ package body Repinfo is
 
    procedure List_Object_Info (Ent : Entity_Id) is
    begin
+      --  The information has not been computed in a generic unit, so don't try
+      --  to print it.
+
+      if Sem_Util.In_Generic_Scope (Ent) then
+         return;
+      end if;
+
       Write_Separator;
 
       if List_Representation_Info_To_JSON then
@@ -1176,13 +1187,17 @@ package body Repinfo is
             Write_Str (" range  ");
          end if;
 
-         Sbit := Starting_First_Bit + Fbit;
+         if Known_Static_Normalized_First_Bit (Ent) then
+            Sbit := Starting_First_Bit + Fbit;
 
-         if Sbit >= SSU then
-            Sbit := Sbit - SSU;
-         end if;
+            if Sbit >= SSU then
+               Sbit := Sbit - SSU;
+            end if;
 
-         UI_Write (Sbit, Decimal);
+            UI_Write (Sbit, Decimal);
+         else
+            Write_Unknown_Val;
+         end if;
 
          if List_Representation_Info_To_JSON then
             Write_Line (", ");


diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -12618,9 +12618,11 @@ package body Sem_Ch13 is
       end if;
 
       --  Skip the following warnings if overlap was detected; programmer
-      --  should fix the errors first.
+      --  should fix the errors first. Also skip the warnings for types in
+      --  generics, because their representation information is not fully
+      --  computed.
 
-      if not Overlap_Detected then
+      if not Overlap_Detected and then not In_Generic_Scope (Rectype) then
          --  Check for record holes (gaps)
 
          if Warn_On_Record_Holes then



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-10  8:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-10  8:58 [Ada] Avoid warnings regarding rep clauses in generics Pierre-Marie de Rodat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).