[Ada] Spurious error on nested instantiation

Pierre-Marie de Rodat derodat@adacore.com
Tue Aug 13 08:32:00 GMT 2019


This fixes a spurious error given by the compiler for a call to a
subprogram which is the formal subprogram parameter of a generic
package, if the generic package is instantiated in the body of an
enclosing generic package with two formal types and two formal
subprogram parameter homonyms taking them, and this instantiation takes
one the two formal types as actual, and the enclosing generic package is
instantiated on the same actual type with a single actual subprogram
parameter, and the aforementioned call is overloaded.

In this case, the renaming generated for the actual subprogram parameter
in the nested instantiation is ambiguous and must be disambiguated using
the corresponding formal parameter of the enclosing instantiation,
otherwise a (sub)type mismatch is created and later subprogram
disambiguation is not really possible.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-08-13  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch4.adb (Analyze_One_Call): Remove bypass for type
	mismatch in nested instantiations.
	* sem_ch8.adb (Find_Nearer_Entity): New function.
	(Find_Renamed_Entity): Use it to disambiguate the candidates for
	the renaming generated for an instantiation when it is
	ambiguous.

gcc/testsuite/

	* gnat.dg/generic_inst9.adb, gnat.dg/generic_inst9.ads,
	gnat.dg/generic_inst9_pkg1-operator.ads,
	gnat.dg/generic_inst9_pkg1.ads, gnat.dg/generic_inst9_pkg2.adb,
	gnat.dg/generic_inst9_pkg2.ads: New testcase.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.diff
Type: text/x-diff
Size: 12031 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20190813/2fc82474/attachment.bin>


More information about the Gcc-patches mailing list