From aeaa0347e94b1dfa040809b3b098fcc0474d45f7 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Wed, 23 May 2018 10:23:19 +0000 Subject: [PATCH] [Ada] Vectors: spurious error in -gnatwE mode This patch fixes a bug in which if Ada.Containers.Vectors is instantiated with an Index_Type such that Index_Type'Base'Last is less than Count_Type'Last, and the -gnatwE switch is used, the compiler gives spurious error messages. The following test should compile quietly with -gnatwE: gnatmake short_vectors.ads -gnatwa -gnatwE -gnatf with Ada.Containers.Vectors; package Short_Vectors is type Index_Type is range 1 .. 256; package Map_Pkg is new Ada.Containers.Vectors (Index_Type => Index_Type, Element_Type => Integer); end Short_Vectors; 2018-05-23 Bob Duff gcc/ada/ * libgnat/a-convec.adb: (Insert, Insert_Space): Suppress warnings. The code in question is not reachable in the case where Count_Type'Last is out of range. From-SVN: r260590 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/libgnat/a-convec.adb | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1f91142..bb3d631 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-05-23 Bob Duff + + * libgnat/a-convec.adb: (Insert, Insert_Space): Suppress warnings. The + code in question is not reachable in the case where Count_Type'Last is + out of range. + 2018-05-23 Yannick Moy * doc/gnat_rm/implementation_defined_pragmas.rst: Clarify meaning of diff --git a/gcc/ada/libgnat/a-convec.adb b/gcc/ada/libgnat/a-convec.adb index 285d3f5..b098860 100644 --- a/gcc/ada/libgnat/a-convec.adb +++ b/gcc/ada/libgnat/a-convec.adb @@ -999,9 +999,12 @@ package body Ada.Containers.Vectors is -- We know that No_Index (the same as Index_Type'First - 1) is -- less than 0, so it is safe to compute the following sum without - -- fear of overflow. + -- fear of overflow. We need to suppress warnings, because + -- otherwise we get an error in -gnatwE mode. + pragma Warnings (Off); Index := No_Index + Index_Type'Base (Count_Type'Last); + pragma Warnings (On); if Index <= Index_Type'Last then @@ -1657,9 +1660,12 @@ package body Ada.Containers.Vectors is -- We know that No_Index (the same as Index_Type'First - 1) is -- less than 0, so it is safe to compute the following sum without - -- fear of overflow. + -- fear of overflow. We need to suppress warnings, because + -- otherwise we get an error in -gnatwE mode. + pragma Warnings (Off); Index := No_Index + Index_Type'Base (Count_Type'Last); + pragma Warnings (On); if Index <= Index_Type'Last then -- 2.7.4