mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-15 18:01:31 +08:00
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:
parent
b46be8a2b7
commit
e0ba1bfd64
@ -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
|
||||
|
@ -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;
|
||||
|
||||
-------------------------
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user