diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/equal9.adb | 26 |
4 files changed, 42 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 79ee0b1..9d5a50f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2019-07-11 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_res.adb (Resolve_Op_Not): Do not rewrite an equality + operator into a function call when the operator is intrinsic. + 2019-07-11 Thomas Quinot <quinot@adacore.com> * sem_prag.adb (Analyze_Pragma, case pragma Check): Do not call diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 78cbac0..c17b28d 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -10091,15 +10091,20 @@ package body Sem_Res is declare Opnd : constant Node_Id := Right_Opnd (N); + Op_Id : Entity_Id; + begin if B_Typ = Standard_Boolean and then Nkind_In (Opnd, N_Op_Eq, N_Op_Ne) and then Is_Overloaded (Opnd) then Resolve_Equality_Op (Opnd, B_Typ); + Op_Id := Entity (Opnd); - if Ekind (Entity (Opnd)) = E_Function then - Rewrite_Operator_As_Call (Opnd, Entity (Opnd)); + if Ekind (Op_Id) = E_Function + and then not Is_Intrinsic_Subprogram (Op_Id) + then + Rewrite_Operator_As_Call (Opnd, Op_Id); end if; if not Inside_A_Generic or else Is_Entity_Name (Opnd) then diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 66d1e3e..a761f79 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-07-11 Hristian Kirtchev <kirtchev@adacore.com> + + * gnat.dg/equal9.adb: New testcase. + 2019-07-11 Thomas Quinot <quinot@adacore.com> * gnat.dg/scos1.adb: New testcase. diff --git a/gcc/testsuite/gnat.dg/equal9.adb b/gcc/testsuite/gnat.dg/equal9.adb new file mode 100644 index 0000000..aa60d5b --- /dev/null +++ b/gcc/testsuite/gnat.dg/equal9.adb @@ -0,0 +1,26 @@ +-- { dg-do run } + +with Ada.Text_IO; use Ada.Text_IO; +with System; use System; + +procedure Equal9 is + Val : Address := Null_Address; +begin + if Val = Null_Address then + Put_Line ("= OK"); + else + raise Program_Error; + end if; + + if Val /= Null_Address then + raise Program_Error; + else + Put_Line ("/= OK"); + end if; + + if not (Val = Null_Address) then + raise Program_Error; + else + Put_Line ("not = OK"); + end if; +end Equal9; |