aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2019-08-14 09:52:10 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-14 09:52:10 +0000
commit72e324b6d8cb43b07eb3927f7d150b93105d1add (patch)
treeff7dd89b26672c86524992e4fe81aee5f6de6164 /libgo
parentae3a2b54d1a19f9ca4941645f71dddf675fbd19c (diff)
downloadgcc-72e324b6d8cb43b07eb3927f7d150b93105d1add.zip
gcc-72e324b6d8cb43b07eb3927f7d150b93105d1add.tar.gz
gcc-72e324b6d8cb43b07eb3927f7d150b93105d1add.tar.bz2
[Ada] Equality for nonabstract type derived from interface treated as abstract
The compiler was creating an abstract function for the equality operation of a (nonlimited) interface type, and that could result in errors on generic instantiations that are passed nonabstract types derived from the interface type along with the derived type's inherited equality operation (complaining about an abstract subprogram being passed to a nonabstract formal). The "=" operation of an interface is supposed to be nonabstract (a direct consequence of the rule in RM 4.5.2(6-7)), so we now create an expression function rather than an abstract function. The function returns False, but the result is unimportant since a function of an abstract type can never actually be invoked (its arguments must generally be class-wide, since there can be no objects of the type, and calling it will dispatch). 2019-08-14 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * exp_ch3.adb (Predef_Spec_Or_Body): For an equality operation of an interface type, create an expression function (that returns False) rather than declaring an abstract function. * freeze.adb (Check_Inherited_Conditions): Set Needs_Wrapper to False unconditionally at the start of the loop creating wrappers for inherited operations. gcc/testsuite/ * gnat.dg/equal11.adb, gnat.dg/equal11_interface.ads, gnat.dg/equal11_record.adb, gnat.dg/equal11_record.ads: New testcase. From-SVN: r274464
Diffstat (limited to 'libgo')
0 files changed, 0 insertions, 0 deletions