aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonber@gnat.com>2004-10-27 14:29:32 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2004-10-27 14:29:32 +0200
commit28e4d64e1b77c4cab1c85bf1fb21cc665ed24b6e (patch)
tree34813e768b591df62c5467dd0344b9df257802ba /gcc
parent59705c38c69f6a622b9f53764de40d869f69bd3d (diff)
downloadgcc-28e4d64e1b77c4cab1c85bf1fb21cc665ed24b6e.zip
gcc-28e4d64e1b77c4cab1c85bf1fb21cc665ed24b6e.tar.gz
gcc-28e4d64e1b77c4cab1c85bf1fb21cc665ed24b6e.tar.bz2
checks.adb (Expr_Known_Valid): If floating-point validity checks are enabled...
2004-10-26 Ed Schonberg <schonberg@gnat.com> * checks.adb (Expr_Known_Valid): If floating-point validity checks are enabled, check the result of unary and binary operations when the expression is the right-hand side of an assignment. From-SVN: r89645
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/checks.adb23
1 files changed, 18 insertions, 5 deletions
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 357d9f2..a60b21d 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -3792,13 +3792,26 @@ package body Checks is
-- The result of any function call or operator is always considered
-- valid, since we assume the necessary checks are done by the call.
+ -- For operators on floating-point operations, we must also check
+ -- when the operation is the right-hand side of an assignment, or
+ -- is an actual in a call.
- elsif Nkind (Expr) in N_Binary_Op
- or else
- Nkind (Expr) in N_Unary_Op
- or else
- Nkind (Expr) = N_Function_Call
+ elsif
+ Nkind (Expr) in N_Binary_Op or else Nkind (Expr) in N_Unary_Op
then
+ if Is_Floating_Point_Type (Typ)
+ and then Validity_Check_Floating_Point
+ and then
+ (Nkind (Parent (Expr)) = N_Assignment_Statement
+ or else Nkind (Parent (Expr)) = N_Function_Call
+ or else Nkind (Parent (Expr)) = N_Parameter_Association)
+ then
+ return False;
+ else
+ return True;
+ end if;
+
+ elsif Nkind (Expr) = N_Function_Call then
return True;
-- For all other cases, we do not know the expression is valid