gas: avoid bogus warnings in false branches of conditional
authorJan Beulich <jbeulich@novell.com>
Tue, 21 Oct 2014 07:57:41 +0000 (09:57 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 21 Oct 2014 07:57:41 +0000 (09:57 +0200)
The construct being added to the cond.s test case otherwise triggered
both the "missing closing ..." and the "stray ..." (twice) warnings in
_find_end_of_line(). As that code fragments suggests, this is needed to
support (include) files that can be used for both assembler .include
and compiler #include directives.

gas/ChangeLog
gas/read.c
gas/testsuite/ChangeLog
gas/testsuite/gas/all/cond.l
gas/testsuite/gas/all/cond.s

index 60a0a6a..4f923ed 100644 (file)
@@ -1,5 +1,13 @@
 2014-10-21  Jan Beulich  <jbeulich@suse.com>
 
+       * read.c (HANDLE_CONDITIONAL_ASSEMBLY): New parameter "num_read".
+       (read_a_source_file): Adjust HANDLE_CONDITIONAL_ASSEMBLY
+       invocations.
+       (_find_end_of_line): Don't issue "stray '\\'" warning when in
+       false branch of conditional.
+
+2014-10-21  Jan Beulich  <jbeulich@suse.com>
+
        * config/tc-aarch64.c (output_operand_error_record): Move down
        assertion of idx being non-negative. Use local variables when
        available.
index 9fd0335..5472155 100644 (file)
@@ -557,10 +557,11 @@ pobegin (void)
   cfi_pop_insert ();
 }
 \f
-#define HANDLE_CONDITIONAL_ASSEMBLY()                                  \
+#define HANDLE_CONDITIONAL_ASSEMBLY(num_read)                          \
   if (ignore_input ())                                                 \
     {                                                                  \
-      char *eol = find_end_of_line (input_line_pointer, flag_m68k_mri); \
+      char *eol = find_end_of_line (input_line_pointer - (num_read),   \
+                                   flag_m68k_mri);                     \
       input_line_pointer = (input_line_pointer <= buffer_limit         \
                            && eol >= buffer_limit)                     \
                           ? buffer_limit                               \
@@ -834,7 +835,7 @@ read_a_source_file (char *name)
                      char *line_start = input_line_pointer;
                      int mri_line_macro;
 
-                     HANDLE_CONDITIONAL_ASSEMBLY ();
+                     HANDLE_CONDITIONAL_ASSEMBLY (0);
 
                      c = get_symbol_end ();
 
@@ -905,7 +906,7 @@ read_a_source_file (char *name)
          if (is_name_beginner (c))
            {
              /* Want user-defined label or pseudo/opcode.  */
-             HANDLE_CONDITIONAL_ASSEMBLY ();
+             HANDLE_CONDITIONAL_ASSEMBLY (1);
 
              s = --input_line_pointer;
              c = get_symbol_end ();    /* name's delimiter.  */
@@ -1119,7 +1120,7 @@ read_a_source_file (char *name)
              /* local label  ("4:")  */
              char *backup = input_line_pointer;
 
-             HANDLE_CONDITIONAL_ASSEMBLY ();
+             HANDLE_CONDITIONAL_ASSEMBLY (1);
 
              temp = c - '0';
 
@@ -1266,7 +1267,7 @@ read_a_source_file (char *name)
              continue;
            }
 
-         HANDLE_CONDITIONAL_ASSEMBLY ();
+         HANDLE_CONDITIONAL_ASSEMBLY (1);
 
 #ifdef tc_unrecognized_line
          if (tc_unrecognized_line (c))
@@ -6138,7 +6139,7 @@ _find_end_of_line (char *s, int mri_string, int insn ATTRIBUTE_UNUSED,
     }
   if (inquote)
     as_warn (_("missing closing `%c'"), inquote);
-  if (inescape)
+  if (inescape && !ignore_input ())
     as_warn (_("stray `\\'"));
   return s;
 }
index d504c4f..a79cd1c 100644 (file)
@@ -1,5 +1,11 @@
 2014-10-21  Jan Beulich  <jbeulich@suse.com>
 
+       * gas/gas/all/cond.s: Also test processing of leading double
+       quote and trailing backslash in false branch of conditional.
+       * gas/gas/all/cond.l: Adjust accordingly.
+
+2014-10-21  Jan Beulich  <jbeulich@suse.com>
+
        * gas/ppc/power8.s: Test msgclr and msgsnd.
        * gas/ppc/power8.d: Adjust accordingly.
 
index 36f0066..af80a10 100644 (file)
@@ -67,5 +67,8 @@
 [      ]*[1-9][0-9]*[  ]+[0-9a-f]+[048c] 0[0C] ?00 ?00 ?0[0C][         ]+m[    ]+12,[  ]*13[   ]*
 [      ]*[1-9][0-9]*[  ]+0[0D] ?00 ?00 ?0[0D][         ]*
 [      ]*[1-9][0-9]*[  ]+
+[      ]*[1-9][0-9]*[  ]+\.if[         ]+0[    ]*
+[      ]*[1-9][0-9]*[  ]+\.endif[      ]*
+[      ]*[1-9][0-9]*[  ]+
 [      ]*[1-9][0-9]*[  ]+.*\.p2align 5,0
 #pass
index 164e055..f0bf67a 100644 (file)
        m       11,
        m       12, 13
 
+       .if 0
+#define x "m" \
+       (x)
+#define y \
+       "m" \
+       (y)
+#define z \
+       ((z) \
+        + 1)
+       .endif
+
        .p2align 5,0