compiler: Accept numeric literals with leading zeroes.
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 25 Aug 2015 21:17:47 +0000 (21:17 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 25 Aug 2015 21:17:47 +0000 (21:17 +0000)
    When a numeric literal with leading zeroes was seen in the parser, it
    would only be accepted if it were a valid hex or octal literal.  Any
    invalid numeric literal would be split up into multiple tokens: the
    valid hex/octal literal followed by the rest of the characters.
    Instead, when scanning a numeric literal with leading zeroes, always
    accept the number and give an appropriate error if the accepted number
    does not fit in the expected base.

    Fixes golang/go#11532, golang/go#11533.

    Reviewed-on: https://go-review.googlesource.com/13791

From-SVN: r227193

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/lex.cc

index 86d163b1f52fcde891835cbe3d7d78ea9c6403ee..c30efd919ecee9575b784bca467b1897f2e6cfc9 100644 (file)
@@ -1,4 +1,4 @@
-14ca4b6130b9a7132d132f418e9ea283b3a52c08
+f97d579fa8431af5cfde9b0a48604caabfd09377
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 8de94c5114b726d6270c4e16e7a7a554d4b2a2b3..632a1c9e353ced3ee94255e76a1ce2fda7569cb3 100644 (file)
@@ -1047,7 +1047,7 @@ Lex::gather_number()
          pnum = p;
          while (p < pend)
            {
-             if (*p < '0' || *p > '7')
+             if (*p < '0' || *p > '9')
                break;
              ++p;
            }
@@ -1060,7 +1060,13 @@ Lex::gather_number()
          std::string s(pnum, p - pnum);
          mpz_t val;
          int r = mpz_init_set_str(val, s.c_str(), base);
-         go_assert(r == 0);
+          if (r != 0)
+            {
+              if (base == 8)
+                error_at(this->location(), "invalid octal literal");
+              else
+                error_at(this->location(), "invalid hex literal");
+            }
 
          if (neg)
            mpz_neg(val, val);