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>
* fe.h (Machine_Overflows_On_Target): New macro and declaration.
......
......@@ -2568,11 +2568,14 @@ package body Exp_Ch4 is
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);
......
......@@ -6,7 +6,7 @@
-- --
-- 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- --
......@@ -328,8 +328,8 @@ package body Exp_Ch8 is
-- 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;
......@@ -345,7 +345,7 @@ package body Exp_Ch8 is
Rhs => Make_Identifier (Loc, Chars (Right)),
Bodies => Declarations (Decl))))));
Append (Decl, List_Containing (N));
Append_Freeze_Action (Id, Decl);
end if;
end;
end if;
......
......@@ -1487,6 +1487,11 @@ package body Sem_Ch13 is
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
......
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