Fix the RX assembler so that it can handle escaped double quote characters, ie: \"
authorOleg Endo <olegendo@gcc.gnu.org>
Mon, 22 Jan 2018 14:31:10 +0000 (14:31 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 22 Jan 2018 14:31:10 +0000 (14:31 +0000)
PR 22737
* config/tc-rx.c (rx_start_line): Handle escaped double-quote character.
* testsuite/gas/rx/pr22737.s: New test.
* testsuite/gas/rx/pr22737.d: Likewise.
* testsuite/gas/rx/rx.exp: Run the new test.

gas/ChangeLog
gas/config/tc-rx.c
gas/testsuite/gas/rx/pr22737.d [new file with mode: 0644]
gas/testsuite/gas/rx/pr22737.s [new file with mode: 0644]
gas/testsuite/gas/rx/rx.exp

index 001d30dec47ed95e04f1fc3aeea394499584fae2..7e81c3eaebe5ce625add3a1819246642320fecb5 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR 22737
+       * config/tc-rx.c (rx_start_line): Handle escaped double-quote character.
+       * testsuite/gas/rx/pr22737.s: New test.
+       * testsuite/gas/rx/pr22737.d: Likewise.
+       * testsuite/gas/rx/rx.exp: Run the new test.
+
 2018-01-19  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * config/tc-arm.c (ToC macro): Remove spurious comment.
index 8e49ddd5274714ce91814b4ec4a969d6e485ff8f..6c8befe5eae066bd06e64e7f59af99464c02a032 100644 (file)
@@ -2681,6 +2681,7 @@ rx_start_line (void)
   int in_single_quote = 0;
   int done = 0;
   char * p = input_line_pointer;
+  char prev_char = 0;
 
   /* Scan the line looking for question marks.  Skip past quote enclosed regions.  */
   do
@@ -2693,7 +2694,9 @@ rx_start_line (void)
          break;
 
        case '"':
-         in_double_quote = ! in_double_quote;
+         /* Handle escaped double quote \" inside a string.  */
+         if (prev_char != '\\')
+           in_double_quote = ! in_double_quote;
          break;
 
        case '\'':
@@ -2722,7 +2725,7 @@ rx_start_line (void)
          break;
        }
 
-      p ++;
+      prev_char = *p++;
     }
   while (! done);
 }
diff --git a/gas/testsuite/gas/rx/pr22737.d b/gas/testsuite/gas/rx/pr22737.d
new file mode 100644 (file)
index 0000000..3705408
--- /dev/null
@@ -0,0 +1,15 @@
+#objdump: -dr
+
+dump.o:     file format elf32-rx-le
+
+
+Disassembly of section .*:
+
+00000000 <.*>:
+   0:  ff 16.*
+   2:  c8 1f 68 22.*
+   6:  d0 64.*
+   8:  a0 3f.*
+   a:  3a e1 4f.*
+   d:  da 0e 8c b6 c6 9c.*
+.*
diff --git a/gas/testsuite/gas/rx/pr22737.s b/gas/testsuite/gas/rx/pr22737.s
new file mode 100644 (file)
index 0000000..74b29f0
--- /dev/null
@@ -0,0 +1 @@
+.ascii "\377\026\310\037h\"\320d\240?:\341O\332\016\214\266\306\234."
index d8cca78f9831ecf0810599951cca9f5076d5157c..e6d21dda89de82768f8ed1e142b66ae61647785a 100644 (file)
@@ -35,3 +35,4 @@ foreach test [lsort [glob $srcdir/$subdir/*.sm]] {
 run_dump_test "rx-asm-good"
 # run_list_test "rx-asm-bad" "" "Generation of error messages with bogus Renesas assembler directives"
 run_dump_test "pr19665"
+run_dump_test "pr22737"