sem_ch4.adb (Analyze_Conditional_Expression): handle properly overloaded expressions in a conditional expressions.

2009-07-07  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch4.adb (Analyze_Conditional_Expression): handle properly
	overloaded expressions in a conditional expressions.

	* sem_res.adb (Resolve): Handle properly overloaded conditional
	expressions.

From-SVN: r149317
This commit is contained in:
Ed Schonberg 2009-07-07 10:40:14 +00:00 committed by Arnaud Charlet
parent b46be8a2b7
commit e0ba1bfd64
3 changed files with 30 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2009-07-07 Ed Schonberg <schonberg@adacore.com>
* sem_ch4.adb (Analyze_Conditional_Expression): handle properly
overloaded expressions in a conditional expressions.
* sem_res.adb (Resolve): Handle properly overloaded conditional
expressions.
2009-07-07 Robert Dewar <dewar@adacore.com>
* scng.adb: Minor reformattting

View File

@ -1250,7 +1250,25 @@ package body Sem_Ch4 is
Analyze_Expression (Else_Expr);
end if;
Set_Etype (N, Etype (Then_Expr));
if not Is_Overloaded (Then_Expr) then
Set_Etype (N, Etype (Then_Expr));
else
declare
I : Interp_Index;
It : Interp;
begin
Set_Etype (N, Any_Type);
Get_First_Interp (Then_Expr, I, It);
while Present (It.Nam) loop
if Has_Compatible_Type (Else_Expr, It.Typ) then
Add_One_Interp (N, It.Typ, It.Typ);
end if;
Get_Next_Interp (I, It);
end loop;
end;
end if;
end Analyze_Conditional_Expression;
-------------------------

View File

@ -2146,6 +2146,9 @@ package body Sem_Res is
elsif Nkind (N) = N_Character_Literal then
Set_Etype (N, Expr_Type);
elsif Nkind (N) = N_Conditional_Expression then
Set_Etype (N, Expr_Type);
-- For an explicit dereference, attribute reference, range,
-- short-circuit form (which is not an operator node), or call
-- with a name that is an explicit dereference, there is