From: Robert Dubner mailto:[email protected]
Date: Tue, 29 Sep 2026 00:27:08 -0400
Subject: [PATCH] cobol: Remove debugging condition; appease cppcheck.
gcc/cobol/ChangeLog:
* picture.cc (is_valid_picture): Appease cppcheck.
(process_line): Likewise.
(process_file): Likewise.
(main): Likewise. Likewise.
* semantic_token.h (struct lex_picture_t): Likewise.
* symbols.cc (expand_picture): Remove obsolete PICTURE workaround.
* util.cc (cbl_field_t::encode_numeric): Likewise.
libgcobol/ChangeLog:
* libgcobol.cc (defined): Remove always-on MATCH_DECLARATIVE
debugging condition.
(__gg__compare_numdisp_alpha): Appease cppcheck.
gcc/testsuite/ChangeLog:
* cobol.dg/group2/Compare_numeric-display_to_alphanumeric.cob: New
test.
* cobol.dg/group2/Compare_numeric-display_to_alphanumeric.out: New
test.
* cobol.dg/group2/Test_refmod_against_named-conditional.cob: New
test.
* cobol.dg/group2/Test_refmod_against_named-conditional.out: New
test.
---
gcc/cobol/picture.cc | 15 +++++----
gcc/cobol/semantic_token.h | 2 +-
gcc/cobol/symbols.cc | 8 -----
gcc/cobol/util.cc | 3 --
...ompare_numeric-display_to_alphanumeric.cob | 19 +++++++++++
...ompare_numeric-display_to_alphanumeric.out | 2 ++
.../Test_refmod_against_named-conditional.cob | 32 +++++++++++++++++++
.../Test_refmod_against_named-conditional.out | 4 +++
libgcobol/libgcobol.cc | 4 +--
9 files changed, 68 insertions(+), 21 deletions(-)
create mode 100644
gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.cob
create mode 100644
gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.out
create mode 100644
gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.cob
create mode 100644
gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.out
diff --git a/gcc/cobol/picture.cc b/gcc/cobol/picture.cc
index 28489522fe8..0d7a4cefbe7 100644
--- a/gcc/cobol/picture.cc
+++ b/gcc/cobol/picture.cc
@@ -305,7 +305,7 @@ namespace picture_validation {
matrix[rule.state][ch] = rule.next_state;
i++;
}
- if( nextra ) {
+ if( nextra ) { // cppcheck-suppress knownConditionTrueFalse
cbl_internal_error("%s: %d redundant rules", __func__, nextra);
}
@@ -396,7 +396,7 @@ namespace picture_validation {
return true;
}
- bool is_boolean() const { return symbol_mask == p_one; }
+ bool is_boolean() const { return symbol_mask == p_one; } //
cppcheck-suppress unusedPrivateFunction
bool is_alphabetic() const { return symbol_mask == p_A; }
bool is_national() const { return symbol_mask == p_N; }
@@ -624,7 +624,7 @@ namespace picture_validation {
}
}
if( prior_ch == '.' && ch == '.' ) return false;
- if( ! add_contiguous(ch) ) return false;
+ if( ! add_contiguous(ch) ) return false; //
cppcheck-suppress knownConditionTrueFalse
if( ! picsym_settable(ch) ) { return false; }
picsym_set(ch);
@@ -921,6 +921,7 @@ is_valid_picture(const cbl_loc_t& loc, const char
picture[]) {
int count = result.first;
if( count == 0 ) {
dbgmsg("%s: odd zero repeat count for '%s'", __func__, paren);
+ // cppcheck-suppress unreadVariable
constraint.bad_repeat = paren; // pointless, not used
return output;
}
@@ -999,7 +1000,7 @@ process_line( const char picture[], int lineno = 1 )
{
assert(picture);
unsigned int mask = picture_validation::invalid_e;
auto result = is_valid_picture(picture);
- if( 0 == (mask & result.second) ) {
+ if( 0 == (mask & result.second) ) { // cppcheck-suppress
knownConditionTrueFalse
printf( "valid : %s (%s)\n",
picture, picture_validation::state_str(result.second) );
} else {
@@ -1008,7 +1009,7 @@ process_line( const char picture[], int lineno = 1 )
{
picture, unsigned(p - picture), *p,
picture_validation::state_str(result.second), lineno );
}
- return result.second & picture_validation::invalid_e;
+ return result.second & picture_validation::invalid_e; //
cppcheck-suppress knownConditionTrueFalse
}
static bool
@@ -1032,7 +1033,7 @@ process_file(const char* filename) {
if( p < picture + len ) *p = '\0';
process_line(picture, ++lineno);
}
- return len != -1;
+ return len != -1; // cppcheck-suppress knownConditionTrueFalse
}
int
@@ -1053,7 +1054,7 @@ main(int argc, char* argv[]) {
}
if (picture) {
- fOK = process_line(picture) ? 0 : 1;
+ fOK = process_line(picture) ? 0 : 1; // cppcheck-suppress
knownConditionTrueFalse
} else {
if (optind < argc) {
for (int i = optind; i < argc; ++i) {
diff --git a/gcc/cobol/semantic_token.h b/gcc/cobol/semantic_token.h
index 0fead8c3d35..145d4f6f35f 100644
--- a/gcc/cobol/semantic_token.h
+++ b/gcc/cobol/semantic_token.h
@@ -40,7 +40,7 @@ struct lex_picture_t {
cbl_field_data_t *data; // NULL if error
bool valid() const { return type != FldInvalid; }
- void dump( cbl_name_t input ) const {
+ void dump( const cbl_name_t input ) const {
auto len = strlen(input);
int pad = len < 20? 20 - len : 0;
fprintf( stderr, "%-20s %s: '%s'%*s @ %u of %u (%s)",
diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index 8a4f08362b0..13fd073c25b 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -4958,14 +4958,6 @@ expand_picture(const char *picture)
{
memmove(pV, pV+1, strlen(pV));
}
-
- // AD HOC FIX for an improper trailing space
- char *pspace = strchr(retval, ascii_space);
- if( pspace )
- {
- *pspace = NULLCH;
- }
-
return retval;
}
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index d2d627f7d14..6196671d446 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -1964,9 +1964,6 @@ cbl_field_t::encode_numeric( const char input[],
cbl_loc_t loc ) {
// __gg__string_to_numeric_edited operates in ASCII space:
char *expanded = expand_picture(data.picture);
- // By the time you read this, this next statement ought to be
- // obsolete. See RT issue 3682.
- expanded[char_capacity()] = '\0';
if( type == FldNumericEdited )
{
expand_expanded(expanded);
diff --git
a/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.co
b
b/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.co
b
new file mode 100644
index 00000000000..e57b9af4f28
--- /dev/null
+++
b/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.co
b
@@ -0,0 +1,19 @@
+ *> Do not edit this generated file. See README.txt
+ *> { dg-do run }
+ *> { dg-options "-dialect mf" }
+ *> { dg-output-file
"group2/Compare_numeric-display_to_alphanumeric.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 zipcode pic 9(5).
+ 01 zipcodex redefines zipcode pic x(5).
+ procedure division.
+ move space to zipcodex
+ if zipcode equal space
+ display "space"
+ else
+ display "NOT space (BUG!)" end-if
+ goback.
+ end program prog.
+
diff --git
a/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.ou
t
b/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.ou
t
new file mode 100644
index 00000000000..41733eba1e0
--- /dev/null
+++
b/gcc/testsuite/cobol.dg/group2/Compare_numeric-display_to_alphanumeric.ou
t
@@ -0,0 +1,2 @@
+space
+
diff --git
a/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.cob
b/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.cob
new file mode 100644
index 00000000000..0b4a766027d
--- /dev/null
+++
b/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.cob
@@ -0,0 +1,32 @@
+ *> Do not edit this generated file. See README.txt
+ *> { dg-do run }
+ *> { dg-options "-dialect mf" }
+ *> { dg-output-file
"group2/Test_refmod_against_named-conditional.out" }
+ identification division.
+ program-id. prog.
+ environment division.
+ configuration section.
+ special-names.
+ class digit-or-hyphen '0' thru '9' '-'.
+ data division.
+ working-storage section.
+ 01 foo pic x(7) value '123-x45'.
+ procedure division.
+ if foo(4:1) is digit-or-hyphen
+ display "4 is okay"
+ else
+ display "4 is bad"
+ end-if
+ if foo(5:1) is digit-or-hyphen
+ display "5 is bad"
+ else
+ display "5 is okay"
+ end-if
+ if foo(6:1) is digit-or-hyphen
+ display "6 is okay"
+ else
+ display "6 is bad"
+ end-if
+ goback.
+ end program prog.
+
diff --git
a/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.out
b/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.out
new file mode 100644
index 00000000000..127b8bdd11c
--- /dev/null
+++
b/gcc/testsuite/cobol.dg/group2/Test_refmod_against_named-conditional.out
@@ -0,0 +1,4 @@
+4 is okay
+5 is okay
+6 is okay
+
diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc
index 2d2100de2cf..c0924a81a2e 100644
--- a/libgcobol/libgcobol.cc
+++ b/libgcobol/libgcobol.cc
@@ -183,7 +183,7 @@ strfromf64 (char *s, size_t n, const char *f, double
v)
#endif
// Enable Declarative tracing via "match_declarative" environment
variable.
-#if defined(MATCH_DECLARATIVE) || true
+#if defined(MATCH_DECLARATIVE)
# undef MATCH_DECLARATIVE
# define MATCH_DECLARATIVE getenv("match_declarative")
#else
@@ -14036,7 +14036,7 @@ __gg__compare_numdisp_alpha( cblc_field_t
*left,
int flags)
{
// 'left' is numdisp. We MOVE it to an alphanumeric of the correct
size.
- charmap_t *charmap_left = __gg__get_charmap(left->encoding);
+ const charmap_t *charmap_left = __gg__get_charmap(left->encoding);
size_t left_size = left->capacity;
if( left->attr & separate_e )
{
--
2.34.1