diff --git a/gcc/cobol/etests/compute-1/Makefile b/gcc/cobol/etests/compute-1/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f77e46b3451abf45cb70ed9dc161be56b3b063c7 --- /dev/null +++ b/gcc/cobol/etests/compute-1/Makefile @@ -0,0 +1 @@ +include ../Makefile.inc diff --git a/gcc/cobol/etests/compute-1/caller.cbl b/gcc/cobol/etests/compute-1/caller.cbl new file mode 100644 index 0000000000000000000000000000000000000000..a8ceb3d2c8380867261a3d23222f57d5356fd590 --- /dev/null +++ b/gcc/cobol/etests/compute-1/caller.cbl @@ -0,0 +1,286 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. caller. + + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 A PIC 99 VALUE 50. + 01 B PIC 999 VALUE 25. + 01 C PIC 99 VALUE 42. + 01 Z PIC 99 VALUE ZERO. + + + PROCEDURE DIVISION. + + DISPLAY "Dividing something by ZERO..." + DIVIDE B BY Z GIVING C + DISPLAY "1 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE B BY Z GIVING C + ON SIZE ERROR DISPLAY "Proper Size Error". + DISPLAY "2 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE B BY Z GIVING C + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY "3 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE B BY Z GIVING C + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY "4 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "Dividing 50 by 25..." + DIVIDE A BY B GIVING C + DISPLAY "5 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE A BY B GIVING C + ON SIZE ERROR DISPLAY "Improper Size Error". + DISPLAY "6 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE A BY B GIVING C + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY "7 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DIVIDE A BY B GIVING C + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY "8 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "DIVIDE ZERO into 50..." + MOVE 50 TO A + DIVIDE Z INTO A + DISPLAY "9 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 50 TO A + DIVIDE Z INTO A + ON SIZE ERROR DISPLAY "Proper Size Error". + DISPLAY "10 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 50 TO A + DIVIDE Z INTO A + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY "11 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 50 TO A + DIVIDE Z INTO A + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY "12 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "DIVIDE 25 into 50..." + DIVIDE B INTO A + DISPLAY "13 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + MOVE 50 TO A + DISPLAY SPACE + + DIVIDE B INTO A + ON SIZE ERROR DISPLAY "Improper Size Error". + DISPLAY "14 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + MOVE 50 TO A + DISPLAY SPACE + + DIVIDE B INTO A + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY "15 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + MOVE 50 TO A + DISPLAY SPACE + + DIVIDE B INTO A + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY "16 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF + MOVE 50 TO A + DISPLAY SPACE + + DISPLAY "Simple COMPUTE A=B, no ON ERROR clause" + MOVE 5 TO B + DISPLAY "17 COMPUTE A (PIC XX) = " B + COMPUTE A = B + DISPLAY A + IF A NOT EQUAL TO 5 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 45 TO B + DISPLAY "18 COMPUTE A (PIC XX) = " B + COMPUTE A = B + DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 345 TO B + DISPLAY "19 COMPUTE A (PIC XX) = " B + COMPUTE A = B + DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "Simple COMPUTE A=B, with ON ERROR clause" + MOVE 5 TO B + DISPLAY "20 COMPUTE A (PIC XX) = " B + COMPUTE A = B + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY A + IF A NOT EQUAL TO 5 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 45 TO B + DISPLAY "21 COMPUTE A (PIC XX) = " B + COMPUTE A = B + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + MOVE 345 TO B + DISPLAY "22 COMPUTE A (PIC XX) = " B + COMPUTE A = B + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "23 COMPUTE 1 + 2 + 3 * 4 (should be 15, no error)" + COMPUTE C = 1 + 2 + 3 * 4 + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY C + DISPLAY SPACE + + DISPLAY "24 COMPUTE 101 + 2 + 3 * 4 (should be 15, with error)" + COMPUTE C = 101 + 2 + 3 * 4 + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 15 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "25 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 should be 99, with no error clause" + MOVE 50 TO A + MOVE 99 TO C + COMPUTE C = 11 + 2 + A/Z + 3 * 4 + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "26 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 (should be 99, with error)" + MOVE 50 TO A + MOVE 99 TO C + COMPUTE C = 11 + 2 + A/Z + 3 * 4 + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "27 COMPUTE C = 2**3, should be 08" + MOVE 99 TO C + COMPUTE C = 2**3 + DISPLAY C + IF C NOT EQUAL TO 8 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "28 COMPUTE C = 16**0.5, should be 04" + MOVE 99 TO C + COMPUTE C = 16**0.5 + DISPLAY C + IF C NOT EQUAL TO 4 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "29 COMPUTE C = 0**0, should be 01" + MOVE 99 TO C + COMPUTE C = 0**0 + DISPLAY C + IF C NOT EQUAL TO 1 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "30 COMPUTE C = 0**-1, should be 00" + MOVE 99 TO C + COMPUTE C = 0**-1 + DISPLAY C + IF C NOT EQUAL TO 0 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "31 COMPUTE C = -16**0.5, should be 99" + MOVE 99 TO C + COMPUTE C = -16**0.5 + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "32 COMPUTE C = 2**3, should be 08" + MOVE 99 TO C + COMPUTE C = 2**3 + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 08 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "33 COMPUTE C = 16**0.5, should be 04" + MOVE 99 TO C + COMPUTE C = 16**0.5 + ON SIZE ERROR DISPLAY "Improper Size Error" + NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 04 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "34 COMPUTE C = 0**0, should be 99" + MOVE 99 TO C + COMPUTE C = 0**0 + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "35 COMPUTE C = 0**-1, should be 99" + MOVE 99 TO C + COMPUTE C = 0**-1 + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + DISPLAY "36 COMPUTE C = -16**0.5, should be 99" + MOVE 99 TO C + COMPUTE C = -16**0.5 + ON SIZE ERROR DISPLAY "Proper Size Error" + NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". + DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF + DISPLAY SPACE + + STOP RUN. + END PROGRAM caller. diff --git a/gcc/cobol/etests/compute-1/input.txt b/gcc/cobol/etests/compute-1/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..9d1318ea0eb50b6d10df52a6db5e600709ec0fc4 --- /dev/null +++ b/gcc/cobol/etests/compute-1/input.txt @@ -0,0 +1,6 @@ +D001*002*003*004*005*006*007*008*009*010*011*012*013*014*015*016*017*018*019*020 +D021*022*023*024*025*026*027*028*029*030*031*032*033*034*035*036*037*038*039*040 +D041*042*043*044*045*046*047*048*049*050 +ABCDEFGHIJ +KLMNOPQRST + diff --git a/gcc/cobol/etests/compute-1/known-good.txt b/gcc/cobol/etests/compute-1/known-good.txt new file mode 100644 index 0000000000000000000000000000000000000000..3f929635dc30750118e336d775229d4810c67d3c --- /dev/null +++ b/gcc/cobol/etests/compute-1/known-good.txt @@ -0,0 +1,117 @@ +Dividing something by ZERO... +1 C ends up being 42 + +Proper Size Error +2 C ends up being 42 + +3 C ends up being 42 + +Proper Size Error +4 C ends up being 42 + +Dividing 50 by 25... +5 C ends up being 02 + +6 C ends up being 02 + +Proper NOT Size Error +7 C ends up being 02 + +Proper NOT Size Error +8 C ends up being 02 + +DIVIDE ZERO into 50... +9 A ends up being 50 + +Proper Size Error +10 A ends up being 50 + +11 A ends up being 50 + +Proper Size Error +12 A ends up being 50 + +DIVIDE 25 into 50... +13 A ends up being 02 + +14 A ends up being 02 + +Proper NOT Size Error +15 A ends up being 02 + +Proper NOT Size Error +16 A ends up being 02 + +Simple COMPUTE A=B, no ON ERROR clause +17 COMPUTE A (PIC XX) = 005 +05 + +18 COMPUTE A (PIC XX) = 045 +45 + +19 COMPUTE A (PIC XX) = 345 +45 + +Simple COMPUTE A=B, with ON ERROR clause +20 COMPUTE A (PIC XX) = 005 +Proper NOT Size Error +05 + +21 COMPUTE A (PIC XX) = 045 +Proper NOT Size Error +45 + +22 COMPUTE A (PIC XX) = 345 +Proper Size Error +45 + +23 COMPUTE 1 + 2 + 3 * 4 (should be 15, no error) +Proper NOT Size Error +15 + +24 COMPUTE 101 + 2 + 3 * 4 (should be 15, with error) +Proper Size Error +15 + +25 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 should be 99, with no error clause +99 + +26 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 (should be 99, with error) +Proper Size Error +99 + +27 COMPUTE C = 2**3, should be 08 +08 + +28 COMPUTE C = 16**0.5, should be 04 +04 + +29 COMPUTE C = 0**0, should be 01 +01 + +30 COMPUTE C = 0**-1, should be 00 +00 + +31 COMPUTE C = -16**0.5, should be 99 +99 + +32 COMPUTE C = 2**3, should be 08 +Proper NOT Size Error +08 + +33 COMPUTE C = 16**0.5, should be 04 +Proper NOT Size Error +04 + +34 COMPUTE C = 0**0, should be 99 +Proper Size Error +99 + +35 COMPUTE C = 0**-1, should be 99 +Proper Size Error +99 + +36 COMPUTE C = -16**0.5, should be 99 +Proper Size Error +99 + diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index 48e6874c410dacf1de7320f9f0427fcd231a3aca..3a09aa4be53c961fec998a362590efcd47d4fd31 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -4764,7 +4764,7 @@ parser_assign( size_t nC, cbl_num_result_t *C, refer_fill_source(sourceref); // gg_printf("parser_assign: The compute_error_code is %d\n", - // gg_cast(INT, compute_error->structs.compute_error->compute_error_code), NULL_TREE); + // gg_cast(INT, compute_error->structs.compute_error->compute_error_code), NULL_TREE); if( on_error ) { @@ -4811,7 +4811,9 @@ parser_assign( size_t nC, cbl_num_result_t *C, // resulted in a NaN, we *don't* do the move: IF( gg_bitwise_and( compute_error->structs.compute_error->compute_error_code, - build_int_cst_type(INT, compute_error_exp_minus_by_frac)), + build_int_cst_type(INT, + compute_error_exp_minus_by_frac + | compute_error_divide_by_zero)), ne_op, integer_zero_node ) { diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index ecda33508853cebfc48124b01efeeb4ddcf2bd9b..66c6f4f44f513405f21f85407d44a067609f3140 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -4039,7 +4039,7 @@ sentences: sentence { symbol_temporaries_free(); } | sentences sentence { - if( getenv("STATIC") && $2 != PARAGRAPH ) + if( !getenv("STATIC") && $2 != PARAGRAPH ) symbol_temporaries_free(); } ; diff --git a/gcc/cobol/tests/compute-1/caller.cbl b/gcc/cobol/tests/compute-1/caller.cbl index 75a3d6e8541b9052baab9a62fc3872336a5bc5de..a8ceb3d2c8380867261a3d23222f57d5356fd590 100644 --- a/gcc/cobol/tests/compute-1/caller.cbl +++ b/gcc/cobol/tests/compute-1/caller.cbl @@ -3,10 +3,10 @@ DATA DIVISION. WORKING-STORAGE SECTION. - 01 A PIC 99 VALUE 50. + 01 A PIC 99 VALUE 50. 01 B PIC 999 VALUE 25. - 01 C PIC 99 VALUE 42. - 01 Z PIC 99 VALUE ZERO. + 01 C PIC 99 VALUE 42. + 01 Z PIC 99 VALUE ZERO. PROCEDURE DIVISION. @@ -14,61 +14,72 @@ DISPLAY "Dividing something by ZERO..." DIVIDE B BY Z GIVING C DISPLAY "1 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE B BY Z GIVING C ON SIZE ERROR DISPLAY "Proper Size Error". DISPLAY "2 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE B BY Z GIVING C NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY "3 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE B BY Z GIVING C ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY "4 C ends up being " C. + IF C NOT EQUAL TO 42 DISPLAY "That was wrong" END-IF DISPLAY SPACE - DISPLAY "Dividing something 50 by 25..." + DISPLAY "Dividing 50 by 25..." DIVIDE A BY B GIVING C DISPLAY "5 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE A BY B GIVING C ON SIZE ERROR DISPLAY "Improper Size Error". DISPLAY "6 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE A BY B GIVING C NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY "7 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF DISPLAY SPACE DIVIDE A BY B GIVING C ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY "8 C ends up being " C. + IF C NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "DIVIDE ZERO into 50..." MOVE 50 TO A DIVIDE Z INTO A DISPLAY "9 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 50 TO A DIVIDE Z INTO A ON SIZE ERROR DISPLAY "Proper Size Error". DISPLAY "10 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 50 TO A DIVIDE Z INTO A NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY "11 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 50 TO A @@ -76,23 +87,27 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY "12 A ends up being " A. + IF A NOT EQUAL TO 50 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "DIVIDE 25 into 50..." DIVIDE B INTO A DISPLAY "13 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF MOVE 50 TO A DISPLAY SPACE DIVIDE B INTO A ON SIZE ERROR DISPLAY "Improper Size Error". DISPLAY "14 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF MOVE 50 TO A DISPLAY SPACE DIVIDE B INTO A NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY "15 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF MOVE 50 TO A DISPLAY SPACE @@ -100,6 +115,7 @@ ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY "16 A ends up being " A. + IF A NOT EQUAL TO 2 DISPLAY "That was wrong" END-IF MOVE 50 TO A DISPLAY SPACE @@ -108,18 +124,21 @@ DISPLAY "17 COMPUTE A (PIC XX) = " B COMPUTE A = B DISPLAY A + IF A NOT EQUAL TO 5 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 45 TO B DISPLAY "18 COMPUTE A (PIC XX) = " B COMPUTE A = B DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 345 TO B DISPLAY "19 COMPUTE A (PIC XX) = " B COMPUTE A = B DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "Simple COMPUTE A=B, with ON ERROR clause" @@ -129,6 +148,7 @@ ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY A + IF A NOT EQUAL TO 5 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 45 TO B @@ -137,6 +157,7 @@ ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF DISPLAY SPACE MOVE 345 TO B @@ -145,6 +166,7 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY A + IF A NOT EQUAL TO 45 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "23 COMPUTE 1 + 2 + 3 * 4 (should be 15, no error)" @@ -159,6 +181,7 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 15 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "25 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 should be 99, with no error clause" @@ -166,6 +189,7 @@ MOVE 99 TO C COMPUTE C = 11 + 2 + A/Z + 3 * 4 DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "26 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 (should be 99, with error)" @@ -175,36 +199,42 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "27 COMPUTE C = 2**3, should be 08" MOVE 99 TO C COMPUTE C = 2**3 DISPLAY C + IF C NOT EQUAL TO 8 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "28 COMPUTE C = 16**0.5, should be 04" MOVE 99 TO C COMPUTE C = 16**0.5 DISPLAY C + IF C NOT EQUAL TO 4 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "29 COMPUTE C = 0**0, should be 01" MOVE 99 TO C COMPUTE C = 0**0 DISPLAY C + IF C NOT EQUAL TO 1 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "30 COMPUTE C = 0**-1, should be 00" MOVE 99 TO C COMPUTE C = 0**-1 DISPLAY C + IF C NOT EQUAL TO 0 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "31 COMPUTE C = -16**0.5, should be 99" MOVE 99 TO C COMPUTE C = -16**0.5 DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "32 COMPUTE C = 2**3, should be 08" @@ -213,6 +243,7 @@ ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 08 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "33 COMPUTE C = 16**0.5, should be 04" @@ -221,6 +252,7 @@ ON SIZE ERROR DISPLAY "Improper Size Error" NOT ON SIZE ERROR DISPLAY "Proper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 04 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "34 COMPUTE C = 0**0, should be 99" @@ -229,6 +261,7 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "35 COMPUTE C = 0**-1, should be 99" @@ -237,6 +270,7 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE DISPLAY "36 COMPUTE C = -16**0.5, should be 99" @@ -245,6 +279,7 @@ ON SIZE ERROR DISPLAY "Proper Size Error" NOT ON SIZE ERROR DISPLAY "Improper NOT Size Error". DISPLAY C + IF C NOT EQUAL TO 99 DISPLAY "That was wrong" END-IF DISPLAY SPACE STOP RUN. diff --git a/gcc/cobol/tests/compute-1/known-good.txt b/gcc/cobol/tests/compute-1/known-good.txt index 37fa8789eddfd9954f2304439b1d0027c15365c0..3f929635dc30750118e336d775229d4810c67d3c 100644 --- a/gcc/cobol/tests/compute-1/known-good.txt +++ b/gcc/cobol/tests/compute-1/known-good.txt @@ -9,7 +9,7 @@ Proper Size Error Proper Size Error 4 C ends up being 42 -Dividing something 50 by 25... +Dividing 50 by 25... 5 C ends up being 02 6 C ends up being 02 @@ -74,7 +74,7 @@ Proper Size Error 15 25 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 should be 99, with no error clause -25 +99 26 COMPUTE 11 + 2 + 50/ZERO + 3 * 4 (should be 99, with error) Proper Size Error