aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2013-01-02 10:34:50 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2013-01-02 10:34:50 +0100
commit39ce7604727100ff8abd1e5513a303b6df499b7a (patch)
tree9d30ede550d344346619d59afd728b95b281a29e
parent1824c168768592a20fcf9fe41634f9ebecabb52c (diff)
downloadgcc-39ce7604727100ff8abd1e5513a303b6df499b7a.zip
gcc-39ce7604727100ff8abd1e5513a303b6df499b7a.tar.gz
gcc-39ce7604727100ff8abd1e5513a303b6df499b7a.tar.bz2
[multiple changes]
2013-01-02 Thomas Quinot <quinot@adacore.com> * exp_prag.adb: Minor reformatting. 2013-01-02 Ed Schonberg <schonberg@adacore.com> * sem_ch12.adb (Get_Associated_Node): If the node is an identifier that denotes an unconstrained array in an object declaration, it is rewritten as the name of an anonymous subtype whose bounds are given by the initial expression in the declaration. When checking whether that identifier is global reference, use the original node, not the local generated subtype. 2013-01-02 Olivier Hainque <hainque@adacore.com> * tracebak.c: Revert previous change, incomplete. 2013-01-02 Ed Schonberg <schonberg@adacore.com> * sem_ch13.adb (Analyze_Aspect_Specifications): If the aspect appears on a subprogram body that acts as a spec, place the corresponding pragma in the declarations of the body, so that e.g. pre/postcondition checks can be generated appropriately. 2013-01-02 Robert Dewar <dewar@adacore.com> * sem_ch3.adb: Minor reformatting and code reorganization. From-SVN: r194781
-rw-r--r--gcc/ada/ChangeLog28
-rw-r--r--gcc/ada/exp_prag.adb4
-rw-r--r--gcc/ada/sem_ch12.adb11
-rw-r--r--gcc/ada/sem_ch13.adb11
-rw-r--r--gcc/ada/sem_ch3.adb21
-rw-r--r--gcc/ada/tracebak.c21
6 files changed, 68 insertions, 28 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 66c03a0..7d79a90 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,31 @@
+2013-01-02 Thomas Quinot <quinot@adacore.com>
+
+ * exp_prag.adb: Minor reformatting.
+
+2013-01-02 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch12.adb (Get_Associated_Node): If the node is an
+ identifier that denotes an unconstrained array in an object
+ declaration, it is rewritten as the name of an anonymous
+ subtype whose bounds are given by the initial expression in the
+ declaration. When checking whether that identifier is global
+ reference, use the original node, not the local generated subtype.
+
+2013-01-02 Olivier Hainque <hainque@adacore.com>
+
+ * tracebak.c: Revert previous change, incomplete.
+
+2013-01-02 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch13.adb (Analyze_Aspect_Specifications): If the aspect
+ appears on a subprogram body that acts as a spec, place the
+ corresponding pragma in the declarations of the body, so that
+ e.g. pre/postcondition checks can be generated appropriately.
+
+2013-01-02 Robert Dewar <dewar@adacore.com>
+
+ * sem_ch3.adb: Minor reformatting and code reorganization.
+
2013-01-02 Vincent Celier <celier@adacore.com>
* switch-m.adb (Normalize_Compiler_Switches): Record the
diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb
index d34322d..9ff1318 100644
--- a/gcc/ada/exp_prag.adb
+++ b/gcc/ada/exp_prag.adb
@@ -274,8 +274,8 @@ package body Exp_Prag is
--------------------------
procedure Expand_Pragma_Check (N : Node_Id) is
- Cond : constant Node_Id := Arg2 (N);
- Nam : constant Name_Id := Chars (Arg1 (N));
+ Cond : constant Node_Id := Arg2 (N);
+ Nam : constant Name_Id := Chars (Arg1 (N));
Msg : Node_Id;
Loc : constant Source_Ptr := Sloc (First_Node (Cond));
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 10718c4..b90a7af 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -4929,6 +4929,17 @@ package body Sem_Ch12 is
Assoc := Associated_Node (Assoc);
end if;
+ -- An additional special case: an unconstrained type in an object
+ -- declaration may have been rewritten as a local subtype constrained
+ -- by the expression in the declaration. We need to recover the
+ -- original entity which may be global.
+
+ if Present (Original_Node (Assoc))
+ and then Nkind (Parent (N)) = N_Object_Declaration
+ then
+ Assoc := Original_Node (Assoc);
+ end if;
+
return Assoc;
end if;
end Get_Associated_Node;
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 38be20c..a959e51 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -1606,6 +1606,17 @@ package body Sem_Ch13 is
if Nkind (Parent (N)) = N_Compilation_Unit then
Add_Global_Declaration (Aitem);
+
+ -- If it is a subprogram body, add pragmas to list of
+ -- declarations in body.
+
+ elsif Nkind (N) = N_Subprogram_Body then
+ if No (Declarations (N)) then
+ Set_Declarations (N, New_List);
+ end if;
+
+ Append (Aitem, Declarations (N));
+
else
Insert_After (N, Aitem);
end if;
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 451873a..2308234 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -13633,7 +13633,7 @@ package body Sem_Ch3 is
Alias_Subp : Entity_Id;
Act_List : Elist_Id;
- Act_Elmt : Elmt_Id := No_Elmt;
+ Act_Elmt : Elmt_Id;
Act_Subp : Entity_Id := Empty;
Elmt : Elmt_Id;
Need_Search : Boolean := False;
@@ -13656,6 +13656,9 @@ package body Sem_Ch3 is
if Present (Generic_Actual) then
Act_List := Collect_Primitive_Operations (Generic_Actual);
Act_Elmt := First_Elmt (Act_List);
+ else
+ Act_List := No_Elist;
+ Act_Elmt := No_Elmt;
end if;
-- Derive primitives inherited from the parent. Note that if the generic
@@ -13850,15 +13853,17 @@ package body Sem_Ch3 is
pragma Assert
(Is_Generic_Unit
(Scope (Find_Dispatching_Type (Alias_Subp)))
- or else
- Instantiation_Depth
- (Sloc (Find_Dispatching_Type (Alias_Subp))) > 0);
+ or else
+ Instantiation_Depth
+ (Sloc (Find_Dispatching_Type (Alias_Subp))) > 0);
declare
Iface_Prim_Loc : constant Source_Ptr :=
Original_Location (Sloc (Alias_Subp));
- Elmt : Elmt_Id;
- Prim : Entity_Id;
+
+ Elmt : Elmt_Id;
+ Prim : Entity_Id;
+
begin
Elmt :=
First_Elmt (Primitive_Operations (Generic_Actual));
@@ -13868,8 +13873,8 @@ package body Sem_Ch3 is
if Present (Interface_Alias (Prim))
and then Original_Location
- (Sloc (Interface_Alias (Prim)))
- = Iface_Prim_Loc
+ (Sloc (Interface_Alias (Prim))) =
+ Iface_Prim_Loc
then
Act_Subp := Alias (Prim);
exit Search;
diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c
index 01b9654..2c8335d 100644
--- a/gcc/ada/tracebak.c
+++ b/gcc/ada/tracebak.c
@@ -287,10 +287,9 @@ __gnat_backtrace (void **array,
#error Unhandled darwin architecture.
#endif
-/*---------------------- PPC AIX/PPC Lynx 178/Older Darwin ------------------*/
+/*------------------------ PPC AIX/Older Darwin -------------------------*/
#elif ((defined (_POWER) && defined (_AIX)) || \
- (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \
- (defined (__ppc__) && defined (__APPLE__)))
+(defined (__ppc__) && defined (__APPLE__)))
#define USE_GENERIC_UNWINDER
@@ -308,23 +307,9 @@ struct layout
should to feature a null backchain, AIX might expose a null return
address instead. */
-/* Then LynxOS-178 features yet another variation, with return_address
- == &__start, which we only add conditionally as this symbol is not
- necessarily present elsewhere. Beware that &bla returns the
- address of a descriptor when "bla" is a function. Getting the code
- address requires an extra dereference. */
-
-#if defined (__Lynx__)
-extern void __start();
-#define EXTRA_STOP_CONDITION(CURRENT) ((CURRENT)->return_address == *(void**)&__start)
-#else
-#define EXTRA_STOP_CONDITION(CURRENT) (0)
-#endif
-
#define STOP_FRAME(CURRENT, TOP_STACK) \
(((void *) (CURRENT) < (TOP_STACK)) \
- || (CURRENT)->return_address == NULL \
- || EXTRA_STOP_CONDITION(CURRENT))
+ || (CURRENT)->return_address == NULL)
/* The PPC ABI has an interesting specificity: the return address saved by a
function is located in it's caller's frame, and the save operation only