aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-04-18 04:11:22 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-04-18 04:11:22 +0000
commit5c727cf6259e7f71185fb647b52cbe3907cc4774 (patch)
treeb8471eb63988c582ac946e04f2ad644d953b4884 /gcc
parent5a58e967b526eba3d9b850cd7bc76dcc580bf708 (diff)
downloadgcc-5c727cf6259e7f71185fb647b52cbe3907cc4774.zip
gcc-5c727cf6259e7f71185fb647b52cbe3907cc4774.tar.gz
gcc-5c727cf6259e7f71185fb647b52cbe3907cc4774.tar.bz2
re PR go/90110 (libgo fails to build against glibc 2.19)
PR go/90110 compiler: use temporary to avoid early destruction The code was passing a substr directly to strtol, and then checking the *end value returned by strtol. But the substr could be destroyed as soon as strtol returns, making the test of *end invalid. Also fix an incorrect test of the string index rather than the value. Fixes https://gcc.gnu.org/PR90110 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/172663 From-SVN: r270434
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/import.cc5
2 files changed, 4 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 381d791..6007b4f 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-20010e494f46d8fd58cfd372093b059578d3379a
+ecbd6562aff604b9559f63d714e922a0c9c2a77f
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/import.cc b/gcc/go/gofrontend/import.cc
index d783043..c1982eb 100644
--- a/gcc/go/gofrontend/import.cc
+++ b/gcc/go/gofrontend/import.cc
@@ -1478,8 +1478,9 @@ Import_function_body::read_type()
this->off_ = i + 1;
char *end;
- long val = strtol(this->body_.substr(start, i - start).c_str(), &end, 10);
- if (*end != '\0' || i > 0x7fffffff)
+ std::string num = this->body_.substr(start, i - start);
+ long val = strtol(num.c_str(), &end, 10);
+ if (*end != '\0' || val > 0x7fffffff)
{
if (!this->saw_error_)
go_error_at(this->location(),