aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2023-11-14 13:33:31 -0800
committerMarc Poulhiès <poulhies@adacore.com>2023-11-30 11:12:46 +0100
commitab0efa304ffd7139105139c90de63ca0651ef274 (patch)
tree7b22a6fd85c116e8d7c4066af88815f2744de270 /gcc
parentf2c52c0dfde581461959b0e2b423ad106aadf179 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch4.adb18
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;