diff options
author | Steve Baird <baird@adacore.com> | 2023-11-14 13:33:31 -0800 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-11-30 11:12:46 +0100 |
commit | ab0efa304ffd7139105139c90de63ca0651ef274 (patch) | |
tree | 7b22a6fd85c116e8d7c4066af88815f2744de270 | |
parent | f2c52c0dfde581461959b0e2b423ad106aadf179 (diff) | |
download | gcc-ab0efa304ffd7139105139c90de63ca0651ef274.zip gcc-ab0efa304ffd7139105139c90de63ca0651ef274.tar.gz gcc-ab0efa304ffd7139105139c90de63ca0651ef274.tar.bz2 |
ada: Constant_Indexing used when context requires a variable
In the case of a call with a formal parameter of mode other than "IN"
where the corresponding actual parameter is a generalized indexing
and the indexable container has both Constant_Indexing and Variable_Indexing
aspects specified, the generalized indexing must be interpreted as a
variable indexing, not as a constant indexing. In some cases involving a
call to a prefixed view of a subprogram, this was not handled correctly.
This error results in spurious compile-time error messages saying that
the actual parameter in the call "must be a variable".
gcc/ada/
* sem_ch4.adb (Constant_Indexing_OK): As a temporary stopgap,
return False in the case of an unanalyzed prefixed-view call.
-rw-r--r-- | gcc/ada/sem_ch4.adb | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 83705b9..d506944 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -8473,9 +8473,21 @@ package body Sem_Ch4 is -- resolution does not depend on the type of the parameter that -- includes the indexing operation. - elsif Nkind (Parent (Par)) in N_Subprogram_Call - and then Is_Entity_Name (Name (Parent (Par))) - then + elsif Nkind (Parent (Par)) in N_Subprogram_Call then + + if not Is_Entity_Name (Name (Parent (Par))) then + + -- ??? We don't know what to do with an N_Selected_Component + -- node for a prefixed-notation call to AA.BB where AA's + -- type is known, but BB has not yet been resolved. In that + -- case, the preceding Is_Entity_Name call returns False. + -- Incorrectly returning False here will usually work + -- better than incorrectly returning True, so that's what + -- we do for now. + + return False; + end if; + declare Proc : Entity_Id; |