* expr.c (operand): Check more correctly that there is no advance
[deliverable/binutils-gdb.git] / gas / expr.c
index 6d99f1673ba5e1ba5d083e0537463369a04a0df6..3408f71d9f69b10f15f56a831dd266a893f9ff34 100644 (file)
@@ -64,6 +64,7 @@ symbolS *
 make_expr_symbol (expressionP)
      expressionS *expressionP;
 {
+  expressionS zero;
   const char *fake;
   symbolS *symbolP;
   struct expr_symbol_line *n;
@@ -72,6 +73,22 @@ make_expr_symbol (expressionP)
       && expressionP->X_add_number == 0)
     return expressionP->X_add_symbol;
 
+  if (expressionP->X_op == O_big)
+    {
+      /* This won't work, because the actual value is stored in
+         generic_floating_point_number or generic_bignum, and we are
+         going to lose it if we haven't already.  */
+      if (expressionP->X_add_number > 0)
+       as_bad (_("bignum invalid; zero assumed"));
+      else
+       as_bad (_("floating point number invalid; zero assumed"));
+      zero.X_op = O_constant;
+      zero.X_add_number = 0;
+      zero.X_unsigned = 0;
+      clean_up_expression (&zero);
+      expressionP = &zero;
+    }
+
   fake = FAKE_LABEL_NAME;
 
   /* Putting constant symbols in absolute_section rather than
@@ -907,7 +924,7 @@ operand (expressionP)
                  {
                  case 0:
                  case ERROR_EXPONENT_OVERFLOW:
-                   if (*cp == 'f' || *cp == 'b')
+                   if (cp == input_line_pointer + 1)
                      /* looks like a difference expression */
                      goto is_0f_label;
                    else
This page took 0.025282 seconds and 4 git commands to generate.