diff mbox series

[COMMITTED,17/22] ada: Reject ambiguous function calls in interpolated string expressions

Message ID 20240621085819.2485987-17-poulhies@adacore.com
State New
Headers show
Series [COMMITTED,01/22] ada: Spurious style error with mutiple square brackets | expand

Commit Message

Marc Poulhiès June 21, 2024, 8:58 a.m. UTC
From: Javier Miranda <miranda@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 mbox series

Patch

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;