// 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 );
--- /dev/null
+ *> { 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.
+
--- /dev/null
+0001
+0002
+0003
+properly 4 also 5 also 6
+
--- /dev/null
+ *> { 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.
+
--- /dev/null
+ 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
+
--- /dev/null
+ *> { 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.
+
--- /dev/null
+negative
+
--- /dev/null
+ *> { 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.
+
--- /dev/null
+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
+
--- /dev/null
+ *> { 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.
+
--- /dev/null
+about to EVALUATE eval "open"
+Good: We got us an "open"
+about to EVALUATE eval "OPEN"
+Good: We got us an "OPEN"
+
--- /dev/null
+ *> { 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.
+