>From 3c9066c01ccd7270408423b1773699af05dd361e Mon Sep 17 00:00:00 2001
From: Robert Dubner mailto:rdub...@symas.com
Date: Tue, 20 May 2025 11:49:43 -0400
Subject: [PATCH] cobol: sqrt(0) is not an ec-argument error. [PR119885]

libgcobol

        PR cobol/119885
        * intrinsic.cc: (__gg__sqrt): Change test from <= zero to < zero.

gcc/testsuite

        * cobol.dg/group2/FUNCTION_SQRT__2_.cob: Testcase.
        * cobol.dg/group2/FUNCTION_SQRT__2_.out: Known-good for the
testcase.
---
 gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob | 13 +++++++++++++
 gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out |  5 +++++
 libgcobol/intrinsic.cc                              |  2 +-
 3 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
 create mode 100644 gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out

diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
new file mode 100644
index 000000000000..c1f4ba8684a6
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
@@ -0,0 +1,13 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/FUNCTION_SQRT__2_.out" }
+        program-id. sqbug.
+        procedure division.
+        if function sqrt (0) = 0    *>    if4034.2
+            display 'ok' else display 'bad'.
+        display "sqrt(0) " """" function trim (function exception-status)
""""
+        set last exception to off
+        if function sqrt (-0.1) = 0    *>    if4034.2
+            display 'ok' else display 'bad'.
+        display "sqrt(-0.1) " """" function trim (function
exception-status) """"
+        goback.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
new file mode 100644
index 000000000000..0783ac5abb17
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
@@ -0,0 +1,5 @@
+ok
+sqrt(0) ""
+bad
+sqrt(-0.1) "EC-ARGUMENT-FUNCTION"
+
diff --git a/libgcobol/intrinsic.cc b/libgcobol/intrinsic.cc
index 1bbdc6777f2a..1af4a53fce49 100644
--- a/libgcobol/intrinsic.cc
+++ b/libgcobol/intrinsic.cc
@@ -3565,7 +3565,7 @@ __gg__sqrt( cblc_field_t *dest,
                                                         source_offset,
                                                         source_size);
 
-  if( value <= GCOB_FP128_LITERAL(0.0) )
+  if( value < GCOB_FP128_LITERAL(0.0) )
     {
     exception_raise(ec_argument_function_e);
     }
-- 
2.34.1

Reply via email to