+2017-04-25 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch6.adb (Analyze_Expression_Function): If expression function
+ is completion and return type is an access type do not freeze
+ designated type: this will be done in the process of freezing
+ the expression if needed.
+ (Freeze_Expr_Types): Check whether type is complete before
+ creating freeze node, to provide a better error message if
+ reference is premature.
+ * sem_ch13.adb (Check_Indexing_Functions): Ignore inherited
+ functions created by type derivations.
+
2017-04-25 Pascal Obry <obry@adacore.com>
* g-sercom.ads: Add simple usage of GNAT.Serial_Communication.
-- subprogram itself.
if Is_Overloadable (It.Nam) then
- Check_One_Function (It.Nam);
+
+ -- Ignore homonyms that may come from derived types
+ -- in the context.
+
+ if not Comes_From_Source (It.Nam) then
+ null;
+ else
+ Check_One_Function (It.Nam);
+ end if;
end if;
Get_Next_Interp (I, It);
end if;
end if;
- if Is_Access_Type (Etype (Prev)) then
- Freeze_Before (N, Designated_Type (Etype (Prev)));
- end if;
-
-- For navigation purposes, indicate that the function is a body
Generate_Reference (Prev, Defining_Entity (N), 'b', Force => True);
elsif Ekind_In (Entity (Node), E_Component,
E_Discriminant)
then
- Freeze_Before (N, Scope (Entity (Node)));
+ declare
+ Rec : constant Entity_Id := Scope (Entity (Node));
+ begin
+
+ -- Check that the enclosing record type can be frozen.
+ -- This provides a better error message than generating
+ -- primitives whose compilation fails much later.
+ -- Refine the error message if possible.
+
+ Check_Fully_Declared (Rec, Node);
+
+ if Error_Posted (Node) then
+ if Has_Private_Component (Rec) then
+ Error_Msg_NE ("\type& has private component",
+ Node, Rec);
+ end if;
+
+ else
+ Freeze_Before (N, Rec);
+ end if;
+ end;
end if;
end if;