aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog19
-rw-r--r--gcc/ada/exp_ch4.adb9
-rw-r--r--gcc/ada/exp_ch8.adb8
-rw-r--r--gcc/ada/sem_ch13.adb5
4 files changed, 34 insertions, 7 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index b8f882d..5f29776 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,22 @@
+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.
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 76bf939..e463f38 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -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);
diff --git a/gcc/ada/exp_ch8.adb b/gcc/ada/exp_ch8.adb
index 3b5c7d3..97bfac4 100644
--- a/gcc/ada/exp_ch8.adb
+++ b/gcc/ada/exp_ch8.adb
@@ -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;
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 40749ad..31f5ab8 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -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