aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2017-09-18 22:35:40 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-09-18 22:35:40 +0000
commitd2b4864f55092b342dae9f2d147939f7ce08dfdc (patch)
treef71c42d01806bac6a3b23bd42b06acbf5461b06c /libgo
parent72d4fc12c068f59bc865ac8dc423be07a2794f6b (diff)
parent4d034b52593c40db9ceeaa531eefdb628fa29ce5 (diff)
downloadgcc-d2b4864f55092b342dae9f2d147939f7ce08dfdc.zip
gcc-d2b4864f55092b342dae9f2d147939f7ce08dfdc.tar.gz
gcc-d2b4864f55092b342dae9f2d147939f7ce08dfdc.tar.bz2
Merge from trunk revision 252954.
From-SVN: r252955
Diffstat (limited to 'libgo')
-rw-r--r--libgo/runtime/go-strslice.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libgo/runtime/go-strslice.c b/libgo/runtime/go-strslice.c
index 0e897812..d51c249 100644
--- a/libgo/runtime/go-strslice.c
+++ b/libgo/runtime/go-strslice.c
@@ -18,10 +18,13 @@ __go_string_slice (String s, intgo start, intgo end)
if (start > len || end < start || end > len)
runtime_panicstring ("string index out of bounds");
ret.len = end - start;
- // If the length of the new string is zero, don't adjust the str
- // field. This ensures that we don't create a pointer to the next
- // memory block, and thus keep it live unnecessarily.
- if (ret.len > 0)
+ // If the length of the new string is zero, the str field doesn't
+ // matter, so just set it to nil. This avoids the problem of
+ // s.str + start pointing just past the end of the string,
+ // which may keep the next memory block alive unnecessarily.
+ if (ret.len == 0)
+ ret.str = nil;
+ else
ret.str = s.str + start;
return ret;
}