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.
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