#63 CPP-Version: codegen bug for BASED items in modules

GC++ 2.0
closed
Simon Sobisch
None
6
2014-11-24
2014-02-05
Simon Sobisch
No

Bug in CPP only.

The following works fine if compiled as executable (-x), but not if compiled as module (-m):

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      prog.
       DATA             DIVISION.
       WORKING-STORAGE  SECTION.
       01 MYFLD         BASED.
             03 MYFLDX  PIC X.
             03 MYFLD9  PIC 9.
       PROCEDURE        DIVISION.
           IF ADDRESS OF MYFLD NOT = NULL
              DISPLAY "BASED ITEM WITH ADDRESS ON START"
              END-DISPLAY
           END-IF.
           FREE MYFLD.
           ALLOCATE MYFLD.
           IF ADDRESS OF MYFLD = NULL
              DISPLAY "BASED ITEM WITHOUT ADDRESS AFTER ALLOCATE"
              END-DISPLAY
           END-IF.
           INITIALIZE MYFLD.
           IF MYFLD NOT = " 0"
              DISPLAY "BASED ITEM INITIALIZED WRONG: "
                 WITH NO ADVANCING
              END-DISPLAY
              DISPLAY MYFLD
              END-DISPLAY
           END-IF.

           FREE ADDRESS OF MYFLD.
           IF ADDRESS OF MYFLD NOT = NULL
              DISPLAY "BASED ITEM WITH ADDRESS AFTER FREE"
              END-DISPLAY
           END-IF.

struct _s1_MYFLD (prog.cpp.h) is generated twice, cob_free_alloc is not called correctly on CANCEL.

Fixed with [r192], testcase was added (will be merged into 2.x later on).

Simon

Related

Commit: [r192]

Discussion

  • Simon Sobisch
    Simon Sobisch
    2014-11-24

    • Group: unclassified --> GC++ 2.0