cobc lists SOURCES as a reserved word that is not implemented, so a report item whose SOURCE clause is written SOURCES ARE does not compile. Report Writer is optional in COBOL 2014 and 2023 and required in COBOL 2002. This asks cobc to accept SOURCES ARE; a patch is attached.
srcs.cob (attached, free format):
IDENTIFICATION DIVISION.
PROGRAM-ID. SRCS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT RPTF ASSIGN TO "srcs.out".
DATA DIVISION.
FILE SECTION.
FD RPTF
REPORT IS R1.
WORKING-STORAGE SECTION.
01 WS-A PIC 99 VALUE 12.
REPORT SECTION.
RD R1 PAGE LIMIT 10.
01 D1 TYPE DETAIL LINE 1.
05 COLUMN 1 PIC 99 SOURCES ARE WS-A.
PROCEDURE DIVISION.
OPEN OUTPUT RPTF
INITIATE R1
GENERATE D1
TERMINATE R1
CLOSE RPTF
DISPLAY "DONE"
STOP RUN.
cobc -x -free -std=cobol2014 -o srcs srcs.cob
3.2.0 and 3.3-dev r5751 both stop with (source excerpts omitted)
srcs.cob:16: error: 'SOURCES' is a reserved word, but isn't supported
and a follow-on syntax error on the same line. The same happens with -std=cobol2002 and without -std; with SOURCE IS WS-A on line 16 the program compiles and writes 12.
The program should compile and write the same srcs.out as the SOURCE IS spelling. The general format of the SOURCE clause (13.18.53.2) is SOURCE IS or SOURCES ARE followed by the operands, and ISO/IEC 1989:2023 13.18.53.3 syntax rule 1 says: "SOURCE and SOURCES are synonyms." SOURCES is a reserved word (8.9). The same in 2002 and in the 2014 FCD.
The standard pairs ARE with the plural explicitly for COLUMN: "The keyword ARE may be specified only if COLUMNS, COLS, or NUMBERS is specified." (13.18.14.3 syntax rule 4). It has no such rule for SOURCE and SOURCES; we treat them the same way, as SOURCE IS and SOURCES ARE, and the patch accepts only those two forms.
cobc/reserved.c gives SOURCES the token -1 (reserved, not supported), and source_clause in cobc/parser.y takes only SOURCE _is. cobc --list-reserved shows SOURCES as not implemented.
The attached report-sources-are.patch (against 3.3-dev r5751) adds the token SOURCES, maps the reserved word to it, and puts the keyword in a source_keyword rule, SOURCE _is | SOURCES _are. In dialects whose word lists do not reserve SOURCES (cobol85, for one), SOURCES stays a user-defined word. With the patch srcs compiles under -std=cobol2014, -std=cobol2002 and the default dialect, and writes the same srcs.out, byte for byte, as unpatched 3.3-dev gives for SOURCE IS; cobc --list-reserved now shows SOURCES as implemented.
It adds the testsuite case "Report SOURCES ARE" to run_reportwriter.at, which runs SOURCES ARE and SOURCES alone beside SOURCE IS and checks that SOURCES IS and SOURCE ARE are still refused, with ChangeLog entries in cobc/ and tests/. make check: 1373 expected, 9 skipped, 0 failed (1372 unpatched); the new test fails without the patch.
The patch does not add a list of operands, SOURCES ARE A B for a repeating entry (13.18.53.3 rule 6), which cobc refuses in either spelling.
feature-requests #409 asks for an arithmetic expression as the SOURCE operand, which the same source_clause rule does not take; this patch leaves that alone.
bugs #1289 is the plural spelling of the FD's REPORT clause, REPORTS ARE, refused under -std=cobol2014 and -std=cobol2002; the two patches apply together.
GnuCOBOL 3.2.0 (Ubuntu gnucobol3 3.2-4build1) and 3.3-dev r5751 (CI snapshot 3.3-dev.138 of 2026-10-29), x86_64 Linux, both run 2026-11-04.