Commit c4405dfe by Ed Schonberg Committed by Arnaud Charlet

sem_util.adb (Normalize_Actuals): Take into account extra actuals that may have…

sem_util.adb (Normalize_Actuals): Take into account extra actuals that may have been introduced previously.

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.

From-SVN: r235723
parent 05ff4c5f
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
......
......@@ -17088,9 +17088,24 @@ package body Sem_Util is
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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment