Commit ced8450b by Ed Schonberg Committed by Arnaud Charlet

exp_ch8.adb (Expand_N_Subprogram_Renaming_Declaration): If this is a renaming of…

exp_ch8.adb (Expand_N_Subprogram_Renaming_Declaration): If this is a renaming of predefined equality for an untagged record...

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.

From-SVN: r198225
parent b546e2a7
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> 2013-04-24 Eric Botcazou <ebotcazou@adacore.com>
* fe.h (Machine_Overflows_On_Target): New macro and declaration. * fe.h (Machine_Overflows_On_Target): New macro and declaration.
......
...@@ -2568,11 +2568,14 @@ package body Exp_Ch4 is ...@@ -2568,11 +2568,14 @@ package body Exp_Ch4 is
Full_Type := Typ; Full_Type := Typ;
end if; end if;
-- Defense against malformed private types with no completion the error -- If the private type has no completion the context may be the
-- will be diagnosed later by check_completion -- 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 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; end if;
Full_Type := Base_Type (Full_Type); Full_Type := Base_Type (Full_Type);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -328,8 +328,8 @@ package body Exp_Ch8 is ...@@ -328,8 +328,8 @@ package body Exp_Ch8 is
-- meaning. It may be redefined later, but the renaming is -- meaning. It may be redefined later, but the renaming is
-- elaborated where it occurs. This is technically known as -- elaborated where it occurs. This is technically known as
-- Squirreling semantics. Renaming is rewritten as a subprogram -- Squirreling semantics. Renaming is rewritten as a subprogram
-- declaration, and the body is inserted at the end of the -- declaration, and the generated body is inserted into the
-- current declaration list to prevent premature freezing. -- freeze actions for the subprogram.
Decl := Build_Body_For_Renaming; Decl := Build_Body_For_Renaming;
...@@ -345,7 +345,7 @@ package body Exp_Ch8 is ...@@ -345,7 +345,7 @@ package body Exp_Ch8 is
Rhs => Make_Identifier (Loc, Chars (Right)), Rhs => Make_Identifier (Loc, Chars (Right)),
Bodies => Declarations (Decl)))))); Bodies => Declarations (Decl))))));
Append (Decl, List_Containing (N)); Append_Freeze_Action (Id, Decl);
end if; end if;
end; end;
end if; end if;
......
...@@ -1487,6 +1487,11 @@ package body Sem_Ch13 is ...@@ -1487,6 +1487,11 @@ package body Sem_Ch13 is
Make_Aitem_Pragma Make_Aitem_Pragma
(Pragma_Argument_Associations => Arg_List, (Pragma_Argument_Associations => Arg_List,
Pragma_Name => P_Name); Pragma_Name => P_Name);
-- Convention is a static name, and must be associated
-- with the entity at once.
Delay_Required := False;
end; end;
-- CPU, Interrupt_Priority, Priority -- CPU, Interrupt_Priority, Priority
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment