+2013-04-24 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_ch8.adb (Expand_N_Subprogram_Renaming_Declaration): If this
+ is a renaming of predefined equality for an untagged record,
+ add generated body to the freeze actions for the subprogram, to
+ prevent freezing issues when the record has incomplete components.
+ * exp_ch4.adb (Expand_Composite_Equality): If the type is a type
+ without completion, return a predefined comparison instead of
+ just False. This may happen when building the expression for
+ record equality, when some component has a type whose completion
+ has not been seen yet. The operation will be analyzed an expanded
+ after the type has been frozen, at which point all component
+ types will have been completed, or an error reported.
+
+2013-04-24 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch13.adb (Analyze_Aspect_Specifications): Do not delay
+ analysis of a Convention aspect.
+
2013-04-24 Eric Botcazou <ebotcazou@adacore.com>
* fe.h (Machine_Overflows_On_Target): New macro and declaration.
Full_Type := Typ;
end if;
- -- Defense against malformed private types with no completion the error
- -- will be diagnosed later by check_completion
+ -- If the private type has no completion the context may be the
+ -- expansion of a composite equality for a composite type with some
+ -- still incomplete components. The expression will not be analyzed
+ -- until the enclosing type is completed, at which point this will be
+ -- properly expanded, unless there is a bona fide completion error.
if No (Full_Type) then
- return New_Reference_To (Standard_False, Loc);
+ return Make_Op_Eq (Loc, Left_Opnd => Lhs, Right_Opnd => Rhs);
end if;
Full_Type := Base_Type (Full_Type);
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2013, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- meaning. It may be redefined later, but the renaming is
-- elaborated where it occurs. This is technically known as
-- Squirreling semantics. Renaming is rewritten as a subprogram
- -- declaration, and the body is inserted at the end of the
- -- current declaration list to prevent premature freezing.
+ -- declaration, and the generated body is inserted into the
+ -- freeze actions for the subprogram.
Decl := Build_Body_For_Renaming;
Rhs => Make_Identifier (Loc, Chars (Right)),
Bodies => Declarations (Decl))))));
- Append (Decl, List_Containing (N));
+ Append_Freeze_Action (Id, Decl);
end if;
end;
end if;
Make_Aitem_Pragma
(Pragma_Argument_Associations => Arg_List,
Pragma_Name => P_Name);
+
+ -- Convention is a static name, and must be associated
+ -- with the entity at once.
+
+ Delay_Required := False;
end;
-- CPU, Interrupt_Priority, Priority