[Ada] Incorrect code for -gnateV switch
authorBob Duff <duff@adacore.com>
Mon, 19 Aug 2019 08:37:09 +0000 (08:37 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 19 Aug 2019 08:37:09 +0000 (08:37 +0000)
commit382b0e9771d77d482f6765454ec884936b62b15b
tree93eccc1c8fb26b09314c52d73d3b9b33a56dea82
parent27ebda1930cef2ac484abcca124a4d6230feee08
[Ada] Incorrect code for -gnateV switch

This patch corrects the code generated by the -gnateV switch in the case
of a private type whose full type is a modular type, removing spurious
run-time failures.

In addition, this corrects the initialization of exception occurrences
in exception handlers to avoid leaving data uninitialized, which caused
-gnateV to raise spurious errors.

2019-08-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* exp_attr.adb (Attribute_Valid): Correct the handling of
private types where the full type is modular. System.Address is
an example. Otherwise, we convert uncheckedly to a signed type,
so we get an incorrect range 0 .. -1, for which all values will
fail.  The 'Valid attribute is illegal for such types, but we
generate such illegal attribute_references for 'Valid_Scalars,
and we generate 'Valid_Scalars when the -gnateV switch is used.
Rename Btyp --> PBtyp to avoid hiding the outer Btyp, which was
confusing.
* libgnat/a-except.adb: Set the Exception_Raised component.
Otherwise, we have incorrect reads of invalid data.

gcc/testsuite/

* gnat.dg/valid_scalars2.adb: New testcase.

From-SVN: r274660
gcc/ada/ChangeLog
gcc/ada/exp_attr.adb
gcc/ada/libgnat/a-except.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/valid_scalars2.adb [new file with mode: 0644]