aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Dewar <dewar@adacore.com>2009-07-23 14:41:04 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-07-23 14:41:04 +0200
commit3ac489432f87ca7f0570b31d4cae16737cfd48fd (patch)
treee4abe208b98d80262410e962ea433c666904acaf
parente0dc6003fc81c6f839159f8f32944de2cd771afa (diff)
downloadgcc-3ac489432f87ca7f0570b31d4cae16737cfd48fd.zip
gcc-3ac489432f87ca7f0570b31d4cae16737cfd48fd.tar.gz
gcc-3ac489432f87ca7f0570b31d4cae16737cfd48fd.tar.bz2
sem_util.adb (Wrong_Type): Special message for cases like A and B = 0
2009-07-23 Robert Dewar <dewar@adacore.com> * sem_util.adb (Wrong_Type): Special message for cases like A and B = 0 From-SVN: r150004
-rw-r--r--gcc/ada/sem_util.adb24
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 25793ac..8cd3278 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -11077,6 +11077,30 @@ package body Sem_Util is
Error_Msg_NE ("\\found}!", Expr, Found_Type);
end if;
+ -- A special check for cases like M1 and M2 = 0 where M1 and M2 are
+ -- of the same modular type, and (M1 and M2) = 0 was intended.
+
+ if Expec_Type = Standard_Boolean
+ and then Is_Modular_Integer_Type (Found_Type)
+ and then Nkind_In (Parent (Expr), N_Op_And, N_Op_Or, N_Op_Xor)
+ and then Nkind (Right_Opnd (Parent (Expr))) in N_Op_Compare
+ then
+ declare
+ Op : constant Node_Id := Right_Opnd (Parent (Expr));
+ L : constant Node_Id := Left_Opnd (Op);
+ R : constant Node_Id := Right_Opnd (Op);
+ begin
+ if Etype (L) = Found_Type
+ and then Is_Integer_Type (Etype (R))
+ then
+ Error_Msg_N
+ ("\\possible missing parens for modular operation", Expr);
+ end if;
+ end;
+ end if;
+
+ -- Reset error message qualification indication
+
Error_Msg_Qual_Level := 0;
end if;
end Wrong_Type;