From: Javier Miranda <mira...@adacore.com>

When the interpolated expression is a call to an ambiguous call
the frontend does not reject it; erroneously accepts the call
and generates code that calls to one of them.

gcc/ada/

        * sem_ch2.adb (Analyze_Interpolated_String_Literal): Reject
        ambiguous function calls.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/sem_ch2.adb | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/ada/sem_ch2.adb b/gcc/ada/sem_ch2.adb
index aae9990eb4d..08cc75c9104 100644
--- a/gcc/ada/sem_ch2.adb
+++ b/gcc/ada/sem_ch2.adb
@@ -25,7 +25,9 @@
 
 with Atree;          use Atree;
 with Einfo;          use Einfo;
+with Einfo.Entities; use Einfo.Entities;
 with Einfo.Utils;    use Einfo.Utils;
+with Errout;         use Errout;
 with Ghost;          use Ghost;
 with Mutably_Tagged; use Mutably_Tagged;
 with Namet;          use Namet;
@@ -141,6 +143,14 @@ package body Sem_Ch2 is
       Str_Elem := First (Expressions (N));
       while Present (Str_Elem) loop
          Analyze (Str_Elem);
+
+         if Nkind (Str_Elem) = N_Identifier
+           and then Ekind (Entity (Str_Elem)) = E_Function
+           and then Is_Overloaded (Str_Elem)
+         then
+            Error_Msg_NE ("ambiguous call to&", Str_Elem, Entity (Str_Elem));
+         end if;
+
          Next (Str_Elem);
       end loop;
    end Analyze_Interpolated_String_Literal;
-- 
2.45.1

Reply via email to