This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] gas: avoid bogus warnings in false branches of conditional


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/
2014-10-20  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.

gas/testsuite/
2014-10-20  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.

--- a/gas/read.c
+++ b/gas/read.c
@@ -557,10 +557,11 @@ pobegin (void)
   cfi_pop_insert ();
 }
 
-#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_stri
     }
   if (inquote)
     as_warn (_("missing closing `%c'"), inquote);
-  if (inescape)
+  if (inescape && !ignore_input ())
     as_warn (_("stray `\\'"));
   return s;
 }
--- a/gas/testsuite/gas/all/cond.l
+++ b/gas/testsuite/gas/all/cond.l
@@ -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
--- a/gas/testsuite/gas/all/cond.s
+++ b/gas/testsuite/gas/all/cond.s
@@ -89,4 +89,15 @@
 	m	11,
 	m	12, 13
 
+	.if 0
+#define x "m" \
+	(x)
+#define y \
+	"m" \
+	(y)
+#define z \
+	((z) \
+	 + 1)
+	.endif
+
 	.p2align 5,0



Attachment: binutils-master-conditional-off.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]