aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/libgnat/a-ciorma.adb7
-rw-r--r--gcc/ada/libgnat/a-ciormu.adb7
-rw-r--r--gcc/ada/libgnat/a-ciorse.adb7
-rw-r--r--gcc/ada/libgnat/a-coorma.adb7
-rw-r--r--gcc/ada/libgnat/a-coormu.adb7
-rw-r--r--gcc/ada/libgnat/a-coorse.adb7
7 files changed, 48 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 84dd18b..e032be3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2018-06-11 Bob Duff <duff@adacore.com>
+
+ * libgnat/a-ciorma.adb, libgnat/a-ciormu.adb, libgnat/a-ciorse.adb,
+ libgnat/a-coorma.adb, libgnat/a-coormu.adb, libgnat/a-coorse.adb:
+ (Element): Add code to detect dangling cursors in some cases.
+
2018-06-11 Yannick Moy <moy@adacore.com>
* sem_ch6.adb (Build_Subprogram_Declaration): Mark parameters as coming
diff --git a/gcc/ada/libgnat/a-ciorma.adb b/gcc/ada/libgnat/a-ciorma.adb
index a981f72..000851a 100644
--- a/gcc/ada/libgnat/a-ciorma.adb
+++ b/gcc/ada/libgnat/a-ciorma.adb
@@ -541,6 +541,13 @@ package body Ada.Containers.Indefinite_Ordered_Maps is
"Position cursor of function Element is bad";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"Position cursor of function Element is bad");
diff --git a/gcc/ada/libgnat/a-ciormu.adb b/gcc/ada/libgnat/a-ciormu.adb
index 2420788..5c3e9f7 100644
--- a/gcc/ada/libgnat/a-ciormu.adb
+++ b/gcc/ada/libgnat/a-ciormu.adb
@@ -545,6 +545,13 @@ package body Ada.Containers.Indefinite_Ordered_Multisets is
raise Program_Error with "Position cursor is bad";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"bad cursor in Element");
diff --git a/gcc/ada/libgnat/a-ciorse.adb b/gcc/ada/libgnat/a-ciorse.adb
index e656513..7394a4a 100644
--- a/gcc/ada/libgnat/a-ciorse.adb
+++ b/gcc/ada/libgnat/a-ciorse.adb
@@ -534,6 +534,13 @@ package body Ada.Containers.Indefinite_Ordered_Sets is
raise Program_Error with "Position cursor is bad";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"bad cursor in Element");
diff --git a/gcc/ada/libgnat/a-coorma.adb b/gcc/ada/libgnat/a-coorma.adb
index 05eea5b..5fd3ec6 100644
--- a/gcc/ada/libgnat/a-coorma.adb
+++ b/gcc/ada/libgnat/a-coorma.adb
@@ -481,6 +481,13 @@ package body Ada.Containers.Ordered_Maps is
"Position cursor of function Element equals No_Element";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"Position cursor of function Element is bad");
diff --git a/gcc/ada/libgnat/a-coormu.adb b/gcc/ada/libgnat/a-coormu.adb
index 0fc1063..c114cf9 100644
--- a/gcc/ada/libgnat/a-coormu.adb
+++ b/gcc/ada/libgnat/a-coormu.adb
@@ -502,6 +502,13 @@ package body Ada.Containers.Ordered_Multisets is
raise Constraint_Error with "Position cursor equals No_Element";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"bad cursor in Element");
diff --git a/gcc/ada/libgnat/a-coorse.adb b/gcc/ada/libgnat/a-coorse.adb
index 606938e..1f96d39 100644
--- a/gcc/ada/libgnat/a-coorse.adb
+++ b/gcc/ada/libgnat/a-coorse.adb
@@ -480,6 +480,13 @@ package body Ada.Containers.Ordered_Sets is
raise Constraint_Error with "Position cursor equals No_Element";
end if;
+ if Checks and then
+ (Left (Position.Node) = Position.Node
+ or else Right (Position.Node) = Position.Node)
+ then
+ raise Program_Error with "dangling cursor";
+ end if;
+
pragma Assert (Vet (Position.Container.Tree, Position.Node),
"bad cursor in Element");