Following program compiles without errors.
>>SOURCE FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTCONST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A CONSTANT AS 2.
01 B CONSTANT ( (3 + 4 / 2) * A). *> value = 10
01 CON CONSTANT (A ** B). *> value = 1024
01 MYDATA PIC X(CON).
01 C CONSTANT IS GLOBAL AS 2.
01 D CONSTANT ( (3 + 4 / 2) * C). *> value = 10
01 CON2 CONSTANT (C ** D). *> value = 1024
01 MYDATA2 PIC X(CON2).
PROCEDURE DIVISION.
DISPLAY A ' ' B ' ' CON
move all "1234567890" to MYDATA
move ">" to MYDATA(1:1)
move "<" to MYDATA(CON:1)
DISPLAY MYDATA
DISPLAY ' '
DISPLAY C ' ' D ' ' CON2
move all "1234567890" to MYDATA2
move ">" to MYDATA2(1:1)
move "<" to MYDATA2(CON:1)
DISPLAY MYDATA2
ACCEPT omitted
GOBACK.
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTESTCONST.
PROCEDURE DIVISION.
*> DISPLAY A
DISPLAY C
ACCEPT omitted
GOBACK.
END PROGRAM SUBTESTCONST.
END PROGRAM TESTCONST.
If I add the "IS GLOBAL" clause to variable "A"—making it similar to variable "C"—I get a compilation error instead.
>>SOURCE FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTCONST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A CONSTANT IS GLOBAL AS 2.
01 B CONSTANT ( (3 + 4 / 2) * A). *> value = 10
01 CON CONSTANT (A ** B). *> value = 1024
01 MYDATA PIC X(CON).
01 C CONSTANT IS GLOBAL AS 2.
01 D CONSTANT ( (3 + 4 / 2) * C). *> value = 10
01 CON2 CONSTANT (C ** D). *> value = 1024
01 MYDATA2 PIC X(CON2).
PROCEDURE DIVISION.
DISPLAY A ' ' B ' ' CON
move all "1234567890" to MYDATA
move ">" to MYDATA(1:1)
move "<" to MYDATA(CON:1)
DISPLAY MYDATA
DISPLAY ' '
DISPLAY C ' ' D ' ' CON2
move all "1234567890" to MYDATA2
move ">" to MYDATA2(1:1)
move "<" to MYDATA2(CON:1)
DISPLAY MYDATA2
ACCEPT omitted
GOBACK.
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTESTCONST.
PROCEDURE DIVISION.
DISPLAY A
DISPLAY C
ACCEPT omitted
GOBACK.
END PROGRAM SUBTESTCONST.
END PROGRAM TESTCONST.
Compiklation error message: (GnuCOBOL.3.3)
C:\GC-AWORK>cobc testconst.cob -x
testconst.cob:8: error: syntax error, unexpected Identifier
6 | 01 A CONSTANT IS GLOBAL AS 2.
7 | 01 B CONSTANT ( (3 + 4 / 2) * A). *> value = 10
8 > 01 CON CONSTANT (A ** B). *> value = 1024
9 | 01 MYDATA PIC X(CON).
10 |