aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog11
-rw-r--r--gcc/ada/gnat_ugn.texi2
-rw-r--r--gcc/ada/sem_ch4.adb19
3 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6f24bc6..cd6a678 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,14 @@
+2013-10-10 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch4.adb (Analyze_Selected_Component,
+ Has_Mode_Conformant_Spec): If selected component may be an
+ indexing of a parameterless call to a protected function, and
+ expansion is disabled, this is a valid candidate interpretation.
+
+2013-10-10 Arnaud Charlet <charlet@adacore.com>
+
+ * gnat_ugn.texi: Minor editing.
+
2013-10-10 Robert Dewar <dewar@adacore.com>
* gnatlink.adb: Minor reformatting.
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index 40ffc35..eebd799 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -241,7 +241,7 @@ By default, @value{EDITION} assumes Ada 2012, but you can override with a
compiler switch (@pxref{Compiling Different Versions of Ada})
to explicitly specify the language version.
Throughout this manual, references to ``Ada'' without a year suffix
-apply to both all Ada 95/2005/2012 versions of the language.
+apply to all Ada 95/2005/2012 versions of the language.
@ifclear FSFEDITION
For ease of exposition, ``@value{EDITION}'' will be referred to simply as
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index c4247cd..9fcd6ac 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -3962,10 +3962,25 @@ package body Sem_Ch4 is
Next (Param);
end loop;
- -- One of the specs has additional formals
+ -- One of the specs has additional formals, there is no match,
+ -- unless this may be an indexing of a parameterless call.
+
+ -- Note that when expansion is disabled, the corresponding record
+ -- type of synchronized types is not constructed, so that there is
+ -- no point is attempting an interpretation as a prefixed call, as
+ -- this is bound to fail because the primitive operations will not
+ -- be properly located.
if Present (Comp_Param) or else Present (Param) then
- return False;
+ if Needs_No_Actuals (Comp)
+ and then Is_Array_Type (Etype (Comp))
+ and then not Expander_Active
+ then
+ return True;
+
+ else
+ return False;
+ end if;
end if;
return True;