[Ada] Wrong dispatching call in type with aspect Implicit_Dereference
authorJavier Miranda <miranda@adacore.com>
Tue, 13 Aug 2019 08:08:27 +0000 (08:08 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 13 Aug 2019 08:08:27 +0000 (08:08 +0000)
commit5b15ac5f0506f3d9c1cf0913024e1c721521f7c0
tree016e9d2753a59ec6aa29897d62c9cb658d79c36e
parent5efb7125030aab3e2622be6de7fbbb18ddfadc8f
[Ada] Wrong dispatching call in type with aspect Implicit_Dereference

When a record type with an an access to class-wide type discriminant
has aspect Implicit_Dereference, and the discriminant is used as the
controlling argument of a dispatching call, the compiler may generate
wrong code to dispatch the call.

2019-08-13  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Selected_Component): When the type of the
component is an access to a class-wide type and the type of the
context is an access to a tagged type the relevant type is that
of the component (since in such case we may need to generate
implicit type conversions or dispatching calls).

gcc/testsuite/

* gnat.dg/tagged3.adb, gnat.dg/tagged3_pkg.adb,
gnat.dg/tagged3_pkg.ads: New testcase.

From-SVN: r274356
gcc/ada/ChangeLog
gcc/ada/sem_res.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/tagged3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/tagged3_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/tagged3_pkg.ads [new file with mode: 0644]