When building COBOL on Solaris/sparcv9 with the native assembler, many
tests FAIL to assemble at -O0 like this:

FAIL: cobol.dg/data1.cob   -O0  (test for excess errors)
Excess errors:
/usr/ccs/bin/as: "/var/tmp//ccUduuqd.s", line 302: error: invalid character 
(0x50)
/usr/ccs/bin/as: "/var/tmp//ccUduuqd.s", line 302: error: unknown opcode 
"PERFORM"
/usr/ccs/bin/as: "/var/tmp//ccUduuqd.s", line 302: error: statement syntax

The problem is that genapi.cc hardcodes # as assembler comment
character, which isn't valid in general.

Instead, this patch uses ASM_COMMENT_START.

Bootstrapped without regressions on sparcv9-sun-solaris2.11,
amd64-pc-solaris2.11, and x86_64-pc-linux-gnu.

Ok for trunk?

        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2025-04-08  Rainer Orth  <r...@cebitec.uni-bielefeld.de>

        gcc/cobol:
        * genapi.cc: Include target.h.
        (section_label): Use ASM_COMMENT_START.
        (paragraph_label): Likewise.
        (parser_perform): Likewise.
        (internal_perform_through): Likewise.
        (hijack_for_development): Likewise.

# HG changeset patch
# Parent  e01495f7d62304ed87b39abf54ef8573b35849c8
cobol: Heed ASM_COMMENT_START

diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -34,6 +34,7 @@
 #include "tree-iterator.h"
 #include "stringpool.h"
 #include "diagnostic-core.h"
+#include "target.h"
 
 #include "../../libgcobol/ec.h"
 #include "../../libgcobol/common-defs.h"
@@ -2354,7 +2355,8 @@ section_label(struct cbl_proc_t *procedu
 
   cbl_label_t *label = procedure->label;
   // The _initialize_program section isn't relevant.
-  char *psz = xasprintf("# SECTION %s in %s (%ld)",
+  char *psz = xasprintf("%s SECTION %s in %s (%ld)",
+                        ASM_COMMENT_START,
                         label->name,
                         current_function->our_unmangled_name,
                         deconflictor);
@@ -2405,7 +2407,8 @@ paragraph_label(struct cbl_proc_t *proce
   
   char *psz1 = 
   xasprintf(
-          "# PARAGRAPH %s of %s in %s (%ld)",
+          "%s PARAGRAPH %s of %s in %s (%ld)",
+          ASM_COMMENT_START,
           para_name ? para_name: "" ,
           section_name ? section_name: "(null)" ,
           current_function->our_unmangled_name ? current_function->our_unmangled_name: "" ,
@@ -3003,7 +3006,8 @@ parser_perform(cbl_label_t *label, bool 
     para_name = label->name;
     sect_name = section_label->name;
     sprintf(ach,
-            "# PERFORM %s of %s of %s (%ld)",
+            "%s PERFORM %s of %s of %s (%ld)",
+            ASM_COMMENT_START,
             para_name,
             sect_name,
             program_name,
@@ -3015,7 +3019,8 @@ parser_perform(cbl_label_t *label, bool 
     {
     sect_name = label->name;
     sprintf(ach,
-            "# PERFORM %s of %s (%ld)",
+            "%s PERFORM %s of %s (%ld)",
+            ASM_COMMENT_START,
             sect_name,
             program_name,
             deconflictor);
@@ -3167,8 +3172,8 @@ internal_perform_through( cbl_label_t *p
   pseudo_return_push(proc2, return_addr);
 
   // Create the code that will launch the first procedure
-  gg_insert_into_assembler("# PERFORM %s THROUGH %s",
-                        proc_1->name, proc_2->name);
+  gg_insert_into_assembler("%s PERFORM %s THROUGH %s",
+                        ASM_COMMENT_START, proc_1->name, proc_2->name);
 
   if( !suppress_nexting )
     {
@@ -13612,7 +13617,7 @@ hijack_for_development(const char *funcn
   // Assume that funcname is lowercase with no hyphens
   enter_program_common(funcname, funcname);
   parser_display_literal("You have been hijacked by a program named \"dubner\"");
-  gg_insert_into_assembler("# HIJACKED DUBNER CODE START");
+  gg_insert_into_assembler("%s HIJACKED DUBNER CODE START", ASM_COMMENT_START);
 
   for(int i=0; i<10; i++)
     {
@@ -13625,7 +13630,7 @@ hijack_for_development(const char *funcn
             NULL_TREE);
     }
 
-  gg_insert_into_assembler("# HIJACKED DUBNER CODE END");
+  gg_insert_into_assembler("%s HIJACKED DUBNER CODE END", ASM_COMMENT_START);
   gg_return(0);
   }
 

Reply via email to