diff --git a/gcc/cobol/UAT/testsuite.src/run_misc.at b/gcc/cobol/UAT/testsuite.src/run_misc.at index 7bb5fbed558106774bbceef211ef6f74eaf04eb3..0434296447ea3c725c9952fff148e923b016f831 100644 --- a/gcc/cobol/UAT/testsuite.src/run_misc.at +++ b/gcc/cobol/UAT/testsuite.src/run_misc.at @@ -2573,7 +2573,7 @@ AT_DATA([prog.cob], [ DATA DIVISION. WORKING-STORAGE SECTION. 01 TSRDF. - 05 WS-ASK-ID-DATE PIC X(10) VALUE ALL '*'. + 05 WS-ASK-ID-DATE PIC X(10). 05 WS-ASK-ID-DATE-R REDEFINES WS-ASK-ID-DATE. 10 WS-ASK-ID-DATE-YYYY PIC 9(4) VALUE 2017. 10 FILLER PIC X VALUE '-'. @@ -2581,6 +2581,7 @@ AT_DATA([prog.cob], [ 10 FILLER PIC X VALUE '-'. 10 WS-ASK-ID-DATE-DD PIC 9(2). PROCEDURE DIVISION. + MOVE ALL '*' TO WS-ASK-ID-DATE MOVE 2015 TO WS-ASK-ID-DATE-YYYY MOVE 08 TO WS-ASK-ID-DATE-MM MOVE 21 TO WS-ASK-ID-DATE-DD diff --git a/gcc/cobol/tests/initialize_2/Makefile b/gcc/cobol/tests/initialize_2/Makefile deleted file mode 100644 index f77e46b3451abf45cb70ed9dc161be56b3b063c7..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_2/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../Makefile.inc diff --git a/gcc/cobol/tests/initialize_2/UseGlobal.cbl.example b/gcc/cobol/tests/initialize_2/UseGlobal.cbl.example deleted file mode 100644 index 268777a8ee92bd60bc29b75af0f449b4c66cd8ba..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_2/UseGlobal.cbl.example +++ /dev/null @@ -1,49 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. IC233A. - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. - GNU-Linux. - OBJECT-COMPUTER. - GNU-Linux. - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT PRINT-FILE ASSIGN TO - REPORTT. - SELECT OPTIONAL TEST-FILE ASSIGN TO - "XXXXX018". - DATA DIVISION. - FILE SECTION. - FD PRINT-FILE. - 01 PRINT-REC PICTURE X(120). - 01 DUMMY-RECORD PICTURE X(120). - FD TEST-FILE GLOBAL. - 01 TEST-REC PIC X(20). - PROCEDURE DIVISION. - DECLARATIVES. - SECT-IC233A-001 SECTION. - USE GLOBAL AFTER ERROR PROCEDURE ON INPUT. - USE-TEST-2. - DISPLAY "At USE-TEST-2". - END DECLARATIVES. - CALL "IC233A-1". - - IDENTIFICATION DIVISION. - PROGRAM-ID. IC233A-1. - PROCEDURE DIVISION. - *> DECLARATIVES. - *> SECT-IC233A-001 SECTION. - *> USE AFTER ERROR PROCEDURE ON INPUT. - *> USE-INPUT-ERROR. - *> DISPLAY "At USE-INPUT-ERROR". - *> END DECLARATIVES. - SECT-IC233A-1-001 SECTION. - USE-INIT-1. - OPEN INPUT TEST-FILE. - DISPLAY "After open " - READ TEST-FILE. - DISPLAY "After read ". - END-PROG. - EXIT PROGRAM. - END PROGRAM IC233A-1. - END PROGRAM IC233A. diff --git a/gcc/cobol/tests/initialize_2/input.txt b/gcc/cobol/tests/initialize_2/input.txt deleted file mode 100644 index 6e4186aca58aa94ddf74133dabe2a63b25e333bd..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_2/input.txt +++ /dev/null @@ -1,16 +0,0 @@ -Iowa -100000 -Georgia -FL -DE -Missouri -Indiana -1500000 -nh -10000000 -New Hampshirex -Phoenixx -Albanyx -Salemx -MX -North Dakotax diff --git a/gcc/cobol/tests/initialize_2/known-good.txt b/gcc/cobol/tests/initialize_2/known-good.txt deleted file mode 100644 index b0c880a366202483d4a586b98fb9cf1cc2609a00..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_2/known-good.txt +++ /dev/null @@ -1,10 +0,0 @@ -The date is 2015*08*21 Compiled -The date is 0000*08*21 INITIALIZE -The date is 0000 08 21 WITH FILLER -The date is 2017 08 21 WITH FILLER -The date is 2017-08-21 ALL TO VALUE -"123456" -" " -"123456" -"XXXXXX" -"123X56" diff --git a/gcc/cobol/tests/initialize_2/playpen.cbl b/gcc/cobol/tests/initialize_2/playpen.cbl deleted file mode 100644 index 82b1ba25e4a5353c340af6823d6b8c493dbc5369..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_2/playpen.cbl +++ /dev/null @@ -1,56 +0,0 @@ - - IDENTIFICATION DIVISION. - PROGRAM-ID. prog. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 TSRDF. - 05 WS-ASK-ID-DATE PIC X(10) VALUE ALL '*'. - 05 WS-ASK-ID-DATE-R REDEFINES WS-ASK-ID-DATE. - 10 WS-ASK-ID-DATE-YYYY PIC 9(4) VALUE 2017. - 10 FILLER PIC X VALUE '-'. - 10 WS-ASK-ID-DATE-MM PIC 9(2). - 10 FILLER PIC X VALUE '-'. - 10 WS-ASK-ID-DATE-DD PIC 9(2). - - 01 TABL VALUE "123456". - 02 T PIC X OCCURS 6 VALUE 'X'. - - - PROCEDURE DIVISION. - MOVE 2015 TO WS-ASK-ID-DATE-YYYY - MOVE 08 TO WS-ASK-ID-DATE-MM - MOVE 21 TO WS-ASK-ID-DATE-DD - DISPLAY "The date is " WS-ASK-ID-DATE " Compiled". - - INITIALIZE WS-ASK-ID-DATE-R. - MOVE 08 TO WS-ASK-ID-DATE-MM - MOVE 21 TO WS-ASK-ID-DATE-DD - DISPLAY "The date is " WS-ASK-ID-DATE " INITIALIZE". - - INITIALIZE WS-ASK-ID-DATE-R WITH FILLER. - MOVE 08 TO WS-ASK-ID-DATE-MM - MOVE 21 TO WS-ASK-ID-DATE-DD - DISPLAY "The date is " WS-ASK-ID-DATE " WITH FILLER". - - INITIALIZE WS-ASK-ID-DATE-R ALL TO VALUE - MOVE 08 TO WS-ASK-ID-DATE-MM - MOVE 21 TO WS-ASK-ID-DATE-DD - DISPLAY "The date is " WS-ASK-ID-DATE " WITH FILLER". - - INITIALIZE WS-ASK-ID-DATE-R WITH FILLER ALL TO VALUE. - MOVE 08 TO WS-ASK-ID-DATE-MM - MOVE 21 TO WS-ASK-ID-DATE-DD - DISPLAY "The date is " WS-ASK-ID-DATE " ALL TO VALUE". - - DISPLAY """" TABL """" - INITIALIZE TABL - DISPLAY """" TABL """" - INITIALIZE TABL ALL VALUE - DISPLAY """" TABL """" - INITIALIZE T ALL VALUE - DISPLAY """" TABL """" - INITIALIZE TABL ALL VALUE - INITIALIZE T(4) ALL VALUE. - DISPLAY """" TABL """" - - STOP RUN. diff --git a/gcc/cobol/tests/initialize_3/Makefile b/gcc/cobol/tests/initialize_3/Makefile deleted file mode 100644 index f77e46b3451abf45cb70ed9dc161be56b3b063c7..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_3/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../Makefile.inc diff --git a/gcc/cobol/tests/initialize_3/UseGlobal.cbl.example b/gcc/cobol/tests/initialize_3/UseGlobal.cbl.example deleted file mode 100644 index 268777a8ee92bd60bc29b75af0f449b4c66cd8ba..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_3/UseGlobal.cbl.example +++ /dev/null @@ -1,49 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. IC233A. - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. - GNU-Linux. - OBJECT-COMPUTER. - GNU-Linux. - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT PRINT-FILE ASSIGN TO - REPORTT. - SELECT OPTIONAL TEST-FILE ASSIGN TO - "XXXXX018". - DATA DIVISION. - FILE SECTION. - FD PRINT-FILE. - 01 PRINT-REC PICTURE X(120). - 01 DUMMY-RECORD PICTURE X(120). - FD TEST-FILE GLOBAL. - 01 TEST-REC PIC X(20). - PROCEDURE DIVISION. - DECLARATIVES. - SECT-IC233A-001 SECTION. - USE GLOBAL AFTER ERROR PROCEDURE ON INPUT. - USE-TEST-2. - DISPLAY "At USE-TEST-2". - END DECLARATIVES. - CALL "IC233A-1". - - IDENTIFICATION DIVISION. - PROGRAM-ID. IC233A-1. - PROCEDURE DIVISION. - *> DECLARATIVES. - *> SECT-IC233A-001 SECTION. - *> USE AFTER ERROR PROCEDURE ON INPUT. - *> USE-INPUT-ERROR. - *> DISPLAY "At USE-INPUT-ERROR". - *> END DECLARATIVES. - SECT-IC233A-1-001 SECTION. - USE-INIT-1. - OPEN INPUT TEST-FILE. - DISPLAY "After open " - READ TEST-FILE. - DISPLAY "After read ". - END-PROG. - EXIT PROGRAM. - END PROGRAM IC233A-1. - END PROGRAM IC233A. diff --git a/gcc/cobol/tests/initialize_3/input.txt b/gcc/cobol/tests/initialize_3/input.txt deleted file mode 100644 index 6e4186aca58aa94ddf74133dabe2a63b25e333bd..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_3/input.txt +++ /dev/null @@ -1,16 +0,0 @@ -Iowa -100000 -Georgia -FL -DE -Missouri -Indiana -1500000 -nh -10000000 -New Hampshirex -Phoenixx -Albanyx -Salemx -MX -North Dakotax diff --git a/gcc/cobol/tests/initialize_3/known-good.txt b/gcc/cobol/tests/initialize_3/known-good.txt deleted file mode 100644 index 666f0ea4d12c7ca94f2470d39cb8d20f2537f7e6..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_3/known-good.txt +++ /dev/null @@ -1,18 +0,0 @@ -VAR1 is "aaaaaaaabbbbbbbbcccccccc" -should be "aaaaaaaabbbbbbbbcccccccc" - -VAR1 is " " -should be " " - -VAR1 is "aaaaaaaabbbbbbbbcccccccc" -should be "aaaaaaaabbbbbbbbcccccccc" - -VAR1 is " " -should be " " - -VAR1 is "111111112222222233333333" -should be "111111112222222233333333" - -VAR1 is "1111111122222222xxxxyyyy" -should be "1111111122222222xxxxyyyy" - diff --git a/gcc/cobol/tests/initialize_3/playpen.cbl b/gcc/cobol/tests/initialize_3/playpen.cbl deleted file mode 100644 index 93344e58a46c6e2b4761ef75585ae681572dbd3d..0000000000000000000000000000000000000000 --- a/gcc/cobol/tests/initialize_3/playpen.cbl +++ /dev/null @@ -1,43 +0,0 @@ - - IDENTIFICATION DIVISION. - PROGRAM-ID. prog. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 VAR1 VALUE "aaaaaaaabbbbbbbbcccccccc". - 05 VAR1A PIC X(8) VALUE "11111111". - 05 VAR1B PIC X(8) VALUE "22222222". - 05 VAR2 VALUE "33333333". - 10 VAR2A PIC X(4) VALUE "xxxx". - 10 VAR2B PIC X(4) VALUE "yyyy". - - PROCEDURE DIVISION. - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" "aaaaaaaabbbbbbbbcccccccc" """" - DISPLAY "" - - INITIALIZE VAR1 - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" " " """" - DISPLAY "" - - INITIALIZE VAR1 ALL VALUE - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" "aaaaaaaabbbbbbbbcccccccc" """" - DISPLAY "" - - INITIALIZE VAR1A VAR1B VAR2 - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" " " """" - DISPLAY "" - - INITIALIZE VAR1A VAR1B VAR2 ALL TO VALUE - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" "111111112222222233333333" """" - DISPLAY "" - - INITIALIZE VAR2A VAR2B ALL TO VALUE - DISPLAY "VAR1 is " """" VAR1 """" - DISPLAY "should be " """" "1111111122222222xxxxyyyy" """" - DISPLAY "" - - STOP RUN. diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc index c4d7d523acc36873965feef7d5343f31a699f56c..9a356356aabb1f12c2ec4a2ddbc514455682839d 100644 --- a/libgcobol/libgcobol.cc +++ b/libgcobol/libgcobol.cc @@ -61,6 +61,10 @@ #include "ec.h" #include "../gcc/cobol/except.h" +// This couldn't be defined in symbols.h because it conflicts with a LEVEL66 +// in parse.h +#define LEVEL66 (66) +#define LEVEL88 (88) // These global variables are returned when the functions // EXCEPTION-FILE @@ -2563,7 +2567,7 @@ format_for_display_internal(char **dest, case FldClass: { - if( var->level != 88 ) + if( var->level != LEVEL88 ) { size_t retsize = MINIMUM_ALLOCATION_SIZE; memset(*dest, 0, retsize); @@ -4020,14 +4024,15 @@ init_var_both(cblc_field_t *var, char *local_initial = as_initial(var->initial); -// if( var->type != FldClass && var->level != 88 ) +// if( var->type != FldClass && var->level != LEVEL88 ) // { // // Do nothing to these types here // } // else - if( var->type == FldClass || var->level != 88 ) + if( var->type == FldClass || var->level != LEVEL88 ) + if( var->type == FldClass ) { - if( var->level == 88 ) + if( var->level == LEVEL88 ) { // We need to convert the options to the internal native codeset @@ -4090,8 +4095,6 @@ init_var_both(cblc_field_t *var, } } - bool a_parent_initialized = false; - // Next order of business: When the variable was allocated in // parser_symbol_add(), only LEVEL 01 variables had memory allocated. All // child variables were given NULL data pointers. It is at this point that @@ -4116,6 +4119,17 @@ init_var_both(cblc_field_t *var, return; } + if( !(var->attr & based_e) && (var->attr & external_e) ) + { + // These types can't be initialized + return; + } + + // There are times, for example, when we are table with OCCURS, that we + // look like a variable with no initial, and we might be tempted to set our + // memory to the default. But if a parent has been initialized, we must not + // touch our memory: + bool a_parent_initialized = false; if( var->data && !explicitly ) { while(parent) @@ -4133,13 +4147,7 @@ init_var_both(cblc_field_t *var, } } - if( !(var->attr & based_e) && (var->attr & external_e) ) - { - // These types can't be initialized - return; - } - - if( is_redefined || a_parent_initialized ) + if( is_redefined || a_parent_initialized || var->level == LEVEL66 || var->level == LEVEL88) { // Don't initialize variables that have the REDEFINES clause. Many things // in COBOL programs don't work if you do, in particular the initialization