From c768232f201ae32c86521ebae7915bf721d183b2 Mon Sep 17 00:00:00 2001 From: "James K. Lowden" <jklowden@symas.com> Date: Sat, 27 Apr 2024 19:06:31 -0400 Subject: [PATCH] tweak symbol_map2 interrogation --- gcc/cobol/symfind.cc | 2 +- gcc/cobol/util.cc | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gcc/cobol/symfind.cc b/gcc/cobol/symfind.cc index 2facc63ad4bc..535710cf3c91 100644 --- a/gcc/cobol/symfind.cc +++ b/gcc/cobol/symfind.cc @@ -400,7 +400,7 @@ symbol_match2( size_t program, { std::vector<size_t> fields; - field_key_t key(program, names.front()); + field_key_t key(program, names.back()); for( auto candidate : symbol_map2[key] ) { auto e = symbol_at(candidate); diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc index 4399c7d93258..02da3160d959 100644 --- a/gcc/cobol/util.cc +++ b/gcc/cobol/util.cc @@ -1990,9 +1990,12 @@ cobol_filename_restore() { return input.name; } +static inline size_t +matched_length( const regmatch_t& rm ) { return rm.rm_eo - rm.rm_so; } + const char * cobol_fileline_set( const char line[] ) { - static const char pattern[] = "#line +([[:alnum:]]+) +([\"'][^\"']+). *\n"; + static const char pattern[] = "#line +([[:alnum:]]+) +[\"']([^\"']+). *\n"; static const int cflags = REG_EXTENDED | REG_ICASE; static regex_t re, *preg = NULL; @@ -2018,8 +2021,8 @@ cobol_fileline_set( const char line[] ) { } const char - *line_str = xstrndup(line + pmatch[1].rm_so, pmatch[1].rm_eo), - *filename = xstrndup(line + pmatch[2].rm_so, pmatch[2].rm_eo); + *line_str = xstrndup(line + pmatch[1].rm_so, matched_length(pmatch[1])), + *filename = xstrndup(line + pmatch[2].rm_so, matched_length(pmatch[2])); int fileline; if( 1 != sscanf(line_str, "%d", &fileline) ) @@ -2027,6 +2030,8 @@ cobol_fileline_set( const char line[] ) { input_file_t input_file( filename, fileline ); + if( getenv(__func__) ) return filename; // ignore #line directive + if( input_filenames.empty() ) { input_filenames.push(input_file); } -- GitLab