aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2023-05-02 12:49:43 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-06-13 09:31:45 +0200
commit204dba400b42b75271071b05102a5b46fd2a34d0 (patch)
tree521cc2b9ed146b3aa6dada1e7aa9483b27c8ba63 /gcc
parentd0ffa8d5155db105ce7b6e5b76c489c0fff1d090 (diff)
downloadgcc-204dba400b42b75271071b05102a5b46fd2a34d0.zip
gcc-204dba400b42b75271071b05102a5b46fd2a34d0.tar.gz
gcc-204dba400b42b75271071b05102a5b46fd2a34d0.tar.bz2
ada: Skip elaboration checks for abstract subprograms on derived types
Elaboration checks skip abstract subprogram declarations, which have no body that could be examined. Now these checks also skip abstract subprograms of a derived type, which have no body either. gcc/ada/ * sem_elab.adb (Check_Overriding_Primitive): Prevent Corresponding_Body to be called with entity of an abstract subprogram.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_elab.adb5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index 1e18b98..dc81e47 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -15263,10 +15263,13 @@ package body Sem_Elab is
-- Nothing to do for predefined primitives because they are
-- artifacts of tagged type expansion and cannot override source
-- primitives. Nothing to do as well for inherited primitives, as
- -- the check concerns overriding ones.
+ -- the check concerns overriding ones. Finally, nothing to do for
+ -- abstract subprograms, because they have no body that could be
+ -- examined.
if Is_Predefined_Dispatching_Operation (Prim)
or else not Is_Overriding_Subprogram (Prim)
+ or else Is_Abstract_Subprogram (Prim)
then
return;
end if;