aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2014-10-21 09:57:41 +0200
committerJan Beulich <jbeulich@suse.com>2014-10-21 09:57:41 +0200
commite74211b660791d29be21e11766c5b375f5df59b1 (patch)
tree2348e36d7e97c3601d9df062fcd971f066113cdf /gas
parent12e87fac5c760b04eed4f5a5948c2dfd6ec8f6d8 (diff)
downloadgdb-e74211b660791d29be21e11766c5b375f5df59b1.zip
gdb-e74211b660791d29be21e11766c5b375f5df59b1.tar.gz
gdb-e74211b660791d29be21e11766c5b375f5df59b1.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/read.c15
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/all/cond.l3
-rw-r--r--gas/testsuite/gas/all/cond.s11
5 files changed, 36 insertions, 7 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 60a0a6a..4f923ed 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/read.c b/gas/read.c
index 9fd0335..5472155 100644
--- 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_string, int insn ATTRIBUTE_UNUSED,
}
if (inquote)
as_warn (_("missing closing `%c'"), inquote);
- if (inescape)
+ if (inescape && !ignore_input ())
as_warn (_("stray `\\'"));
return s;
}
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index d504c4f..a79cd1c 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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.
diff --git a/gas/testsuite/gas/all/cond.l b/gas/testsuite/gas/all/cond.l
index 36f0066..af80a10 100644
--- 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
diff --git a/gas/testsuite/gas/all/cond.s b/gas/testsuite/gas/all/cond.s
index 164e055..f0bf67a 100644
--- 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