diff --git a/cobc/typeck.c b/cobc/typeck.c index 280fa922d..696ea8716 100644 --- a/cobc/typeck.c +++ b/cobc/typeck.c @@ -12036,13 +12036,7 @@ cb_build_move_copy (cb_tree src, cb_tree dst) if (size == 1) { return CB_BUILD_FUNCALL_2 ("$F", dst, src); } - if (cb_move_ibm) { - overlapping = 0; - return CB_BUILD_FUNCALL_3 ("cob_move_ibm", - CB_BUILD_CAST_ADDRESS (dst), - CB_BUILD_CAST_ADDRESS (src), - CB_BUILD_CAST_LENGTH (dst)); - } else if (overlapping + else if (overlapping || CB_FIELD_PTR (src)->storage == CB_STORAGE_LINKAGE || CB_FIELD_PTR (dst)->storage == CB_STORAGE_LINKAGE || CB_FIELD_PTR (src)->flag_item_based @@ -12619,7 +12613,14 @@ cb_build_move_field (cb_tree src, cb_tree dst) int src_size; int dst_size; - if (dst_f->flag_any_length || src_f->flag_any_length) { + if (cb_move_ibm) { + overlapping = 0; + return CB_BUILD_FUNCALL_3 ("cob_move_ibm", + CB_BUILD_CAST_ADDRESS (dst), + CB_BUILD_CAST_ADDRESS (src), + CB_BUILD_CAST_LENGTH (dst)); + } + else if (dst_f->flag_any_length || src_f->flag_any_length) { return CB_BUILD_FUNCALL_2 ("cob_move", src, dst); } src_size = cb_field_size (src); diff --git a/tests/testsuite.src/run_file.at b/tests/testsuite.src/run_file.at index 9dca167e2..0446bb275 100644 --- a/tests/testsuite.src/run_file.at +++ b/tests/testsuite.src/run_file.at @@ -14749,3 +14749,38 @@ AT_CHECK([$COMPILE -fdefault-file-colseq=EBCDIC prog.cob]) AT_CHECK([$COBCRUN_DIRECT ./prog]) AT_CLEANUP + + +AT_SETUP([READ INTO NUMERIC FD RECORD]) +AT_KEYWORDS([move overlap]) + +AT_DATA([testfile], [01234 +]) +AT_DATA([prog.cob], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + ENVIRONMENT DIVISION. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT MY-FILE ASSIGN TO "testfile" + ORGANIZATION IS LINE SEQUENTIAL. + DATA DIVISION. + FILE SECTION. + FD MY-FILE. + 01 MY-REC PIC 9(5). + PROCEDURE DIVISION. + + OPEN INPUT MY-FILE. + READ MY-FILE INTO MY-REC. + DISPLAY MY-REC. + CLOSE MY-FILE. + STOP RUN. +]) + +AT_CHECK([$COMPILE -fmove-ibm prog.cob -o prog], [0], [], []) + +AT_CHECK([./prog], [0], [01234 +]) + +AT_CLEANUP +