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 * 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 * 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