[Ada] Replace in Ordered_Maps gets tampering failure

Pierre-Marie de Rodat derodat@adacore.com
Thu Oct 10 15:30:00 GMT 2019


This patch fixes a bug in which a call such as
Some_Map.Replace(10, Some_Map(5)) fails a tampering check. This happens
with the Some_Map(5) notation, or with the equivalent explicit call to
Constant_Reference. A call to Some_Map.Delete(10, Some_Map(5)) fails in
the same way. Other children of Ada.Containers are affected in the same
way.

Running these commands:

  gnatmake -q -f -g -O0 -gnata test_vectors.adb
  test_vectors

On the following sources:

with Ada.Containers.Vectors;

procedure Test_Vectors is

   package My_Vectors is new Ada.Containers.Vectors (Positive, Float);
   use My_Vectors;

   My_Vector : Vector := To_Vector (10.123, 20);

begin
   My_Vector.Replace_Element(10, My_Vector(5));
end Test_Vectors;

Should execute silently.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-10-10  Bob Duff  <duff@adacore.com>

gcc/ada/

	* libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb,
	libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb,
	libgnat/a-cborma.adb, libgnat/a-cborse.adb,
	libgnat/a-cdlili.adb, libgnat/a-cidlli.adb,
	libgnat/a-cihama.adb, libgnat/a-cihase.adb,
	libgnat/a-cimutr.adb, libgnat/a-ciorma.adb,
	libgnat/a-ciorse.adb, libgnat/a-cobove.adb,
	libgnat/a-cohama.adb, libgnat/a-cohase.adb,
	libgnat/a-coinve.adb, libgnat/a-comutr.adb,
	libgnat/a-conhel.adb, libgnat/a-convec.adb,
	libgnat/a-coorma.adb, libgnat/a-coorse.adb (Reference,
	Constant_Reference): Use Busy instead of Lock, so we forbid
	tampering with cursors, rather than tampering with elements.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.diff.gz
Type: application/gzip
Size: 2106 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20191010/b8516822/attachment.gz>


More information about the Gcc-patches mailing list