gas: don't ignore .linefile inside false conditionals
authorJan Beulich <jbeulich@suse.com>
Wed, 18 May 2022 07:37:00 +0000 (09:37 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 18 May 2022 07:37:00 +0000 (09:37 +0200)
When assembling code previously pre-processed by a C compiler, long
enough comments may have been collapsed into "# <line> <file>"
constructs. If we skip these, line numbers (and possibly even file
names) will be off / wrong in both diagnostics and debug info.

gas/cond.c
gas/testsuite/gas/all/cond-2.l [new file with mode: 0644]
gas/testsuite/gas/all/cond-2.s [new file with mode: 0644]
gas/testsuite/gas/all/gas.exp

index ee441e1230e1d61527cb6902439141cc2f2ae10b..27977dbf7b96bf12232edb7e53f2851dd17834d4 100644 (file)
@@ -525,6 +525,10 @@ ignore_input (void)
          || !strncasecmp (s, "endc", 4))
        return 0;
       break;
+    case 'l': case 'L':
+      if (!strncasecmp (s, "linefile", 8))
+       return 0;
+      break;
     }
 
   return (current_cframe != NULL) && (current_cframe->ignoring);
diff --git a/gas/testsuite/gas/all/cond-2.l b/gas/testsuite/gas/all/cond-2.l
new file mode 100644 (file)
index 0000000..189c0de
--- /dev/null
@@ -0,0 +1,12 @@
+# This should match the output of gas -al cond-2.s.
+.*: Assembler messages:
+.*:1005: Warning: line 5
+.*cond-2.s.*
+
+
+[      ]*[1-9][0-9]*[  ]+\.if[         ]+0[    ]*
+[      ]*[1-9][0-9]*[  ]+# 1003 "cond-2\.s"
+[      ]*[1-9][0-9]*[  ]+\.endif[      ]*
+[      ]*[1-9][0-9]*[  ]*
+[      ]*[1-9][0-9]*[  ]+\.warning[    ].*
+#pass
diff --git a/gas/testsuite/gas/all/cond-2.s b/gas/testsuite/gas/all/cond-2.s
new file mode 100644 (file)
index 0000000..5b8166c
--- /dev/null
@@ -0,0 +1,5 @@
+       .if 0
+# 1003 "cond-2.s"
+       .endif
+
+       .warning "line 5"
index ae7957b2ee014d1d52bd561746807c1e28b64a3b..1b87cf21216dee47eb2dac30f45e8fb53b108d7d 100644 (file)
@@ -461,6 +461,11 @@ if [is_elf_format] {
 
 run_dump_test quoted-sym-names
 
+# Targets where # is not a line comment character don't transform
+# "# <line> <file>" into .linefile (PR gas/29120).
+setup_xfail "tic30-*-*"
+run_list_test cond-2 "-al"
+
 run_list_test macro "-alm"
 
 run_list_test pr20312