]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Feb 2012 13:47:23 +0000 (14:47 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 22 Feb 2012 13:47:23 +0000 (14:47 +0100)
2012-02-22  Ed Schonberg  <schonberg@adacore.com>

* freeze.adb (Freeze_Entity): Do not perform type layout within
a generic unit.

2012-02-22  Eric Botcazou  <ebotcazou@adacore.com>

* init.c (__gnat_error_handler) [Linux]: Map SIGBUS to
Storage_Error.

2012-02-22  Ed Schonberg  <schonberg@adacore.com>

* exp_ch5.adb (Expand_N_Assignment_Statement): Reject an
assignment to a classwide type whose type is limited, as
can happen in an instantiation in programs that run afoul or
AI05-0087.

From-SVN: r184471

gcc/ada/ChangeLog
gcc/ada/exp_ch5.adb
gcc/ada/freeze.adb
gcc/ada/init.c

index be95913fe49777ca9f5e41dee7bd2802eac0c848..8204c0401db2315ccad538de81d1f1511fb60c65 100644 (file)
@@ -1,3 +1,21 @@
+2012-02-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * freeze.adb (Freeze_Entity): Do not perform type layout within
+       a generic unit.
+
+2012-02-22  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * init.c (__gnat_error_handler) [Linux]: Map SIGBUS to
+       Storage_Error.
+
+2012-02-22  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch5.adb (Expand_N_Assignment_Statement): Reject an
+       assignment to a classwide type whose type is limited, as
+       can happen in an instantiation in programs that run afoul or
+       AI05-0087.
+
+
 2012-02-17  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch6.adb (Legal_Copy): If layout is not
index 34ff36a63b5a16ebcb043557d1524f46b4534159..7eb224d0f079d0c45d532ceb65da613bb7cc5e0e 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, 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- --
@@ -28,6 +28,7 @@ with Atree;    use Atree;
 with Checks;   use Checks;
 with Debug;    use Debug;
 with Einfo;    use Einfo;
+with Errout;   use Errout;
 with Exp_Aggr; use Exp_Aggr;
 with Exp_Ch6;  use Exp_Ch6;
 with Exp_Ch7;  use Exp_Ch7;
@@ -2086,6 +2087,18 @@ package body Exp_Ch5 is
                          and then
                            not Restriction_Active (No_Dispatching_Calls))
             then
+               if Is_Limited_Type (Typ) then
+
+                  --  This can happen in an instance when the formal is an
+                  --  extension of a limited interface, and the actual is
+                  --  limited. This is an error according to AI05-0087, but
+                  --  is not caught at the point of instantiation in earlier
+                  --  versions.
+
+                  Error_Msg_N ("assignment not available on limited type", N);
+                  return;
+               end if;
+
                --  Fetch the primitive op _assign and proper type to call it.
                --  Because of possible conflicts between private and full view,
                --  fetch the proper type directly from the operation profile.
index 6325b4521c308bc9903468ad163f88e85f80870c..15bd6e075e3adfe2bc9e6735612a57831160ad55 100644 (file)
@@ -4407,10 +4407,12 @@ package body Freeze is
          --  the size and alignment values. This processing is not required for
          --  generic types, since generic types do not play any part in code
          --  generation, and so the size and alignment values for such types
-         --  are irrelevant.
+         --  are irrelevant. Ditto for types declared within a generic unit,
+         --  which may have components that depend on generic parameters, and
+         --  that will be recreated in an instance.
 
-         if Is_Generic_Type (E) then
-            return Result;
+         if Inside_A_Generic then
+            null;
 
          --  Otherwise we call the layout procedure
 
index 79c5c5b535b0963de384abacc4ca7ed66c5acccf..c2fd46b893fc43df19a980e2d2b0b4a97a697383 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *          Copyright (C) 1992-2011, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2012, 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- *
@@ -661,8 +661,8 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
       break;
 
     case SIGBUS:
-      exception = &constraint_error;
-      msg = "SIGBUS";
+      exception = &storage_error;
+      msg = "SIGBUS: possible stack overflow";
       break;
 
     case SIGFPE: