What compiler options does GnuCOBOL 3.2 support?
Options to direct the compiler
GnuCOBOL strives to provide a COBOL compiler that follows the COBOL language standards (ISO-IEC). But those standards have changed over the years and older source code that was compliant at the time may no longer conform. Furthermore, various implementations have introduced extensions and features outside the standard. There are many billions of lines of COBOL source code and relatively little of it conforms to the current standard.
GnuCOBOL provides many options and a “Language Configuration” facility to help compile many of those various “dialects”.
That leads to a large list of compiler options offering great flexibility.
The following documentation is from the GnuCOBOL 3.2.0 man-page.
Command Line Options
-h, --help
display this help and exit
-V, --version
display compiler version information and exit
-dumpversion
display compiler version and exit
-i, --info
display compiler information (build/environment)
and exit
-v, --verbose
verbose mode, display additional information;
multiple -v options increase the verbosity, the
maximum is 3 as follows:
(1) display compiler version and the commands
invoked by the compiler,
(2) pass verbose option to assembler/compiler
(3) pass verbose option to linker
-q, --brief
reduced displays, commands invoked not shown
-### like -v but commands not executed
-x build an executable program
-m build a dynamically loadable module (default)
-j [<args>], --job[=<args>]
run program after build, passing <args>
-std=<dialect>
warnings/features for a specific dialect
<dialect> can be one of:
default, cobol2014, cobol2002, cobol85, xopen,
ibm-strict, ibm, mvs-strict, mvs, mf-strict, mf,
bs2000-strict, bs2000, acu-strict, acu, rm-strict,
rm, gcos-strict, gcos; see configu‐ ration
files in directory config
-F, --free
use free source format (alias for -fformat=free)
--fixed
use fixed source format (default; alias for
-fformat=fixed)
-O, -O2, -O3, -Os
enable optimization
-O0 disable optimization
-g enable C compiler debug and stack check
-d, --debug
enable all run-time error checking, equal
to -fstack-check -fec=EC-ALL
-fec=<exception-name> enable code generation for
<exception-name>, see --list-exceptions for the
possible values, sets -fsource-location
-fno-ec=<exception-name>
disable code generation for <exception-name>
-o <file>
place the output into <file>
-b combine all input files into a single dynamically
loadable module
-E preprocess only; do not compile or link
-C translation only; convert COBOL to C
-S compile only; output assembly file
-c compile and assemble, but do not link
-T <file>
generate and place a wide program listing into
<file>
-t <file>
generate and place a program listing into <file>
--tlines=<lines>
specify lines per page in listing, default = 55
-P[=<dir or file>]
generate preprocessed program listing (.lst)
-X, --Xref
specify cross reference in listing
-I <directory>
add <directory> to copy/include search path
-L <directory>
add <directory> to library search path
-l <lib>
link the library <lib>
-K <entry>
generate CALL to <entry> as static
-D <define>
define <define> for COBOL compilation
-A <options>
add <options> to the C compile phase
-Q <options>
add <options> to the C link phase
--coverage
instrument generated binaries for coverage
--conf=<file>
user-defined dialect configuration; see -std
--list-reserved
display reserved words
--list-intrinsics
display intrinsic functions
--list-mnemonics
display mnemonic names
--list-exceptions
display exception names
--list-system
display system routines
--save-temps[=<dir>]
save intermediate files * default: current
directory
-MT <target>
set/add target file used in dependency list
-MF <file>
place dependency list into <file>
-ext <extension>
add file extension for resolving COPY
Warning Options
-Wall enable most warnings (all except as noted below)
-Wextra
like -Wall but enable some extra warning flags
-w disable all warnings
-Wno-<warning>
disable warning enabled by default, -Wall or
-Wextra
-Wadditional
additional warnings only raised with -Wall
-Wno-unfinished
do not warn if unfinished features are used
* ALWAYS active
-Wno-pending
do not warn if pending features are used
* ALWAYS active
-Wno-repository-checks
do not warn/check for program/function/external
signature mismatch
* ALWAYS active
-Wno-ignored-error
do not warn about errors in code parts which are
unreachable and so normally ignored
* ALWAYS active
-Wobsolete
warn if obsolete features are used
-Warchaic
warn if archaic features are used
-Wredefinition
warn about non-referenced ambiguous data items
-Wtruncate
warn about field truncation from constant
assignments
-Wpossible-truncate
warn about possible field truncation
* NOT set with -Wall
-Woverlap
warn about overlapping MOVE of items
-Wpossible-overlap
warn about MOVE of items that may overlap depending
on variables
* NOT set with -Wall
-Wparentheses
warn if parentheses are omitted around AND within OR
-Wstrict-typing
warn strictly about type mismatch, even when same
size
* NOT set with -Wall
-Wtyping
warn about type mismatch
-Wimplicit-define
warn whenever data items are implicitly defined
* NOT set with -Wall
-Wno-corresponding
do not warn about CORRESPONDING with no matching
items
* ALWAYS active
-Winitial-value
warn if initial VALUE clause is ignored
-Wprototypes
warn about missing FUNCTION prototypes/definitions
-Warithmetic-osvs
warn if arithmetic expression precision has changed
-Wcall-params
warn about non 01/77 items for CALL parameters
* NOT set with -Wall
-Wconstant-expression
warn about expressions that always resolve to
true/false
-Wconstant-numlit-expression
warn about numeric expressions that always resolve
to true/false
-Wlarger-01-redefines
warn about larger redefines allowed by COBOL
standards
-Wcolumn-overflow
warn about text after program-text area, FIXED format
* NOT set with -Wall
-Wterminator
warn about lack of scope terminator END-XXX
* NOT set with -Wall
-Wlinkage
warn about dangling LINKAGE items
* NOT set with -Wall
-Wunreachable
warn about likely unreachable statements
* NOT set with -Wall
-Wno-dialect
do not warn about dialect specific issues
* ALWAYS active
-Wno-goto-section
do not warn about GO TO section-name * ALWAYS active
-Wgoto-different-section
warn about GO TO a praragraph defined in a
different section
-Wsuspicious-perform-thru
warn if PERFORM THRU references procedures not in
ascending order or multiple sections * ALWAYS active
-Wdangling-text
warn about source text after program-area * NOT set
with -Wall
-Wno-missing-newline
do not warn about missing newlines * ALWAYS active
-Wno-others
do not warn about different issues * ALWAYS active
-Wno-unsupported
do not warn if runtime does not support a feature
used
-fdiagnostics-plain-output
make diagnostic output as plain as possible
-Werror
treat all warnings as errors
-Wno-error
don't treat warnings as errors
-Werror=<warning>
treat specified <warning> as error
-Wno-error=<warning>
don't treat specified <warning> as error
Compiler Options
-fsign=[ASCII|EBCDIC] define display sign representation
* default: machine native
-ffold-copy=[UPPER|LOWER]
fold COPY subject to value * default: no
transformation
-ffold-call=[UPPER|LOWER]
fold PROGRAM-ID, CALL, CANCEL subject to value
* default: no transformation
-fmax-errors=<number> maximum number of errors to report
before compilation is aborted * default: 128
-fintrinsics=[ALL|intrinsic function name(,name,...)]
intrinsics to be used without FUNCTION keyword
-fdump=<scope>
dump data fields on abort, <scope> may be a
combination of: ALL, WS, LS, RD, FD, SC, LO
-fcallfh=<name>
specifies <name> to be used for I/O as external
provided EXTFH interface module
-febcdic-table=<cconv-table>/<file>
EBCDIC/ASCII translation table
* e.g. default, ebcdic500_latin1...
-fdefault-colseq=[ASCII|EBCDIC|NATIVE]
define default collating sequence * default: NATIVE
-fstack-extended
store origin of entrypoints and PERFORM
* turned on by --debug/-fdump
-fno-remove-unreachable
disable remove of unreachable code
* turned off by -g
-ftrace
generate trace code
* scope: executed SECTION/PARAGRAPH
-ftraceall
generate trace code * scope: executed
SECTION/PARAGRAPH/STATEMENTS
-fsyntax-only
syntax error checking only; don't emit any output
-fdebugging-line
enable debugging lines * 'D' in indicator
column or floating >>D
-fsource-location
generate source location code
* turned on by --debug/-ftraceall/-fec/-fdump
-fimplicit-init
automatic initialization of the COBOL runtime
system
-fno-recursive-check
disable check of recursive program call;
effectively compiling as RECURSIVE program
-fstack-check
PERFORM stack checking * turned on by --debug/-g
-fmemory-check=<scope>
checks for invalid writes to internal storage,
<scope> may be one of: all, pointer, using, none
* default: none, set to all by --debug
-fsection-exit-check
check that code execution does not leave the scope
of SECTIONs
-fimplicit-goback-check
check that code execution does not end implicit at
end of PROCEDURE DIVISION
-fwrite-after
use AFTER 1 for WRITE of LINE SEQUENTIAL
* default: BEFORE 1
-fmfcomment
'*' in column 1 treated as comment with listing
suppression
* FIXED/COBOL85/VARIABLE format only
-facucomment
'$' in indicator area treated as '*', '|'
treated as floating comment
-fno-trunc
allow numeric field overflow * non-ANSI behaviour
-fsingle-quote
use a single quote (apostrophe) for QUOTE
* default: double quote
-foptional-file
treat all files as OPTIONAL * unless NOT OPTIONAL
specified
-fstatic-call
output static function calls for the CALL
statement
-fno-gen-c-decl-static-call
disable generation of C function declarations
for subroutines with static CALL
-fgen-c-line-directives
generate source location directives in C code;
* turned on by -g/--coverage
-fgen-c-labels
generate extra labels in C sources; * turned on
by -g
-fno-theaders
suppress all headers from listing while keeping
page breaks
-fno-tsource
suppress source from listing
-fno-tmessages
suppress warning and error summary from listing
-ftsymbols
specify symbols in listing
-ftcmd specify command line in listing
-fno-ttimestamp
suppress timestamp in listing headers
-fttitle=<title>
set listing title with '_' replaced by spaces;
defaults to package name and version
-fno-diagnostics-show-option
suppress output of option that directly controls
the diagnostic
-fno-diagnostics-show-caret
do not display source context on warning/error
diagnostic
-fno-diagnostics-show-line-numbers
suppress display of line numbers in diagnostics
Compiler dialect configuration options:
-freserved-words=<value>
use of complete/fixed reserved words
-ftab-width=1..12
number of spaces that are assumed for tabs
-ftext-column=72..255
right margin column number for fixed-form
reference-format
-fpic-length=<number>
maximum number of characters allowed in the
PICTURE character-string
-fword-length=1..63
maximum word-length for COBOL (= programmer
defined) words
-fliteral-length=<number>
maximum literal size in general
-fnumeric-literal-length=1..38
maximum numeric literal size
-fdefaultbyte=<value>
default initialization for fields without VALUE,
may be one of:
* character in quotes
* decimal 0..255 representing a character
* "init" to initialize to PICTURE/USAGE
* "none" to do no explicit initialization
* default: "init"
-fformat=<value>
default reference-format, may be one of: FIXED,
FREE, COBOL85, VARIABLE, XOPEN, XCARD, CRT,
TERMINAL, COBOLX
-fbinary-size=<value>
binary byte size - defines the allocated bytes
according to PIC, may be one of: 2-4-8, 1-2-4-8,
1--8
-fbinary-byteorder=<value>
binary byte order, may be one of: native, big-endian
-fassign-clause=<value>
how to interpret 'ASSIGN word': as 'ASSIGN
EXTERNAL word' or 'ASSIGN DYNAMIC word', may
be one of: dynamic, external, ibm (= external),
mf (= dynamic)
-fscreen-section-rules=<value>
which compiler's rules to apply to SCREEN SECTION item
clauses, may be one of: acu, gc, mf, rm, std, xopen
-fdpc-in-data=<value>
whether DECIMAL-POINT IS COMMA has effect in
XML/JSON GENERATE, may be one of: none, xml, json,
all
-fsubscript-check=<value>
checking for subscript (only done with
EC-BOUND-SUBSCRIPT active), may be one of: full,
max, record
-ffilename-mapping
resolve file names at run time using environment
variables
-fpretty-display
alternate formatting of numeric fields
-fbinary-truncate
numeric truncation according to ANSI
-fcomplex-odo
allow non-standard OCCURS DEPENDING ON syntax
-fodoslide
adjust items following OCCURS DEPENDING (implies
complex-odo)
-finit-justify
applies JUSTIFY with VALUE clause
-findirect-redefines
allow REDEFINES to other than last equal level
number
-frelax-syntax-checks
allow certain syntax variations (e.g. REDEFINES
position)
-fref-mod-zero-length
allow zero length reference-modification (only
changed with EC-BOUND-REF-MOD active)
-frelax-level-hierarchy
allow non-matching level numbers
-fselect-working
require ASSIGN USING items to be in WORKING-STORAGE
-flocal-implies-recursive
LOCAL-STORAGE SECTION implies RECURSIVE attribute
-fsticky-linkage
LINKAGE SECTION items remain allocated between
invocations
-fmove-ibm
MOVE operates as on IBM (left to right, byte by
byte)
-fperform-osvs
exit point of any currently executing perform is
recognized if reached
-farithmetic-osvs
limit precision in intermediate results to
precision of final result (less accurate)
-fconstant-folding
evaluate constant expressions at compile time
-fhostsign
allow hexadecimal value 'F' for NUMERIC test of
signed PACKED DECIMAL field
-fprogram-name-redefinition
program names don't lead to a reserved identifier
-faccept-update
set WITH UPDATE clause as default for ACCEPT
dest-item, instead of WITH NO UPDATE
-faccept-auto
set WITH AUTO clause as default for ACCEPT dest-item,
instead of WITH TAB
-fconsole-is-crt
assume CONSOLE IS CRT if not set otherwise
-fno-echo-means-secure
NO-ECHO hides input with asterisks like SECURE
-fline-col-zero-default
assume a field DISPLAY starts at LINE 0 COL 0 (i.e.
at the cursor), not LINE 1 COL 1
-fdisplay-special-fig-consts
special behaviour of DISPLAY SPACE/ALL X'01'/ALL
X'02'/ALL X'07'
-fbinary-comp-1
COMP-1 is a 16-bit signed integer
-fnumeric-pointer
POINTER is a 64-bit unsigned integer
-fmove-non-numeric-lit-to-numeric-is-zero
imply zero in move of non-numeric literal to numeric
items
-fimplicit-assign-dynamic-var implicitly define a variable
if an ASSIGN DYNAMIC does not match any data item
-fdevice-mnemonics
specifying device by mnemonic
-fxml-parse-xmlss
XML PARSE XMLSS
-fareacheck
check contents of Area A (when reference format
supports Area A enforcement), enabled checks include:
* division, section, paragraph names, level indicators
(FD, SD, RD, and CD), and toplevel numbers (01 and
77) must start in Area A;
* statements must not start in Area A; and
* separator periods must not be within Area A
-fcomment-paragraphs=<support>
comment paragraphs in IDENTIFICATION DIVISION
(AUTHOR, DATE-WRITTEN, ...)
-fcontrol-division=<support>
CONTROL DIVISION
-fpartial-replace-when-literal-src=<support>
apply partial replacing with literal source operand
even when it replaces with spaces only; * "skip"
prevents such replacements
-fmemory-size-clause=<support>
MEMORY-SIZE clause
-fmultiple-file-tape-clause=<support> MULTIPLE-FILE-TAPE
clause
-flabel-records-clause=<support>
LABEL-RECORDS clause
-fvalue-of-clause=<support>
VALUE-OF clause
-fdata-records-clause=<support>
DATA-RECORDS clause
-ftop-level-occurs-clause=<support>
OCCURS clause on top-level
-fsame-as-clause=<support>
SAME AS clause
-ftype-to-clause=<support>
TYPE TO clause
-fusage-type=<support>
USAGE type-name
-fsynchronized-clause=<support>
SYNCHRONIZED clause
-fsync-left-right=<support>
LEFT/RIGHT phrases in SYNCHRONIZED clause
-fspecial-names-clause=<support>
SPECIAL-NAMES clause
-fgoto-statement-without-name=<support>
GO TO statement without name
-fstop-literal-statement=<support>
STOP-literal statement
-fstop-identifier-statement=<support> STOP-identifier
statement
-fstop-error-statement=<support>
STOP ERROR statement
-fdebugging-mode=<support>
DEBUGGING MODE and debugging indicator
-fuse-for-debugging=<support> USE FOR DEBUGGING
-fpadding-character-clause=<support>
PADDING CHARACTER clause
-fnext-sentence-phrase=<support>
NEXT SENTENCE phrase
-flisting-statements=<support>
listing-directive statements EJECT, SKIP1, SKIP2,
SKIP3
-ftitle-statement=<support>
listing-directive statement TITLE
-fentry-statement=<support>
ENTRY statement
-fmove-noninteger-to-alphanumeric=<support>
move noninteger to alphanumeric
-fmove-figurative-constant-to-numeric=<support>
move figurative constants to numeric
-fmove-figurative-space-to-numeric=<support>
move figurative constant SPACE to numeric
-fmove-figurative-quote-to-numeric=<support>
move figurative constant QUOTE to numeric
-fodo-without-to=<support>
OCCURS DEPENDING ON without to
-fsection-segments=<support>
section segments
-falter-statement=<support>
ALTER statement
-fcall-overflow=<support>
OVERFLOW clause for CALL
-fnumeric-boolean=<support>
boolean literals (B'1010')
-fhexadecimal-boolean=<support>
hexadecimal-boolean literals (BX'A')
-fnational-literals=<support> national literals
(N'UTF-16 string')
-fhexadecimal-national-literals=<support>
hexadecimal-national literals (NX'265E')
-fnational-character-literals=<support>
non-standard national literals (NC'UTF-16 string')
-fhp-octal-literals=<support> HP COBOL octal literals
(%377)
-facu-literals=<support>
ACUCOBOL-GT literals (#B #O #H #X)
-febcdic-symbolic-characters
EBCDIC symbolic characters in literals
(" "135,151,151"bar"195, 194"Z" for " foobarBAZ")
-fword-continuation=<support> continuation of COBOL words
-fnot-exception-before-exception=<support>
NOT ON EXCEPTION before ON EXCEPTION
-faccept-display-extensions=<support> extensions to ACCEPT
and DISPLAY
-frenames-uncommon-levels=<support>
RENAMES of 01-, 66- and 77-level items
-flarger-redefines=<support>
allow larger REDEFINES items
-fsymbolic-constant=<support> constants defined in
SPECIAL-NAMES
-fconstant-78=<support>
constant with level 78 item (note: has left to right
precedence in expressions)
-fconstant-01=<support>
constant with level 01 CONSTANT AS/FROM item
-fperform-varying-without-by=<support>
PERFORM VARYING without BY phrase (implies BY 1)
-freference-out-of-declaratives=<support>
references to sections not in DECLARATIVES from within
DECLARATIVES
-fprogram-prototypes=<support>
CALL/CANCEL with program-prototype-name
-fcall-convention-mnemonic=<support>
specifying call-convention by mnemonic
-fcall-convention-linkage=<support>
specifying call-convention by WITH ... LINKAGE
-fusing-optional=<support>
support for PROCEDURE DIVISION USING OPTIONAL
-fnumeric-value-for-edited-item=<support>
numeric literals in VALUE clause of numeric-edited
items
-fincorrect-conf-sec-order=<support>
incorrect order of CONFIGURATION SECTION paragraphs
-fdefine-constant-directive=<support> allow >> DEFINE
CONSTANT var AS literal
-ffree-redefines-position=<support>
REDEFINES clause not following entry-name in definition
-frecords-mismatch-record-clause=<support>
record sizes does not match RECORD clause
-frecord-delimiter=<support>
RECORD DELIMITER clause
-fsequential-delimiters=<support>
BINARY-SEQUENTIAL and LINE-SEQUENTIAL phrases in
RECORD DELIMITER
-frecord-delim-with-fixed-recs=<support>
RECORD DELIMITER clause on file with fixed-length
records
-fmissing-statement=<support> missing statement (e.g.
empty IF / PERFORM)
-fmissing-period=<support>
missing period in PROCEDURE DIVISION (when reference
format supports Area A enforcement)
-fzero-length-literals=<support>
zero-length literals, e.g. '' and ""
-fxml-generate-extra-phrases=<support>
XML GENERATE's phrases other than COUNT IN
-fcontinue-after=<support>
AFTER phrase in CONTINUE statement
-fgoto-entry=<support>
ENTRY FOR GO TO and GO TO ENTRY statements
-fassign-variable=<support>
ASSIGN [TO] variable in SELECT
-fassign-using-variable=<support>
ASSIGN USING/VARYING variable in SELECT
-fassign-ext-dyn=<support>
ASSIGN EXTERNAL/DYNAMIC in SELECT
-fassign-disk-from=<support>
ASSIGN DISK FROM variable in SELECT
-fvsam-status=<support>
VSAM status in FILE STATUS
-fself-call-recursive=<support>
CALL to own PROGRAM-ID implies RECURSIVE attribute
-frecord-contains-depending-clause=<support>
DEPENDING clause in RECORD CONTAINS
-fpicture-l=<support>
PICTURE string with 'L' character
where <support> is one of the following: 'ok',
'warning', 'ar‐ chaic', 'obsolete', 'skip', 'ignore',
'error', 'unconformable'
-fnot-reserved=<word>
word to be taken out of the reserved words list
-freserved=<word>
word to be added to reserved words list
-freserved=<word>:<alias>
word to be added to reserved words list as alias
-fnot-register=<word>
special register to disable
-fregister=<word> or <word>:<definition>, where definition
uses back‐ slash escape special register to enable