From 57c12c6f3e81e35d7f904c8fc5accdaa045d9568 Mon Sep 17 00:00:00 2001 From: nberth Date: Wed, 8 Mar 2023 16:15:11 +0000 Subject: [PATCH] Fix context-sensitivity of keyword aliases in configuration cobc/reserved.c (get_user_specified_reserved_word): add check for context sensitivity in aliases On behalf of Emilien Lemaire --- cobc/ChangeLog | 5 +++++ cobc/reserved.c | 5 +++++ tests/testsuite.src/syn_misc.at | 22 ++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/cobc/ChangeLog b/cobc/ChangeLog index 583cff1cc..8b8e8b85e 100644 --- a/cobc/ChangeLog +++ b/cobc/ChangeLog @@ -1,4 +1,9 @@ +2023-03-08 Emilien Lemaire + + * reserved.c (get_user_specified_reserved_word): add check for + context sensitivity in aliases + 2023-03-03 Simon Sobisch * typeck.c (cb_build_cond_fields): optimize comparison between field and diff --git a/cobc/reserved.c b/cobc/reserved.c index b034431e2..bfbf41221 100644 --- a/cobc/reserved.c +++ b/cobc/reserved.c @@ -4234,6 +4234,11 @@ get_user_specified_reserved_word (struct amendment_list user_reserved) p = find_default_reserved_word (user_reserved.alias_for, 0); if (p) { cobc_reserved.token = p->token; + if (user_reserved.is_context_sensitive) { + cobc_reserved.context_sens = + !!user_reserved.is_context_sensitive; + cobc_reserved.context_test = p->context_test; + } } else { /* FIXME: can we point to the fname originally defining the word? */ configuration_error (NULL, 0, 1, diff --git a/tests/testsuite.src/syn_misc.at b/tests/testsuite.src/syn_misc.at index e4701a92b..787ea8f72 100644 --- a/tests/testsuite.src/syn_misc.at +++ b/tests/testsuite.src/syn_misc.at @@ -8178,3 +8178,25 @@ AT_CHECK([$COMPILE_ONLY -fformat=fixed fixed2.cob], [0], [], []) AT_CHECK([$COMPILE_ONLY -fformat=fixed domfixed.cob], [0], [], []) AT_CLEANUP + +AT_SETUP([context sensitive alias]) +AT_KEYWORDS([misc context alias]) + +AT_DATA([prog.cob], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 XX PIC 9. + 01 X CONSTANT AS XX OF XX. + PROCEDURE DIVISION. + MOVE X TO XX. + DISPLAY XX NO ADVANCING + END-DISPLAY. + STOP RUN. +]) + +AT_CHECK([$COMPILE -freserved="XX*=BYTE-LENGTH" prog.cob], [0], [], []) +AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [1]) + +AT_CLEANUP