]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Spurious conformance error on expression function
authorEd Schonberg <schonberg@adacore.com>
Sat, 1 May 2021 23:55:36 +0000 (19:55 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 6 Jul 2021 14:46:51 +0000 (14:46 +0000)
gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Do not perform
conformance check when the subprogram body has been created for
an expression function that is not a completion of a previous
specification, because the profile of the constructed body is
copied from the expression function itself.

gcc/ada/sem_ch6.adb

index 4b58d593733da9acf4b1654db282abf49bfa3af1..c7d4b961d476600652fb29153ca5a0eedd0bca82 100644 (file)
@@ -4585,6 +4585,17 @@ package body Sem_Ch6 is
             then
                Conformant := True;
 
+            --  Finally, a body generated for an expression function copies
+            --  the profile of the function and no check is needed either.
+            --  If the body is the completion of a previous function
+            --  declared elsewhere, the conformance check is required.
+
+            elsif Nkind (N) = N_Subprogram_Body
+              and then Was_Expression_Function (N)
+              and then Sloc (Spec_Id) = Sloc (Body_Id)
+            then
+               Conformant := True;
+
             else
                Check_Conformance
                  (Body_Id, Spec_Id,