The C.6 (12/3) clause makes it illegal to pass an atomic actual
parameter in a call corresponding to an aliased formal with a nonatomic
type.

This illegal case had been accepted up recently and started only to be
rejected as a by-product of the implementation of the C.6 (19) clause,
but the error message is confusing.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-12-13  Eric Botcazou  <ebotca...@adacore.com>

gcc/ada/

        * sem_res.adb (Resolve_Actuals): Give canonical error for
        illegal case of atomic/volatile parameter also if the formal is
        aliased.
--- gcc/ada/sem_res.adb
+++ gcc/ada/sem_res.adb
@@ -4717,7 +4717,7 @@ package body Sem_Res is
 
             --  Check bad case of atomic/volatile argument (RM C.6(12))
 
-            if Is_By_Reference_Type (Etype (F))
+            if (Is_By_Reference_Type (Etype (F)) or else Is_Aliased (F))
               and then Comes_From_Source (N)
             then
                if Is_Atomic_Object (A)

Reply via email to