https://gcc.gnu.org/g:e0ab5ee9bed5cbad9ae344a23ff0d302b8279d32
commit r15-940-ge0ab5ee9bed5cbad9ae344a23ff0d302b8279d32 Author: Marc Poulhiès <poulh...@adacore.com> Date: Thu May 23 11:57:54 2024 +0200 fix: valid compiler optimization may fail the test cxa4001 may fail with "Exception not raised" when the compiler omits the calls to To_Mapping, in accordance with 10.2.1(18/3): "If a library unit is declared pure, then the implementation is permitted to omit a call on a library-level subprogram of the library unit if the results are not needed after the call" Using the result of both To_Mapping calls prevents the compiler from omitting them. "The corrected test will be available on the ACAA web site (http://www.ada-auth.org/), and will be issued with the Modified Tests List version 2.6K, 3.1DD, and 4.1GG." gcc/testsuite/ChangeLog: * ada/acats/tests/cxa/cxa4001.a: Use function result. Diff: --- gcc/testsuite/ada/acats/tests/cxa/cxa4001.a | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gcc/testsuite/ada/acats/tests/cxa/cxa4001.a b/gcc/testsuite/ada/acats/tests/cxa/cxa4001.a index d850acd4a72..52fabc3d514 100644 --- a/gcc/testsuite/ada/acats/tests/cxa/cxa4001.a +++ b/gcc/testsuite/ada/acats/tests/cxa/cxa4001.a @@ -185,6 +185,12 @@ begin begin Bad_Map := Maps.To_Mapping(From => "aa", To => "yz"); Report.Failed("Exception not raised with repeated character"); + + if Report.Equal (Character'Pos('y'), + Character'Pos(Maps.Value(Bad_Map, 'a'))) then + -- Use the map to avoid optimization. + Report.Comment ("Shouldn't get here."); + end if; exception when Translation_Error => null; -- OK when others => @@ -200,6 +206,12 @@ begin begin Bad_Map := Maps.To_Mapping("abc", "yz"); Report.Failed("Exception not raised with unequal parameter lengths"); + + if Report.Equal (Character'Pos('y'), + Character'Pos(Maps.Value(Bad_Map, 'a'))) then + -- Use the map to avoid optimization. + Report.Comment ("Shouldn't get here."); + end if; exception when Translation_Error => null; -- OK when others =>