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