A symbol must be defined only once in a source module with one
or more control sections, with the following exceptions:
- The
symbol in the name field of a CSECT, RSECT, DSECT, or COM instruction
can be the same as the name of previous CSECT, RSECT, DSECT, or COM
instruction. It identifies the resumption of the control section specified
by the name field.
- z/VM and z/OS
- The symbol in the name field of a CATTR instruction can be the
same as the name of a previous CATTR instruction. It identifies the
resumption of the class specified by the name field.
- The symbol in the name field of a LOCTR instruction can be the
same as the name of a previous START, CSECT, RSECT, DSECT, COM, or
LOCTR instruction. It identifies the resumption of the location counter
specified by the name field.
- The symbol in the name field of a labeled USING instruction can
be the same as the name of a previous labeled USING instruction.
It identifies the termination of the domain of the previous labeled
USING instruction with the specified name.
- A symbol can be used as an operand of a V-type constant and as
an ordinary label, without duplication, because the operand of a V-type
constant does not define the symbol in the symbol table.
An ordinary symbol is not defined when:
- It is used in the name field of an OPSYN or TITLE instruction.
It can, therefore, be used in the name field of any other statement
in a source module.
- It is used as the operand of a V-type address constant.
- It is only used in the name field of a macro instruction and does
not appear in the name field of a macro-generated assembler statement.
It can, therefore, be used in the name field of any other statement
in a source module.
- It is only used in the name field of an ALIAS instruction and
does not appear in one of the following:
- The name field of a START, CSECT, RSECT, COM, or DXD instruction.
- The name field of a DSECT instruction and the nominal value of
a Q-type address constant.
- The operand of an ENTRY, EXTRN, or WXTRN instruction.