This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
gas/expr.c: 0b vs 0b0 vs 00b
- From: DJ Delorie <dj at redhat dot com>
- To: binutils at sourceware dot org
- Date: Fri, 7 Aug 2015 01:39:34 -0400
- Subject: gas/expr.c: 0b vs 0b0 vs 00b
- Authentication-results: sourceware.org; auth=none
For targets with both NUMBERS_WITH_SUFFIX and LOCAL_LABELS_FB, there
is a parse ambiquity between various binary constants:
0b backward reference
1b binary value, suffix
0b1 binary value, prefix
The third will be parsed as 0b followed by "junk". This patch checks
for 0b followed by further binary digits and bypasses the b-as-suffix
rule.
I don't think a generic test case would work, since it would have to
test expressions that are only valid on some targets. Would one
target's test suffice, or should the test be duplicated across many
targets?
diff --git a/gas/expr.c b/gas/expr.c
index 106f06d..2237c02 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -854,7 +854,8 @@ operand (expressionS *expressionP, enum expr_mode mode)
/* Fall through. */
case 'B':
input_line_pointer++;
- if (flag_m68k_mri || NUMBERS_WITH_SUFFIX)
+ if ((flag_m68k_mri || NUMBERS_WITH_SUFFIX)
+ && (input_line_pointer[0] != '0' && input_line_pointer[0] != '1'))
goto default_case;
integer_constant (2, expressionP);
break;