https://gcc.gnu.org/g:ae2f951cc22ba9b0b1c8650d4de553344fc4fb95

commit r15-9005-gae2f951cc22ba9b0b1c8650d4de553344fc4fb95
Author: Bob Dubner <rdub...@symas.com>
Date:   Fri Mar 28 08:57:24 2025 -0400

    cobol: Eliminate check-cobol -Os failure in EVALUATE testcase
    
    The coding error was the lack of a necessary cast from unsigned
    char to int.
    
    gcc/cobol
    
            * genapi.cc: (create_and_call): cast unsigned char to int
    
    gcc/testsuite
    
            * cobol.dg/group2/Complex_EVALUATE__1_.cob: New EVALUTE testcase.
            * cobol.dg/group2/Complex_EVALUATE__2_.cob: Likewise.
            * cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob: Likewise.
            * cobol.dg/group2/EVALUATE_condition__2_.cob: Likewise.
            * cobol.dg/group2/EVALUATE_doubled_WHEN.cob: Likewise.
            * cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob: 
Likewise.
            * cobol.dg/group2/Complex_EVALUATE__1_.out: Known-good data for 
testcase.
            * cobol.dg/group2/Complex_EVALUATE__2_.out: Likewise.
            * cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out: Likewise.
            * cobol.dg/group2/EVALUATE_condition__2_.out: Likewise.
            * cobol.dg/group2/EVALUATE_doubled_WHEN.out: Likewise.
            * cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out: 
Likewise.

Diff:
---
 gcc/cobol/genapi.cc                                |  3 +-
 .../cobol.dg/group2/Complex_EVALUATE__1_.cob       | 46 +++++++++++++++++++
 .../cobol.dg/group2/Complex_EVALUATE__1_.out       |  5 +++
 .../cobol.dg/group2/Complex_EVALUATE__2_.cob       | 52 ++++++++++++++++++++++
 .../cobol.dg/group2/Complex_EVALUATE__2_.out       | 15 +++++++
 .../cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob     | 16 +++++++
 .../cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out     |  2 +
 .../cobol.dg/group2/EVALUATE_condition__2_.cob     | 38 ++++++++++++++++
 .../cobol.dg/group2/EVALUATE_condition__2_.out     |  5 +++
 .../cobol.dg/group2/EVALUATE_doubled_WHEN.cob      | 30 +++++++++++++
 .../cobol.dg/group2/EVALUATE_doubled_WHEN.out      |  5 +++
 .../EVALUATE_with_WHEN_using_condition-1.cob       | 18 ++++++++
 .../EVALUATE_with_WHEN_using_condition-1.out       |  2 +
 13 files changed, 236 insertions(+), 1 deletion(-)

diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index bc9153381588..8adc07ec57fa 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -12395,13 +12395,14 @@ create_and_call(size_t narg,
       // We got back a 64-bit or 128-bit integer.  The called and calling
       // programs have to agree on size, but other than that, integer numeric
       // types are converted one to the other.
+
       gg_call(VOID,
               "__gg__int128_to_qualified_field",
               gg_get_address_of(returned.field->var_decl_node),
               refer_offset_dest(returned),
               refer_size_dest(returned),
               gg_cast(INT128, returned_value),
-              member(returned.field->var_decl_node, "rdigits"),
+              gg_cast(INT, member(returned.field->var_decl_node, "rdigits")),
               build_int_cst_type(INT, truncation_e),
               null_pointer_node,
               NULL_TREE );
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob 
b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob
new file mode 100644
index 000000000000..a070d16108e9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob
@@ -0,0 +1,46 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/Complex_EVALUATE__1_.out" }
+
+        identification      division.
+        function-id.        bumper.
+        data                division.
+        working-storage     section.
+        77 bump             pic 9999    value zero.
+        linkage             section.
+        77 bumped           pic 9999.
+        procedure division returning bumped.
+            add 1 to bump.
+            move bump to bumped.
+            goback.
+        end function        bumper.
+
+        identification      division.
+        program-id.         prog.
+        environment         division.
+        configuration       section.
+            repository.
+            function         bumper.
+        data division.
+        working-storage     section.
+        77 bump             pic 9999    value zero.
+        77 bump1            pic 9999    value zero.
+        77 bump2            pic 9999    value zero.
+        77 bump3            pic 9999    value zero.
+        procedure division.
+            move function bumper to bump
+            display bump
+            move function bumper to bump
+            display bump
+            move function bumper to bump
+            display bump
+            evaluate function bumper also function bumper also function bumper
+            when 4 also 5 also 6
+                display "properly 4 also 5 also 6"
+            when 7 also 8 also 9
+                display "IMPROPERLY 6 then 7 then 8"
+            when other
+                display "we don't know what's going on"
+            end-evaluate
+            goback.
+        end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.out 
b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.out
new file mode 100644
index 000000000000..d634a794f0f3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.out
@@ -0,0 +1,5 @@
+0001
+0002
+0003
+properly 4 also 5 also 6
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.cob 
b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.cob
new file mode 100644
index 000000000000..0e88d74382ee
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.cob
@@ -0,0 +1,52 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/Complex_EVALUATE__2_.out" }
+
+        identification      division.
+        function-id.        bumper.
+        data                division.
+        working-storage     section.
+        77 bump             pic 9999    value zero.
+        linkage             section.
+        77 bumped           pic 9999.
+        procedure division returning bumped.
+            add 1 to bump.
+            move bump to bumped.
+            display "            bumper is returning " bumped
+            goback.
+        end function        bumper.
+
+        identification      division.
+        program-id.         prog.
+        environment         division.
+        configuration       section.
+            repository.
+            function         bumper.
+        data division.
+        working-storage     section.
+        77 bump             pic 9999    value zero.
+        procedure division.
+            display "            Prime the pump with three calls to bumper"
+            move function bumper to bump
+            move function bumper to bump
+            move function bumper to bump
+            display "            Three calls to BUMPER should follow"
+            evaluate function bumper also function bumper also function bumper
+            when 4 also 5 also 6
+                display "properly 4 also 5 also 6"
+            when 7 also 8 also 9
+                display "IMPROPERLY 7 also 8 also 9"
+            when other
+                display "IMPROPERLY we don't know what's going on"
+            end-evaluate
+            display "            Three more calls to BUMPER should follow"
+            evaluate function bumper also function bumper also function bumper
+            when 4 also 5 also 6
+                display "IMPROPERLY 4 also 5 also 6"
+            when 7 also 8 also 9
+                display "properly 7 also 8 also 9"
+            when other
+                display "IMPROPERLY we don't know what's going on"
+            end-evaluate
+            goback.
+        end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out 
b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out
new file mode 100644
index 000000000000..b0e9bdb3f898
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out
@@ -0,0 +1,15 @@
+            Prime the pump with three calls to bumper
+            bumper is returning 0001
+            bumper is returning 0002
+            bumper is returning 0003
+            Three calls to BUMPER should follow
+            bumper is returning 0004
+            bumper is returning 0005
+            bumper is returning 0006
+properly 4 also 5 also 6
+            Three more calls to BUMPER should follow
+            bumper is returning 0007
+            bumper is returning 0008
+            bumper is returning 0009
+properly 7 also 8 also 9
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob
new file mode 100644
index 000000000000..798f18b3580a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob
@@ -0,0 +1,16 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/EVALUATE_WHEN_NEGATIVE.out" }
+
+        identification division.
+        program-id. prog.
+        data division.
+        working-storage section.
+        77 num pic s9.
+        procedure division.
+        move -1  to num
+        evaluate num
+        when negative
+            display "negative"
+        end-evaluate.
+        end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out
new file mode 100644
index 000000000000..126adb7fbf77
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out
@@ -0,0 +1,2 @@
+negative
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.cob 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.cob
new file mode 100644
index 000000000000..84bc885276fe
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.cob
@@ -0,0 +1,38 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/EVALUATE_condition__2_.out" }
+
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+           01  XVAL PIC X VALUE '_'.
+               88  UNDERSCORE  VALUE '_'.
+        PROCEDURE        DIVISION.
+           DISPLAY 'Next line should be "UNDERSCORE evaluates to TRUE"'
+           EVALUATE TRUE
+              WHEN NOT UNDERSCORE
+                 DISPLAY
+                     "***IMPROPERLY*** NOT UNDERSCORE evaluates to TRUE"
+                 END-DISPLAY
+           END-EVALUATE.
+           EVALUATE TRUE
+              WHEN UNDERSCORE
+                 DISPLAY "UNDERSCORE evaluates to TRUE"
+                 END-DISPLAY
+           END-EVALUATE.
+
+           DISPLAY
+               'Next line should be "NOT UNDERSCORE evaluates to FALSE"'
+           EVALUATE FALSE
+              WHEN NOT UNDERSCORE
+                 DISPLAY "NOT UNDERSCORE evaluates to FALSE"
+                 END-DISPLAY
+           END-EVALUATE.
+           EVALUATE FALSE
+              WHEN UNDERSCORE
+                 DISPLAY
+                        "***IMPROPERLY*** UNDERSCORE evaluates to FALSE"
+                 END-DISPLAY
+           END-EVALUATE.
+           STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.out 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.out
new file mode 100644
index 000000000000..adff5ca7e9d1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_condition__2_.out
@@ -0,0 +1,5 @@
+Next line should be "UNDERSCORE evaluates to TRUE"
+UNDERSCORE evaluates to TRUE
+Next line should be "NOT UNDERSCORE evaluates to FALSE"
+NOT UNDERSCORE evaluates to FALSE
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.cob 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.cob
new file mode 100644
index 000000000000..50ff9586eabb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.cob
@@ -0,0 +1,30 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/EVALUATE_doubled_WHEN.out" }
+
+        identification division.
+        program-id. prog.
+        data division.
+        working-storage section.
+        77 eval pic x(4).
+        procedure division.
+            move "open" to eval
+            display "about to EVALUATE eval " """" eval """"
+            evaluate true
+            when eval = 'open'
+            when eval = 'OPEN'
+                display "Good: We got us an " """" eval """"
+            when other
+                display "BAD!!! It shoulda been " """" eval """"
+            end-evaluate
+            move "OPEN" to eval
+            display "about to EVALUATE eval " """" eval """"
+            evaluate true
+            when eval = 'open'
+            when eval = 'OPEN'
+                display "Good:     We got us an " """" eval """"
+            when other
+                display "BAD!!! It shoulda been " """" eval """"
+            end-evaluate
+            goback.
+        end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.out 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.out
new file mode 100644
index 000000000000..c4fa148b2a8c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_doubled_WHEN.out
@@ -0,0 +1,5 @@
+about to EVALUATE eval "open"
+Good: We got us an "open"
+about to EVALUATE eval "OPEN"
+Good:     We got us an "OPEN"
+
diff --git 
a/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob
new file mode 100644
index 000000000000..ed4c89a153f9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob
@@ -0,0 +1,18 @@
+       *> { dg-do run }
+       *> { dg-output-file "group2/EVALUATE_with_WHEN_using_condition-1.out" }
+
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       77 var-1 PIC 99V9.
+           88 var-1-big VALUE 20 THRU 40.
+           88 var-1-huge VALUE 40 THRU 99.
+       PROCEDURE DIVISION.
+           EVALUATE TRUE *> not: var-1
+              WHEN var-1-big  DISPLAY "big"
+              WHEN var-1-huge DISPLAY "huge"
+              WHEN OTHER      DISPLAY "not"
+              END-EVALUATE.
+           END PROGRAM prog.
+
diff --git 
a/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out 
b/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out
new file mode 100644
index 000000000000..3043bcc5dfa3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out
@@ -0,0 +1,2 @@
+not
+

Reply via email to