+2016-05-02 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_util.adb (Normalize_Actuals): Take into account extra
+ actuals that may have been introduced previously. Normally extra
+ actuals are introduced when a call is expanded, but a validity
+ check may copy and reanalyze a call that carries an extra actual
+ (e.g. an accessibility parameter) before the call itself is
+ marked Analzyed, and the analysis of the copy has to be able to
+ cope with the added actual.
+
2016-05-02 Bob Duff <duff@adacore.com>
* sem_ch10.adb (Analyze_Compilation_Unit): Preserve
and then Actual /= Last
and then No (Next_Named_Actual (Actual))
then
- Error_Msg_N ("unmatched actual & in call",
- Selector_Name (Actual));
- exit;
+ -- A validity check may introduce a copy of a call that
+ -- includes an extra actual (for example for an unrelated
+ -- accessibility check). Check that the extra actual matches
+ -- some extra formal, which must exist already because
+ -- subprogram must be frozen at this point.
+
+ if Present (Extra_Formals (S))
+ and then not Comes_From_Source (Actual)
+ and then Nkind (Actual) = N_Parameter_Association
+ and then Chars (Extra_Formals (S)) =
+ Chars (Selector_Name (Actual))
+ then
+ null;
+ else
+ Error_Msg_N
+ ("unmatched actual & in call", Selector_Name (Actual));
+ exit;
+ end if;
end if;
Next (Actual);