diff --git a/gcc/cobol/UAT/failsuite.src/run_evaluate.at b/gcc/cobol/UAT/failsuite.src/run_evaluate.at
index 90d5af41347c1e4154f92b630ed78094b286c521..f5d35b3bfd5bb742f1ed0c7d168bebd2755a4f98 100644
--- a/gcc/cobol/UAT/failsuite.src/run_evaluate.at
+++ b/gcc/cobol/UAT/failsuite.src/run_evaluate.at
@@ -8,50 +8,3 @@ AT_COLOR_TESTS
 
 AT_TESTED('$GCOBOL') 
 
-AT_SETUP([EVALUATE condition (2)])
-AT_KEYWORDS([evaluate condition])
-AT_DATA([prog.cob], [
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-           01  XVAL PIC X VALUE '_'.
-               88  UNDERSCORE  VALUE '_'.
-        PROCEDURE        DIVISION.
-           DISPLAY 'Next line should be "UNDERSCORE evaluates to TRUE"'
-           EVALUATE TRUE
-              WHEN NOT UNDERSCORE
-                 DISPLAY 
-                     "***IMPROPERLY*** NOT UNDERSCORE evaluates to TRUE"
-                 END-DISPLAY
-           END-EVALUATE.
-           EVALUATE TRUE
-              WHEN UNDERSCORE
-                 DISPLAY "UNDERSCORE evaluates to TRUE"
-                 END-DISPLAY
-           END-EVALUATE.
-
-           DISPLAY 
-               'Next line should be "NOT UNDERSCORE evaluates to FALSE"'
-           EVALUATE FALSE
-              WHEN NOT UNDERSCORE
-                 DISPLAY "NOT UNDERSCORE evaluates to FALSE"
-                 END-DISPLAY
-           END-EVALUATE.
-           EVALUATE FALSE
-              WHEN UNDERSCORE
-                 DISPLAY 
-                        "***IMPROPERLY*** UNDERSCORE evaluates to FALSE"
-                 END-DISPLAY
-           END-EVALUATE.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([./a.out], [0], [Next line should be "UNDERSCORE evaluates to TRUE"
-UNDERSCORE evaluates to TRUE
-Next line should be "NOT UNDERSCORE evaluates to FALSE"
-NOT UNDERSCORE evaluates to FALSE
-], [])
-AT_CLEANUP
-
-
diff --git a/gcc/cobol/UAT/failsuite.src/run_functions.at b/gcc/cobol/UAT/failsuite.src/run_functions.at
index 68fc377f768ba3ca01729276b3cf95995e36dce8..9760fd5b601eb9c5234540c86b6ecb47ccca04c9 100644
--- a/gcc/cobol/UAT/failsuite.src/run_functions.at
+++ b/gcc/cobol/UAT/failsuite.src/run_functions.at
@@ -672,50 +672,6 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
 
 AT_CLEANUP
 
-
-AT_SETUP([UDF in COMPUTE])
-AT_KEYWORDS([functions])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       FUNCTION-ID. func.
-
-       DATA DIVISION.
-       LINKAGE SECTION.
-       01  num PIC 999.
-       
-       PROCEDURE DIVISION RETURNING num.
-           MOVE 100 TO num
-           .
-       END FUNCTION func.
-
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. prog.
-
-       ENVIRONMENT DIVISION.
-       CONFIGURATION SECTION.
-       REPOSITORY.
-           FUNCTION func.
-           
-       DATA DIVISION.
-       WORKING-STORAGE SECTION.
-       01  x PIC 999.
-       
-       PROCEDURE DIVISION.
-           COMPUTE x = 101 + FUNCTION func
-           DISPLAY x
-           .
-       END PROGRAM prog.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[201
-])
-
-AT_CLEANUP
-
-
 AT_SETUP([UDF replacing intrinsic function])
 AT_KEYWORDS([functions SUBSTITUTE])
 AT_DATA([prog.cob], [
@@ -756,65 +712,6 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
 AT_CLEANUP
 
 
-AT_SETUP([UDF with recursion])
-AT_KEYWORDS([functions LOCAL-STORAGE])
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       FUNCTION-ID. foo.
-
-       DATA DIVISION.
-       WORKING-STORAGE SECTION.
-       01  ttl  PIC 9 VALUE 1.
-
-       LOCAL-STORAGE SECTION.
-       01  num  PIC 9.
-
-       LINKAGE SECTION.
-       01  arg PIC 9.
-       01  ret PIC 9.
-
-       PROCEDURE DIVISION USING arg RETURNING ret.
-           IF arg < 5
-              ADD 1 TO arg GIVING num END-ADD
-              MOVE FUNCTION foo (num) TO ret
-           ELSE
-              MOVE arg TO ret
-           END-IF
-           DISPLAY "Step: " ttl ", Arg: " arg ", Return: " ret
-           END-DISPLAY
-           ADD 1 to ttl END-ADD
-           GOBACK.
-       END FUNCTION foo.
-
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. prog.
-
-       ENVIRONMENT DIVISION.
-       CONFIGURATION SECTION.
-       REPOSITORY.
-           FUNCTION foo.
-
-       DATA DIVISION.
-       WORKING-STORAGE SECTION.
-       01 num PIC 9 VALUE 1.
-
-       PROCEDURE DIVISION.
-           DISPLAY "Return value '" FUNCTION foo (num) "'"
-             WITH NO ADVANCING
-           END-DISPLAY
-           GOBACK.
-       END PROGRAM prog.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
-[Step: 1, Arg: 5, Return: 5
-Step: 2, Arg: 4, Return: 5
-Step: 3, Arg: 3, Return: 5
-Step: 4, Arg: 2, Return: 5
-Step: 5, Arg: 1, Return: 5
-Return value '5'], [])
-AT_CLEANUP
-
 AT_SETUP([v2-bugs functions repository])
 AT_KEYWORDS([v1-bugs functions repository])
 # REPOSITORY FUNCTION clause
diff --git a/gcc/cobol/UAT/failsuite.src/run_subscripts.at b/gcc/cobol/UAT/failsuite.src/run_subscripts.at
index e0658c774b7d0f95753eae110f7497f1afd4f3d7..d217feb8dc095e2ca058536d7b5bb51423b741aa 100644
--- a/gcc/cobol/UAT/failsuite.src/run_subscripts.at
+++ b/gcc/cobol/UAT/failsuite.src/run_subscripts.at
@@ -23,39 +23,3 @@
 ## 8.4.1.2.3 General rules
 
 
-AT_SETUP([383 SSRANGE and NOSSRANGE directives])
-AT_SKIP_IF([test "$COB_DIALECT" != "gnu"])
-AT_KEYWORDS([runsubscripts subscripts extensions directive])
-
-# WARNING: this testcase is "broken" as those SSRANGE may only be
-#          defined before IDENTIFICATION DIVISION (iniatial $SET)
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. prog.
-
-       DATA DIVISION.
-       WORKING-STORAGE SECTION.
-       01  x.
-           03  y       PIC X OCCURS 5 TIMES VALUE SPACE.
-           03  z       PIC X VALUE "!".
-       01  idx         PIC 99 VALUE 6.
-           
-       PROCEDURE DIVISION.
-      $SET NOSSRANGE
-           DISPLAY y (idx)
-      *> Note: MF says "sets BOUND"
-      $SET SSRANGE
-           DISPLAY y (idx)
-           .
-])
-
-AT_CHECK([$COMPILE -DTEST-SUBSCRIPT prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [1],
-[!
-], [libcob: prog.cob:17: error: subscript of 'y' out of bounds: 6
-note: maximum subscript for 'y': 5
-])
-
-AT_CLEANUP
- 
\ No newline at end of file
diff --git a/gcc/cobol/UAT/failsuite.src/syn_copy.at b/gcc/cobol/UAT/failsuite.src/syn_copy.at
index 24518b765f6ed9919c7e892a395b1ee2b2ae3dec..abfdd8fa3d590bc6dff65f9ef2ee2fb177b9d6af 100644
--- a/gcc/cobol/UAT/failsuite.src/syn_copy.at
+++ b/gcc/cobol/UAT/failsuite.src/syn_copy.at
@@ -21,48 +21,3 @@
 ### COBOL for GCC Test Suite - testsuite adapted by Marty Heyman
 ## Copyright (C) 2022-23 COBOLworx, a subsidiary of Symas Corp.
 
-AT_SETUP([392 COPY: IN / OF / -I: 3])
-AT_KEYWORDS([copy cobc])
-AT_SKIP_IF([test "$COB_DIALECT" != "gnu"])
-# TODO: Should default to auto-folding when IN "sub2" (literal) is
-#       used and therefore don't work on case-sensitive file-systems
-#
-# jkl:  This test is invalid.  "The implementor shall define the
-#       rules for locating the library text referenced by text-name-1
-#       or literal-1. When neither library-name-1 nor literal-2 is
-#       specified, a default COBOL library is used. The implementor
-#       defines the mechanism for identifying the default COBOL
-#       library."
-#
-# This implementation consults the environment.  If an environment
-# variable is defined for the library or copybook name, the value of
-# that variable is used.  If not, the name from the Cobol text is
-# used.  If a literal is supplied instead of a user-defined Cobol
-# word, no change is made to the name; it either exists, literally, or
-# it does not.  If a user-defined Cobol word is supplied, the name is
-# tried with various suffixes (and without) using glob(3) to match.
-#
-# In no event is either name transformed to upper case.  Perhaps that
-# should be a future option, but I suggest waiting for real-world
-# examples and a willing customer.
-#
-AT_DATA([prog3.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       COPY "copy.inc" IN sub2.
-       PROCEDURE        DIVISION.
-           DISPLAY TEST-VAR.
-           STOP RUN.
-])
-AT_CHECK([mkdir -p SUB/UNDER], [0], [], [])
-AT_DATA([SUB/UNDER/copy.inc], [
-       77  TEST-VAR     PIC X VALUE '3'.
-])
-AT_DATA([copy.inc], [
-       77  TEST-VAR     PIC X VALUE '4'.
-])
-AT_CHECK([$COMPILE_ONLY prog3.cob], [0], [], [])
-AT_CLEANUP
-
diff --git a/gcc/cobol/UAT/failsuite.src/syn_definition.at b/gcc/cobol/UAT/failsuite.src/syn_definition.at
index 3a8100269485fd038340db3103adaf8c23fbdea0..dc5188d7c9e2f934fcd5c5473778cf8482bfd0bb 100644
--- a/gcc/cobol/UAT/failsuite.src/syn_definition.at
+++ b/gcc/cobol/UAT/failsuite.src/syn_definition.at
@@ -223,28 +223,3 @@ AT_CHECK([$COMPILE_ONLY prog.cob], [0], [],
 ])
 AT_CLEANUP
 
-AT_SETUP([ALPHABET definition])
-AT_KEYWORDS([definition])
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID. prog.
-       ENVIRONMENT DIVISION.
-       CONFIGURATION SECTION.
-       SPECIAL-NAMES.
-           ALPHABET TESTME IS
-                    'A' THROUGH 'Z', x'00' thru x'05';
-                    x'41' ALSO x'42', ALSO x'00', x'C1' ALSO x'C2'.
-           ALPHABET FINE
-                    'A' also 'B' also 'C' also 'd' also 'e' ALSO 'f',
-                    'g' also 'G', '1' thru '9', x'00'.
-])
-
-AT_CHECK([$COMPILE_ONLY prog.cob], [1], [],
-[prog.cob:9: error: ALPHABET , character 'A' (x'41') in position 32 already defined at position 0 at 'ALSO'
-prog.cob:10: 1 errors in DATA DIVISION, compilation ceases at 'ALPHABET'
-cobol1: error: failed compiling prog.cob
-])
-AT_CLEANUP
-
-
diff --git a/gcc/cobol/UAT/failsuite.src/syn_misc.at b/gcc/cobol/UAT/failsuite.src/syn_misc.at
index 1cb7ccf94ea82a2eefc95449a1294fab25bdf1ed..9c4e1cd40b66be8af979fa6e2c7593ba5146f12c 100644
--- a/gcc/cobol/UAT/failsuite.src/syn_misc.at
+++ b/gcc/cobol/UAT/failsuite.src/syn_misc.at
@@ -98,3 +98,22 @@ AT_CHECK([$COMPILE prog.cob], [0], [], [])
 AT_CHECK([./a.out], [0], [], [])
 AT_CLEANUP
 
+AT_SETUP([X literals])
+AT_KEYWORDS([misc])
+# TODO - Needs better error messages
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID.    prog.
+       PROCEDURE      DIVISION.
+           *> Valid form
+           DISPLAY X"0123456789ABCDEF"
+
+           *> invalid form
+           DISPLAY X"GH"
+                   X"1"
+           END-DISPLAY.
+])
+AT_CHECK([$COMPILE_ONLY prog.cob], [1], [], [])
+AT_CLEANUP
+
+
diff --git a/gcc/cobol/UAT/skipsuite.src/run_fundamental.at b/gcc/cobol/UAT/skipsuite.src/run_fundamental.at
index c3a46a12e195ddfac6c4d9e5a57cd4530a60c1b0..ec7563a660e7da69ccb3998441e5016a8324dc97 100644
--- a/gcc/cobol/UAT/skipsuite.src/run_fundamental.at
+++ b/gcc/cobol/UAT/skipsuite.src/run_fundamental.at
@@ -441,31 +441,6 @@ AT_CHECK([./a.out], [0],
 ])
 AT_CLEANUP
 
-
-AT_SETUP([Context sensitive words (5)])
-AT_KEYWORDS([fundamental recursive])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-# TODO NOT IMPLEMENTED "RECURSIVE"
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog RECURSIVE.
-       ENVIRONMENT      DIVISION.
-       CONFIGURATION    SECTION.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  RECURSIVE    PIC 9 VALUE 0.
-       PROCEDURE        DIVISION.
-           DISPLAY RECURSIVE NO ADVANCING
-           END-DISPLAY.
-           STOP RUN.
-])
-
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([./a.out], [0], [0], [])
-AT_CLEANUP
-
 AT_SETUP([SYNC in OCCURS])
 AT_KEYWORDS([fundamental CDF SYNCHRONIZE])
 AT_SKIP_IF(false)
diff --git a/gcc/cobol/UAT/skipsuite.src/run_misc.at b/gcc/cobol/UAT/skipsuite.src/run_misc.at
index 4066cdc881803579181f36ca9e07261fbbd027ee..1b7505cfad0bbfa675f71097eb26955778ea70a7 100644
--- a/gcc/cobol/UAT/skipsuite.src/run_misc.at
+++ b/gcc/cobol/UAT/skipsuite.src/run_misc.at
@@ -235,158 +235,8 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out3], [0], [], [])
 AT_CLEANUP
 
 
-AT_SETUP([240. Recursive CALL of RECURSIVE program])
-AT_KEYWORDS([misc CANCEL EXTERNAL])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([caller.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      caller IS RECURSIVE.
-       ENVIRONMENT      DIVISION.
-       CONFIGURATION    SECTION.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC S9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           MOVE 0 TO STOPPER
-           CALL "callee"
-           DISPLAY 'OK' NO ADVANCING END-DISPLAY
-      *> FIXME: CANCEL broken on special environments
-      *>   CANCEL "callee" , "callee2"
-           DISPLAY ' + FINE' NO ADVANCING END-DISPLAY
-           STOP RUN.
-])
-AT_DATA([callee.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee IS RECURSIVE.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC S9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           IF STOPPER = 9
-              MOVE -1 TO STOPPER
-           ELSE
-              ADD   1 TO STOPPER
-              CALL "callee2"
-           END-IF
-           GOBACK.
-])
-AT_DATA([callee2.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee2 IS RECURSIVE.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC S9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           IF STOPPER NOT EQUAL -1
-             CALL "callee"
-           END-IF
-           GOBACK.
-])
-
-AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
-AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
-AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [OK + FINE], [])
-AT_CLEANUP
-
-
-AT_SETUP([241. Recursive CALL of INITIAL program])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([caller.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      caller.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC 9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           MOVE 0 TO STOPPER
-           CALL "callee" END-CALL.
-           GOBACK.
-])
-AT_DATA([callee.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee IS INITIAL.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC 9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           IF STOPPER = 1
-              DISPLAY 'INITIAL prog was called RECURSIVE'
-              END-DISPLAY
-      *       Following statement not ISO, corrected below
-      *       STOP RUN RETURNING 1
-              MOVE 1 TO RETURN-CODE
-              STOP RUN 
-           ELSE
-              MOVE 1 TO STOPPER
-              CALL "callee2" END-CALL
-           END-IF.
-           GOBACK.
-])
-AT_DATA([callee2.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee2.
-       PROCEDURE        DIVISION.
-           CALL "callee" END-CALL.
-           GOBACK.
-])
-AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
-AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
-AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
-AT_CHECK([./caller], [1], [INITIAL prog was called RECURSIVE
-], [])
-AT_CLEANUP
-
-
-AT_SETUP([Recursive CALL with RECURSIVE assumed])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([caller.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      caller.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC 9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           MOVE 0 TO STOPPER
-           CALL "callee" END-CALL.
-           GOBACK.
-])
-AT_DATA([callee.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee IS INITIAL.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       77  STOPPER      PIC 9 EXTERNAL.
-       PROCEDURE        DIVISION.
-           IF STOPPER = 8
-              DISPLAY 'OK' NO ADVANCING END-DISPLAY.
-           IF STOPPER NOT = 9
-              ADD  1 TO STOPPER END-ADD
-              CALL "callee2" END-CALL.
-           GOBACK.
-])
-AT_DATA([callee2.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee2.
-       PROCEDURE        DIVISION.
-           CALL "callee" END-CALL.
-           GOBACK.
-])
-AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
-AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
-AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [OK], [])
-AT_CLEANUP
-
-
 AT_SETUP([Recursive CALL with ON EXCEPTION])
 AT_KEYWORDS([misc EXCEPTION-STATUS])
-AT_SKIP_IF(false)
 AT_XFAIL_IF(true)
 AT_DATA([caller.cob], [
        IDENTIFICATION   DIVISION.
@@ -440,7 +290,6 @@ AT_CLEANUP
 
 AT_SETUP([Multiple calls of INITIAL program])
 AT_KEYWORDS([misc CALL])
-AT_SKIP_IF(false)
 AT_XFAIL_IF(true)
 AT_DATA([caller.cob], [
        IDENTIFICATION   DIVISION.
@@ -820,181 +669,6 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
 AT_CLEANUP
 
 
-AT_SETUP([PERFORM inline (1)])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  INDVAL       PIC 9(4).
-       PROCEDURE        DIVISION.
-           PERFORM VARYING INDVAL FROM 1
-            BY 1 UNTIL INDVAL > 2
-           CONTINUE
-           END-PERFORM
-           IF INDVAL NOT = 3
-              DISPLAY INDVAL NO ADVANCING
-              END-DISPLAY
-           END-IF
-           STOP RUN
-           .
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([PERFORM inline (2)])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  INDVAL       PIC 9(4).
-       PROCEDURE        DIVISION.
-           PERFORM VARYING INDVAL FROM 1
-            BY 1 UNTIL INDVAL > 2
-            CONTINUE
-            END-PERFORM
-           IF INDVAL NOT = 3
-              DISPLAY INDVAL NO ADVANCING
-              END-DISPLAY
-           END-IF
-           .
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([UNSTRING DELIMITER IN])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       ENVIRONMENT      DIVISION.
-       DATA             DIVISION.
-       WORKING-STORAGE SECTION.
-       01  WK-CMD       PIC X(8) VALUE "WWADDBCC".
-       01  WK-SIGNS     PIC XX   VALUE "AB".
-       01  WKS REDEFINES WK-SIGNS.
-           03 WK-SIGN   PIC X OCCURS 2.
-       01  . 
-         02 WK-DELIM     PIC X OCCURS 2.
-       01  .
-         02 WK-DATA      PIC X(2) OCCURS 3.
-       PROCEDURE        DIVISION.
-           UNSTRING WK-CMD DELIMITED BY WK-SIGN(1) OR WK-SIGN(2)
-           INTO WK-DATA(1) DELIMITER IN WK-DELIM(1)
-                WK-DATA(2) DELIMITER IN WK-DELIM(2)
-                WK-DATA(3)
-           END-UNSTRING
-           IF  WK-DATA(1)   NOT = "WW"
-            OR WK-DATA(2)   NOT = "DD"
-            OR WK-DATA(3)   NOT = "CC"
-            OR WK-DELIM(1)  NOT = "A"
-            OR WK-DELIM(2)  NOT = "B"
-               DISPLAY """" WK-DATA(1)
-                       WK-DATA(2)
-                       WK-DATA(3)
-                       WK-DELIM(1)
-                       WK-DELIM(2) """"
-               END-DISPLAY
-           END-IF.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([PERFORM type OSVS])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01  MYOCC        PIC 9(8) COMP VALUE 0.
-       PROCEDURE        DIVISION.
-       ASTART SECTION.
-       A01.
-           PERFORM BTEST.
-           IF MYOCC NOT = 2
-              DISPLAY MYOCC
-              END-DISPLAY
-           END-IF.
-           STOP RUN.
-       BTEST SECTION.
-       B01.
-           PERFORM B02 VARYING MYOCC FROM 1 BY 1
-                   UNTIL MYOCC > 5.
-           GO TO B99.
-       B02.
-           IF MYOCC > 1
-              GO TO B99
-           END-IF.
-       B99.
-           EXIT.
-])
-AT_CHECK([$COMPILE  prog.cob], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-AT_CLEANUP
-
-
-AT_SETUP([Sticky LINKAGE])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-AT_DATA([callee.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      callee.
-       DATA             DIVISION.
-       LINKAGE          SECTION.
-       01 P1            PIC X.
-       01 P2            PIC X(6).
-       01 P3            PIC X(6).
-       PROCEDURE        DIVISION USING P1 P2.
-           IF P1 = "A"
-              SET ADDRESS OF P3 TO ADDRESS OF P2
-           ELSE
-              IF P3 NOT = "OKOKOK"
-                 DISPLAY P3
-                 END-DISPLAY
-              END-IF
-           END-IF.
-           EXIT PROGRAM.
-])
-AT_DATA([caller.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      caller.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 P1            PIC X    VALUE "A".
-       01 P2            PIC X(6) VALUE "NOT OK".
-       PROCEDURE        DIVISION.
-           CALL "callee" USING P1 P2
-           END-CALL.
-           MOVE "B"      TO P1.
-           MOVE "OKOKOK" TO P2.
-           CALL "callee" USING P1
-           END-CALL.
-           STOP RUN.
-])
-AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
-AT_CHECK([$COMPILE -o caller caller.cob callee.o], [0], [], [])
-AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [], [])
-AT_CLEANUP
 
 
 AT_SETUP([COB_PRE_LOAD with entry points])
diff --git a/gcc/cobol/UAT/skipsuite.src/run_subscripts.at b/gcc/cobol/UAT/skipsuite.src/run_subscripts.at
index 6a7563469323acafd129b492314ee6f4637fcdd6..b9166cde6e4b1609d7c30bd822c02afb94ecc438 100644
--- a/gcc/cobol/UAT/skipsuite.src/run_subscripts.at
+++ b/gcc/cobol/UAT/skipsuite.src/run_subscripts.at
@@ -194,7 +194,37 @@ note: maximum subscript for 'y': 5
 ])
 AT_CHECK([$COBCRUN_DIRECT ./a.outn], [0], [!], [])
 AT_CHECK([$COBCRUN_DIRECT ./a.outn2], [0], [!], [])
-
 AT_CLEANUP
 
+AT_SETUP([SSRANGE/NOSSRANGE directives (IBM, not ISO)])
+AT_KEYWORDS([runsubscripts subscripts extensions directive])
+AT_XFAIL_IF(true)
+# WARNING: this testcase is "broken" as those SSRANGE may only be
+#          defined before IDENTIFICATION DIVISION (iniatial $SET)
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       01  x.
+           03  y       PIC X OCCURS 5 TIMES VALUE SPACE.
+           03  z       PIC X VALUE "!".
+       01  idx         PIC 99 VALUE 6.
+           
+       PROCEDURE DIVISION.
+      $SET NOSSRANGE
+           DISPLAY y (idx)
+      *> Note: MF says "sets BOUND"
+      $SET SSRANGE
+           DISPLAY y (idx)
+           .
+])
+AT_CHECK([$COMPILE -DTEST-SUBSCRIPT prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [1],
+[!
+], [libcob: prog.cob:17: error: subscript of 'y' out of bounds: 6
+note: maximum subscript for 'y': 5
+])
+AT_CLEANUP
 
diff --git a/gcc/cobol/UAT/skipsuite.src/syn_copy.at b/gcc/cobol/UAT/skipsuite.src/syn_copy.at
index 891607bdf31b3630f6830de2964ef8ce787cc656..ffc89c97356233e0ec4a829d58d7c24dd5250758 100644
--- a/gcc/cobol/UAT/skipsuite.src/syn_copy.at
+++ b/gcc/cobol/UAT/skipsuite.src/syn_copy.at
@@ -481,3 +481,48 @@ AT_CHECK([./prog], [0], [OK], [])
 AT_CLEANUP
 
 
+AT_SETUP([392 COPY: IN / OF / -I: 3])
+AT_KEYWORDS([copy cobc])
+AT_XFAIL_IF(true)
+# TODO: Should default to auto-folding when IN "sub2" (literal) is
+#       used and therefore don't work on case-sensitive file-systems
+#
+# jkl:  This test is invalid.  "The implementor shall define the
+#       rules for locating the library text referenced by text-name-1
+#       or literal-1. When neither library-name-1 nor literal-2 is
+#       specified, a default COBOL library is used. The implementor
+#       defines the mechanism for identifying the default COBOL
+#       library."
+#
+# This implementation consults the environment.  If an environment
+# variable is defined for the library or copybook name, the value of
+# that variable is used.  If not, the name from the Cobol text is
+# used.  If a literal is supplied instead of a user-defined Cobol
+# word, no change is made to the name; it either exists, literally, or
+# it does not.  If a user-defined Cobol word is supplied, the name is
+# tried with various suffixes (and without) using glob(3) to match.
+#
+# In no event is either name transformed to upper case.  Perhaps that
+# should be a future option, but I suggest waiting for real-world
+# examples and a willing customer.
+#
+AT_DATA([prog3.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       COPY "copy.inc" IN sub2.
+       PROCEDURE        DIVISION.
+           DISPLAY TEST-VAR.
+           STOP RUN.
+])
+AT_CHECK([mkdir -p SUB/UNDER], [0], [], [])
+AT_DATA([SUB/UNDER/copy.inc], [
+       77  TEST-VAR     PIC X VALUE '3'.
+])
+AT_DATA([copy.inc], [
+       77  TEST-VAR     PIC X VALUE '4'.
+])
+AT_CHECK([$COMPILE_ONLY prog3.cob], [0], [], [])
+AT_CLEANUP
+
diff --git a/gcc/cobol/UAT/skipsuite.src/syn_definition.at b/gcc/cobol/UAT/skipsuite.src/syn_definition.at
index 742409a929f32857892441cefc19b15bb07f9c83..1037a93d2935b0c3d383ef1a37ff91785df5c62e 100644
--- a/gcc/cobol/UAT/skipsuite.src/syn_definition.at
+++ b/gcc/cobol/UAT/skipsuite.src/syn_definition.at
@@ -38,34 +38,7 @@ AT_CHECK([$COMPILE_ONLY prog.cob], [1], [],
 AT_CLEANUP
 
 
-AT_SETUP([405 INITIAL / RECURSIVE before COMMON])
-AT_KEYWORDS([PROGRAM-ID definition])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-# RECURSIVE not implemented.
-
-AT_DATA([containing-prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      containing-prog.
-
-       PROCEDURE        DIVISION.
-
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog-1 IS INITIAL COMMON.
-       PROCEDURE        DIVISION.
-           STOP RUN.
-       END PROGRAM      prog-1.
 
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog-2 IS RECURSIVE COMMON.
-       PROCEDURE        DIVISION.
-           STOP RUN.
-       END PROGRAM      prog-2.
-])
-
-AT_CHECK([$COMPILE_ONLY containing-prog.cob], [0], [], [])
-
-AT_CLEANUP
 
 
 AT_SETUP([406 Undefined data name])
diff --git a/gcc/cobol/UAT/skipsuite.src/syn_misc.at b/gcc/cobol/UAT/skipsuite.src/syn_misc.at
index 44eb8d06c3453583193f02f0592d7d7ff466a45e..7613b1b7b2fea7f092a7496cfb18221a4883c728 100644
--- a/gcc/cobol/UAT/skipsuite.src/syn_misc.at
+++ b/gcc/cobol/UAT/skipsuite.src/syn_misc.at
@@ -2533,36 +2533,6 @@ prog3.cob:26: error: syntax error, unexpected +
 AT_CLEANUP
 
 
-AT_SETUP([X literals])
-AT_KEYWORDS([misc])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-# TODO - NOT IMPLEMENTED - diagnostic messages
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID.    prog.
-       PROCEDURE      DIVISION.
-           *> Valid form
-           DISPLAY X"0123456789ABCDEF"
-
-           *> invalid form
-           DISPLAY X"GH"
-                   X"1"
-           END-DISPLAY.
-])
-
-AT_CHECK([$COMPILE_ONLY prog.cob], [1], [],
-[prog.cob:9: error: invalid X literal: 'GH'
-prog.cob:9: error: literal contains invalid character 'G'
-prog.cob:9: error: literal contains invalid character 'H'
-prog.cob:10: error: invalid X literal: '1'
-prog.cob:10: error: literal does not have an even number of digits
-])
-
-AT_CLEANUP
-
-
 AT_SETUP([national literals])
 AT_KEYWORDS([misc])
 AT_SKIP_IF(false)
@@ -2768,30 +2738,6 @@ AT_CHECK([$COMPILE_ONLY -fnot-reserved=DISPLAY -freserved=COMP-1=DISPLAY prog2.c
 AT_CLEANUP
 
 
-AT_SETUP([swapped SOURCE- and OBJECT-COMPUTER])
-AT_KEYWORDS([misc extensions])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-# TODO - NOT IMPLEMENTED - Diagnostic messages
-# This is a test for statement order.
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION DIVISION.
-       PROGRAM-ID.    prog.
-
-       ENVIRONMENT    DIVISION.
-       CONFIGURATION  SECTION.
-       OBJECT-COMPUTER. a.
-       SOURCE-COMPUTER. b.
-])
-
-# MF extension, supported by GnuCOBOL
-AT_CHECK([$COMPILE_ONLY prog.cob], [0], [], [])
-# note: testing with lax configuration, otherwise there would be an error
- 
-AT_CLEANUP
-
-
 AT_SETUP([CONF. SECTION paragraphs in wrong order])
 AT_KEYWORDS([misc extensions])
 AT_SKIP_IF(false)
diff --git a/gcc/cobol/UAT/skipsuite.src/syn_occurs.at b/gcc/cobol/UAT/skipsuite.src/syn_occurs.at
index 8c4b0d14290e56ab0ab4f45433a3b8229c2438f4..32efee69fadf000ee375106486f44dd000c4cc2b 100644
--- a/gcc/cobol/UAT/skipsuite.src/syn_occurs.at
+++ b/gcc/cobol/UAT/skipsuite.src/syn_occurs.at
@@ -243,32 +243,6 @@ AT_CLEANUP
 
 # 9) DONE
 
-AT_SETUP([Nested OCCURS clause])
-AT_KEYWORDS([occurs])
-AT_SKIP_IF(false)
-AT_XFAIL_IF(true)
-# NOT IMPLEMENTED: Diagnostic messages
-
-AT_DATA([prog.cob], [
-       IDENTIFICATION   DIVISION.
-       PROGRAM-ID.      prog.
-       DATA             DIVISION.
-       WORKING-STORAGE  SECTION.
-       01 G-1.
-        02 G-2          OCCURS 2.
-         03 G-3         OCCURS 2.
-          04 G-4        OCCURS 2.
-           05 G-5       OCCURS 2.
-            06 G-6      OCCURS 2.
-             07 G-7     OCCURS 2.
-              08 G-8    OCCURS 2.
-               09 X     PIC X.
-])
-
-AT_CHECK([$COMPILE_ONLY prog.cob], [0], [], [])
-
-AT_CLEANUP
-
 
 # 10) TODO
 
diff --git a/gcc/cobol/UAT/testsuite.src/run_evaluate.at b/gcc/cobol/UAT/testsuite.src/run_evaluate.at
index 63a5f7ba280edd30004e9581f1e998f0a8cd6fa5..25aa6e2f219d14adfd25d14d07f3f2fe762eeb3a 100644
--- a/gcc/cobol/UAT/testsuite.src/run_evaluate.at
+++ b/gcc/cobol/UAT/testsuite.src/run_evaluate.at
@@ -31,6 +31,52 @@ AT_CHECK([./a.out], [0], [not
 ], [])
 AT_CLEANUP
 
+AT_SETUP([EVALUATE condition (2)])
+AT_KEYWORDS([evaluate condition])
+AT_DATA([prog.cob], [
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+           01  XVAL PIC X VALUE '_'.
+               88  UNDERSCORE  VALUE '_'.
+        PROCEDURE        DIVISION.
+           DISPLAY 'Next line should be "UNDERSCORE evaluates to TRUE"'
+           EVALUATE TRUE
+              WHEN NOT UNDERSCORE
+                 DISPLAY 
+                     "***IMPROPERLY*** NOT UNDERSCORE evaluates to TRUE"
+                 END-DISPLAY
+           END-EVALUATE.
+           EVALUATE TRUE
+              WHEN UNDERSCORE
+                 DISPLAY "UNDERSCORE evaluates to TRUE"
+                 END-DISPLAY
+           END-EVALUATE.
+
+           DISPLAY 
+               'Next line should be "NOT UNDERSCORE evaluates to FALSE"'
+           EVALUATE FALSE
+              WHEN NOT UNDERSCORE
+                 DISPLAY "NOT UNDERSCORE evaluates to FALSE"
+                 END-DISPLAY
+           END-EVALUATE.
+           EVALUATE FALSE
+              WHEN UNDERSCORE
+                 DISPLAY 
+                        "***IMPROPERLY*** UNDERSCORE evaluates to FALSE"
+                 END-DISPLAY
+           END-EVALUATE.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([./a.out], [0], [Next line should be "UNDERSCORE evaluates to TRUE"
+UNDERSCORE evaluates to TRUE
+Next line should be "NOT UNDERSCORE evaluates to FALSE"
+NOT UNDERSCORE evaluates to FALSE
+], [])
+AT_CLEANUP
+
 
 AT_SETUP([EVALUATE with WHEN using condition-1])
 # Gnu DOES NOT support condition names as Evaluate object
diff --git a/gcc/cobol/UAT/testsuite.src/run_functions.at b/gcc/cobol/UAT/testsuite.src/run_functions.at
index 1545173ebbfe7e6b987a7420ec7a2173c0d8df24..bff4e719f7fb5785901c559a237bd26f9d47373a 100644
--- a/gcc/cobol/UAT/testsuite.src/run_functions.at
+++ b/gcc/cobol/UAT/testsuite.src/run_functions.at
@@ -3495,6 +3495,104 @@ AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], ["Santa                           Claus
 ], [])
 AT_CLEANUP
 
+AT_SETUP([UDF in COMPUTE])
+AT_KEYWORDS([functions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       FUNCTION-ID. func.
+
+       DATA DIVISION.
+       LINKAGE SECTION.
+       01  num PIC 999.
+       
+       PROCEDURE DIVISION RETURNING num.
+           MOVE 100 TO num
+           .
+       END FUNCTION func.
+
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+
+       ENVIRONMENT DIVISION.
+       CONFIGURATION SECTION.
+       REPOSITORY.
+           FUNCTION func.
+           
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       01  x PIC 999.
+       
+       PROCEDURE DIVISION.
+           COMPUTE x = 101 + FUNCTION func
+           DISPLAY x
+           .
+       END PROGRAM prog.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[201
+])
+AT_CLEANUP
+
+AT_SETUP([UDF with recursion])
+AT_KEYWORDS([functions LOCAL-STORAGE])
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       FUNCTION-ID. foo.
+
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       01  ttl  PIC 9 VALUE 1.
+
+       LOCAL-STORAGE SECTION.
+       01  num  PIC 9.
+
+       LINKAGE SECTION.
+       01  arg PIC 9.
+       01  ret PIC 9.
+
+       PROCEDURE DIVISION USING arg RETURNING ret.
+           IF arg < 5
+              ADD 1 TO arg GIVING num END-ADD
+              MOVE FUNCTION foo (num) TO ret
+           ELSE
+              MOVE arg TO ret
+           END-IF
+           DISPLAY "Step: " ttl ", Arg: " arg ", Return: " ret
+           END-DISPLAY
+           ADD 1 to ttl END-ADD
+           GOBACK.
+       END FUNCTION foo.
+
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+
+       ENVIRONMENT DIVISION.
+       CONFIGURATION SECTION.
+       REPOSITORY.
+           FUNCTION foo.
+
+       DATA DIVISION.
+       WORKING-STORAGE SECTION.
+       01 num PIC 9 VALUE 1.
+
+       PROCEDURE DIVISION.
+           DISPLAY "Return value '" FUNCTION foo (num) "'"
+             WITH NO ADVANCING
+           END-DISPLAY
+           GOBACK.
+       END PROGRAM prog.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0],
+[Step: 1, Arg: 5, Return: 5
+Step: 2, Arg: 4, Return: 5
+Step: 3, Arg: 3, Return: 5
+Step: 4, Arg: 2, Return: 5
+Step: 5, Arg: 1, Return: 5
+Return value '5'], [])
+AT_CLEANUP
+
 AT_SETUP([Program-to-program parameters and retvals])
 AT_KEYWORDS([functions parameter])
 AT_DATA([prog.cob], [        IDENTIFICATION DIVISION.
diff --git a/gcc/cobol/UAT/testsuite.src/run_fundamental.at b/gcc/cobol/UAT/testsuite.src/run_fundamental.at
index 018a815e963abdd299cd89b87c4d52221d665105..7c9465117718a7536adb7f0065af3e204127e60b 100644
--- a/gcc/cobol/UAT/testsuite.src/run_fundamental.at
+++ b/gcc/cobol/UAT/testsuite.src/run_fundamental.at
@@ -914,6 +914,25 @@ AT_CHECK([./a.out], [0], [0], [])
 AT_CLEANUP
 
 
+AT_SETUP([Context sensitive words (5)])
+AT_KEYWORDS([fundamental recursive])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog RECURSIVE.
+       ENVIRONMENT      DIVISION.
+       CONFIGURATION    SECTION.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  RECURSIVE    PIC 9 VALUE 0.
+       PROCEDURE        DIVISION.
+           DISPLAY RECURSIVE NO ADVANCING
+           END-DISPLAY.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([./a.out], [0], [0], [])
+AT_CLEANUP
+
 AT_SETUP([Context sensitive words (6)])
 AT_KEYWORDS([fundamental normal])
 AT_DATA([prog.cob], [
diff --git a/gcc/cobol/UAT/testsuite.src/run_misc.at b/gcc/cobol/UAT/testsuite.src/run_misc.at
index 861d714744e950ce7b527fc0bfcad996e895b40b..b9bdc50d834e617431e6b5d251b08a8e76a080a7 100644
--- a/gcc/cobol/UAT/testsuite.src/run_misc.at
+++ b/gcc/cobol/UAT/testsuite.src/run_misc.at
@@ -3421,3 +3421,312 @@ On exit: 004
 On exit: 005
 ], [])
 AT_CLEANUP
+
+AT_SETUP([Recursive CALL of RECURSIVE program])
+AT_KEYWORDS([misc CANCEL EXTERNAL])
+AT_DATA([caller.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      caller IS RECURSIVE.
+       ENVIRONMENT      DIVISION.
+       CONFIGURATION    SECTION.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC S9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           MOVE 0 TO STOPPER
+           CALL "callee"
+           DISPLAY 'OK' NO ADVANCING END-DISPLAY
+      *> FIXME: CANCEL broken on special environments
+      *>   CANCEL "callee" , "callee2"
+           DISPLAY ' + FINE' NO ADVANCING END-DISPLAY
+           STOP RUN.
+])
+AT_DATA([callee.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee IS RECURSIVE.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC S9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           IF STOPPER = 9
+              MOVE -1 TO STOPPER
+           ELSE
+              ADD   1 TO STOPPER
+              CALL "callee2"
+           END-IF
+           GOBACK.
+])
+AT_DATA([callee2.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee2 IS RECURSIVE.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC S9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           IF STOPPER NOT EQUAL -1
+             CALL "callee"
+           END-IF
+           GOBACK.
+])
+
+AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
+AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
+AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [OK + FINE], [])
+AT_CLEANUP
+
+
+AT_SETUP([Recursive CALL of INITIAL program])
+AT_KEYWORDS([misc])
+AT_DATA([caller.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      caller.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC 9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           MOVE 0 TO STOPPER
+           CALL "callee" END-CALL.
+           GOBACK.
+])
+AT_DATA([callee.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee IS INITIAL.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC 9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           IF STOPPER = 1
+              DISPLAY 'INITIAL prog was called RECURSIVE'
+              END-DISPLAY
+      *       Following statement not ISO, corrected below
+      *       STOP RUN RETURNING 1
+              MOVE 1 TO RETURN-CODE
+              STOP RUN 
+           ELSE
+              MOVE 1 TO STOPPER
+              CALL "callee2" END-CALL
+           END-IF.
+           GOBACK.
+])
+AT_DATA([callee2.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee2.
+       PROCEDURE        DIVISION.
+           CALL "callee" END-CALL.
+           GOBACK.
+])
+AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
+AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
+AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
+AT_CHECK([./caller], [1], [INITIAL prog was called RECURSIVE
+], [])
+AT_CLEANUP
+
+
+AT_SETUP([Recursive CALL with RECURSIVE assumed])
+AT_KEYWORDS([misc])
+AT_DATA([caller.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      caller.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC 9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           MOVE 0 TO STOPPER
+           CALL "callee" END-CALL.
+           GOBACK.
+])
+AT_DATA([callee.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee IS INITIAL.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       77  STOPPER      PIC 9 EXTERNAL.
+       PROCEDURE        DIVISION.
+           IF STOPPER = 8
+              DISPLAY 'OK' NO ADVANCING END-DISPLAY.
+           IF STOPPER NOT = 9
+              ADD  1 TO STOPPER END-ADD
+              CALL "callee2" END-CALL.
+           GOBACK.
+])
+AT_DATA([callee2.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee2.
+       PROCEDURE        DIVISION.
+           CALL "callee" END-CALL.
+           GOBACK.
+])
+AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
+AT_CHECK([$COMPILE -c callee2.cob], [0], [], [])
+AT_CHECK([$COMPILE -o caller caller.cob callee.o callee2.o], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [OK], [])
+AT_CLEANUP
+
+
+AT_SETUP([PERFORM inline (1)])
+AT_KEYWORDS([misc])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  INDVAL       PIC 9(4).
+       PROCEDURE        DIVISION.
+           PERFORM VARYING INDVAL FROM 1
+            BY 1 UNTIL INDVAL > 2
+           CONTINUE
+           END-PERFORM
+           IF INDVAL NOT = 3
+              DISPLAY INDVAL NO ADVANCING
+              END-DISPLAY
+           END-IF
+           STOP RUN
+           .
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([PERFORM inline (2)])
+AT_KEYWORDS([misc])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  INDVAL       PIC 9(4).
+       PROCEDURE        DIVISION.
+           PERFORM VARYING INDVAL FROM 1
+            BY 1 UNTIL INDVAL > 2
+            CONTINUE
+            END-PERFORM
+           IF INDVAL NOT = 3
+              DISPLAY INDVAL NO ADVANCING
+              END-DISPLAY
+           END-IF
+           .
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([UNSTRING DELIMITER IN])
+AT_KEYWORDS([misc])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       ENVIRONMENT      DIVISION.
+       DATA             DIVISION.
+       WORKING-STORAGE SECTION.
+       01  WK-CMD       PIC X(8) VALUE "WWADDBCC".
+       01  WK-SIGNS     PIC XX   VALUE "AB".
+       01  WKS REDEFINES WK-SIGNS.
+           03 WK-SIGN   PIC X OCCURS 2.
+       01  . 
+         02 WK-DELIM     PIC X OCCURS 2.
+       01  .
+         02 WK-DATA      PIC X(2) OCCURS 3.
+       PROCEDURE        DIVISION.
+           UNSTRING WK-CMD DELIMITED BY WK-SIGN(1) OR WK-SIGN(2)
+           INTO WK-DATA(1) DELIMITER IN WK-DELIM(1)
+                WK-DATA(2) DELIMITER IN WK-DELIM(2)
+                WK-DATA(3)
+           END-UNSTRING
+           IF  WK-DATA(1)   NOT = "WW"
+            OR WK-DATA(2)   NOT = "DD"
+            OR WK-DATA(3)   NOT = "CC"
+            OR WK-DELIM(1)  NOT = "A"
+            OR WK-DELIM(2)  NOT = "B"
+               DISPLAY """" WK-DATA(1)
+                       WK-DATA(2)
+                       WK-DATA(3)
+                       WK-DELIM(1)
+                       WK-DELIM(2) """"
+               END-DISPLAY
+           END-IF.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([PERFORM type OSVS])
+AT_KEYWORDS([misc])
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01  MYOCC        PIC 9(8) COMP VALUE 0.
+       PROCEDURE        DIVISION.
+       ASTART SECTION.
+       A01.
+           PERFORM BTEST.
+           IF MYOCC NOT = 2
+              DISPLAY MYOCC
+              END-DISPLAY
+           END-IF.
+           STOP RUN.
+       BTEST SECTION.
+       B01.
+           PERFORM B02 VARYING MYOCC FROM 1 BY 1
+                   UNTIL MYOCC > 5.
+           GO TO B99.
+       B02.
+           IF MYOCC > 1
+              GO TO B99
+           END-IF.
+       B99.
+           EXIT.
+])
+AT_CHECK([$COMPILE  prog.cob], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
+AT_CLEANUP
+
+
+AT_SETUP([Sticky LINKAGE])
+AT_KEYWORDS([misc])
+AT_DATA([callee.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      callee.
+       DATA             DIVISION.
+       LINKAGE          SECTION.
+       01 P1            PIC X.
+       01 P2            PIC X(6).
+       01 P3            PIC X(6).
+       PROCEDURE        DIVISION USING P1 P2.
+           IF P1 = "A"
+              SET ADDRESS OF P3 TO ADDRESS OF P2
+           ELSE
+              IF P3 NOT = "OKOKOK"
+                 DISPLAY P3
+                 END-DISPLAY
+              END-IF
+           END-IF.
+           EXIT PROGRAM.
+])
+AT_DATA([caller.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      caller.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 P1            PIC X    VALUE "A".
+       01 P2            PIC X(6) VALUE "NOT OK".
+       PROCEDURE        DIVISION.
+           CALL "callee" USING P1 P2
+           END-CALL.
+           MOVE "B"      TO P1.
+           MOVE "OKOKOK" TO P2.
+           CALL "callee" USING P1
+           END-CALL.
+           STOP RUN.
+])
+AT_CHECK([$COMPILE -c callee.cob], [0], [], [])
+AT_CHECK([$COMPILE -o caller caller.cob callee.o], [0], [], [])
+AT_CHECK([$COBCRUN_DIRECT ./caller], [0], [], [])
+AT_CLEANUP
diff --git a/gcc/cobol/UAT/testsuite.src/syn_definition.at b/gcc/cobol/UAT/testsuite.src/syn_definition.at
index 407e24ced5f7bd110906feff6110968aeb3f3f48..37812ea0998892698f71acd412645f73b1e8bffb 100644
--- a/gcc/cobol/UAT/testsuite.src/syn_definition.at
+++ b/gcc/cobol/UAT/testsuite.src/syn_definition.at
@@ -98,6 +98,27 @@ AT_CHECK([$COMPILE_ONLY SHORT.cob], [0], [], [])
 AT_CHECK([./prog], [0], [], [])
 AT_CLEANUP
 
+AT_SETUP([INITIAL / RECURSIVE before COMMON])
+AT_KEYWORDS([PROGRAM-ID definition])
+AT_DATA([containing-prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      containing-prog.
+       PROCEDURE        DIVISION.
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog-1 IS INITIAL COMMON.
+       PROCEDURE        DIVISION.
+           STOP RUN.
+       END PROGRAM      prog-1.
+
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog-2 IS RECURSIVE COMMON.
+       PROCEDURE        DIVISION.
+           STOP RUN.
+       END PROGRAM      prog-2.
+])
+AT_CHECK([$COMPILE_ONLY containing-prog.cob], [0], [], [])
+AT_CLEANUP
+
 
 AT_SETUP([Invalid PROGRAM-ID type clause (1)])
 AT_KEYWORDS([definition])
@@ -664,6 +685,28 @@ badprog.cob:12: error: 77 OUTPUT-NAME SAME AS MESSAGE-TEXT-2: must be elementary
 .:13: 5 errors in DATA DIVISION, compilation ceases detected at end of file
 cobol1: error: failed compiling badprog.cob
 ])
+AT_CLEANUP
 
+AT_SETUP([ALPHABET definition])
+AT_KEYWORDS([definition])
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID. prog.
+       ENVIRONMENT DIVISION.
+       CONFIGURATION SECTION.
+       SPECIAL-NAMES.
+           ALPHABET TESTME IS
+                    'A' THROUGH 'Z', x'00' thru x'05';
+                    x'41' ALSO x'42', ALSO x'00', x'C1' ALSO x'C2'.
+           ALPHABET FINE
+                    'A' also 'B' also 'C' also 'd' also 'e' ALSO 'f',
+                    'g' also 'G', '1' thru '9', x'00'.
+])
+AT_CHECK([$COMPILE_ONLY prog.cob], [1], [],
+[prog.cob:9: error: ALPHABET , character 'A' (x'41') in position 32 already defined at position 0 at 'ALSO'
+prog.cob:10: 1 errors in DATA DIVISION, compilation ceases at 'ALPHABET'
+cobol1: error: failed compiling prog.cob
+])
 AT_CLEANUP
 
+
diff --git a/gcc/cobol/UAT/testsuite.src/syn_misc.at b/gcc/cobol/UAT/testsuite.src/syn_misc.at
index 791cb5f9dc07c541b80d056d3c79583a7680d748..2901cc0580e49db156ddc72664eec3bb936f65e7 100644
--- a/gcc/cobol/UAT/testsuite.src/syn_misc.at
+++ b/gcc/cobol/UAT/testsuite.src/syn_misc.at
@@ -841,3 +841,16 @@ cobol1: error: failed compiling prog.cob
 ])
 AT_CLEANUP
 
+AT_SETUP([swapped SOURCE- and OBJECT-COMPUTER])
+AT_KEYWORDS([misc extensions])
+AT_DATA([prog.cob], [
+       IDENTIFICATION DIVISION.
+       PROGRAM-ID.    prog.
+
+       ENVIRONMENT    DIVISION.
+       CONFIGURATION  SECTION.
+       OBJECT-COMPUTER. a.
+       SOURCE-COMPUTER. b.
+])
+AT_CHECK([$COMPILE_ONLY prog.cob], [0], [], [])
+AT_CLEANUP
diff --git a/gcc/cobol/UAT/testsuite.src/syn_occurs.at b/gcc/cobol/UAT/testsuite.src/syn_occurs.at
index 729bcb0bf2cbdead353ece9266a3e4e1890ea45d..33842c9480b65e9fb09438285877faeadc2a1cb9 100644
--- a/gcc/cobol/UAT/testsuite.src/syn_occurs.at
+++ b/gcc/cobol/UAT/testsuite.src/syn_occurs.at
@@ -21,3 +21,23 @@
 ### ISO+IEC+1989-2002 13.16.36 OCCURS clause
 ### ISO+IEC+1989-202x 3rd WD 13.18.38 OCCURS clause
 
+AT_SETUP([Nested OCCURS clause])
+AT_KEYWORDS([occurs])
+# NOT IMPLEMENTED: Diagnostic messages
+AT_DATA([prog.cob], [
+       IDENTIFICATION   DIVISION.
+       PROGRAM-ID.      prog.
+       DATA             DIVISION.
+       WORKING-STORAGE  SECTION.
+       01 G-1.
+        02 G-2          OCCURS 2.
+         03 G-3         OCCURS 2.
+          04 G-4        OCCURS 2.
+           05 G-5       OCCURS 2.
+            06 G-6      OCCURS 2.
+             07 G-7     OCCURS 2.
+              08 G-8    OCCURS 2.
+               09 X     PIC X.
+])
+AT_CHECK([$COMPILE_ONLY prog.cob], [0], [], [])
+AT_CLEANUP