aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-02-20 22:40:47 +0100
committerMarc Poulhiès <poulhies@adacore.com>2024-05-16 10:49:29 +0200
commit81a5815a48b0d392de7ece86bdcc23a2d72aa5bd (patch)
treee1905ff6846874b0a44137f1a7ce402cfb169034
parent7c487eb8eccaad7c4ce9e4920fe9eaa5a9fab0bf (diff)
downloadgcc-81a5815a48b0d392de7ece86bdcc23a2d72aa5bd.zip
gcc-81a5815a48b0d392de7ece86bdcc23a2d72aa5bd.tar.gz
gcc-81a5815a48b0d392de7ece86bdcc23a2d72aa5bd.tar.bz2
ada: Fix bogus error on function returning noncontrolling result in private part
This occurs in the additional case of RM 3.9.3(10) in Ada 2012, that is to say the access controlling result, because the implementation does not use the same (correct) conditions as in the original case. This factors out these conditions and uses them in both cases, as well as adjusts the wording of the message in the first case. gcc/ada/ * sem_ch6.adb (Check_Private_Overriding): Implement the second part of RM 3.9.3(10) consistently in both cases.
-rw-r--r--gcc/ada/sem_ch6.adb23
1 files changed, 9 insertions, 14 deletions
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index c0bfe87..0a8030c 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -11555,35 +11555,30 @@ package body Sem_Ch6 is
Incomplete_Or_Partial_View (T);
begin
- if not Overrides_Visible_Function (Partial_View) then
+ if not Overrides_Visible_Function (Partial_View)
+ and then
+ Is_Tagged_Type
+ (if Present (Partial_View) then Partial_View else T)
+ then
-- Here, S is "function ... return T;" declared in
-- the private part, not overriding some visible
-- operation. That's illegal in the tagged case
-- (but not if the private type is untagged).
- if ((Present (Partial_View)
- and then Is_Tagged_Type (Partial_View))
- or else (No (Partial_View)
- and then Is_Tagged_Type (T)))
- and then T = Base_Type (Etype (S))
- then
+ if T = Base_Type (Etype (S)) then
Error_Msg_N
- ("private function with tagged result must"
+ ("private function with controlling result must"
& " override visible-part function", S);
Error_Msg_N
("\move subprogram to the visible part"
& " (RM 3.9.3(10))", S);
-- Ada 2012 (AI05-0073): Extend this check to the case
- -- of a function whose result subtype is defined by an
- -- access_definition designating specific tagged type.
+ -- of a function with access result type.
elsif Ekind (Etype (S)) = E_Anonymous_Access_Type
- and then Is_Tagged_Type (Designated_Type (Etype (S)))
- and then
- not Is_Class_Wide_Type
- (Designated_Type (Etype (S)))
+ and then T = Base_Type (Designated_Type (Etype (S)))
and then Ada_Version >= Ada_2012
then
Error_Msg_N