Dear community managers,
I’ve noticed that the PERFORM UNTIL EXIT seems to be unknown to SonarScanner and cannot be parsed. While all other variations of PERFORM loops work, the relatively new EXIT keyword does not. This keyword/feature is part of the IBM Enterprise COBOL 6.4 release and was backported to 6.3 with APAR PH47372, the language reference an be found here.
A minimal working example would be as follows:
IDENTIFICATION DIVISION.
PROGRAM-ID. RI111.
AUTHOR. TEST.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
PROCEDURE DIVISION.
*-------------------------------------------------------------*
RI111-MAIN SECTION.
PERFORM UNTIL EXIT
EXIT PERFORM CYCLE
END-PERFORM
CONTINUE.
RI111-EXIT.
EXIT.
*-------------------------------------------------------------*
EXIT PROGRAM.
Analyzing this sample program with SonarScanner CLI 7.0.2.4839 results in the following parsing error:
18:33:47.431 ERROR Unable to parse COBOL source file : <path-to-file>
Original contents starting from line 1 till line 18:
IDENTIFICATION DIVISION.
PROGRAM-ID. RI111.
AUTHOR. TEST.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
PROCEDURE DIVISION.
*-------------------------------------------------------------*
RI111-MAIN SECTION.
PERFORM UNTIL EXIT
EXIT PERFORM CYCLE
END-PERFORM
CONTINUE.
RI111-EXIT.
EXIT.
*-------------------------------------------------------------*
EXIT PROGRAM.
Preprocessed contents:
Parse error at line 11:
1: IDENTIFICATION DIVISION .
2: PROGRAM-ID . RI111 .
3: AUTHOR
4: ENVIRONMENT DIVISION .
5: DATA DIVISION .
6: WORKING-STORAGE SECTION .
7: LINKAGE SECTION .
8: PROCEDURE DIVISION .
10: RI111-MAIN SECTION .
11: PERFORM UNTIL EXIT
^
12: EXIT PERFORM CYCLE
13: END-PERFORM
14: CONTINUE .
15: RI111-EXIT .
16: EXIT .
18: EXIT PROGRAM .
19: EOF