OSDN Git Service

2003-09-21 Ralph Loader <suckfish@ihug.co.nz>
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Sep 2003 08:17:49 +0000 (08:17 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Sep 2003 08:17:49 +0000 (08:17 +0000)
        PR java/12350:
        * java/lang/StringBuffer.java (substring): Fix handling of shared
        flag.

2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>

        PR java/12350
        * libjava.lang/PR12350.java: New file.
        * libjava.lang/PR12350.out: New file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71651 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/StringBuffer.java
libjava/testsuite/ChangeLog
libjava/testsuite/libjava.lang/PR12350.java [new file with mode: 0644]
libjava/testsuite/libjava.lang/PR12350.out [new file with mode: 0644]

index da57fc0..ac57998 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>
+
+       PR java/12350:
+       * java/lang/StringBuffer.java (substring): Fix handling of shared flag.
+
 2003-09-22  Michael Koch  <konqueror@gmx.de>
 
        * jni.cc (_Jv_LookupJNIMethod): Remove workaround that should hide a
index fac7892..a7c2590 100644 (file)
@@ -564,8 +564,9 @@ public final class StringBuffer implements Serializable, CharSequence
       throw new StringIndexOutOfBoundsException();
     if (len == 0)
       return "";
-    // Share the char[] unless 3/4 empty.
-    shared = (len << 2) >= value.length;
+    // Share unless substring is smaller than 1/4 of the buffer.
+    if ((len << 2) >= value.length)
+      shared = true;
     // Package constructor avoids an array copy.
     return new String(value, beginIndex, len, shared);
   }
index 58226a1..eccde2a 100644 (file)
@@ -1,3 +1,9 @@
+2003-09-21  Ralph Loader  <suckfish@ihug.co.nz>
+
+       PR java/12350
+       * libjava.lang/PR12350.java: New file.
+       * libjava.lang/PR12350.out: New file.
+
 2003-09-17  Ranjit Mathew  <rmathew@hotmail.com>
 
        PR java/9577
diff --git a/libjava/testsuite/libjava.lang/PR12350.java b/libjava/testsuite/libjava.lang/PR12350.java
new file mode 100644 (file)
index 0000000..ded8856
--- /dev/null
@@ -0,0 +1,20 @@
+public class PR12350
+{
+    static public void main (String[] ignored) throws Throwable
+    {
+       StringBuffer b = new StringBuffer ("Good string.  More than 16 chars.");
+
+       // Should cause sharing.
+       String s = b.toString();
+
+       // Take a char by char unshared copy of s.
+       String t = new String (s.toCharArray());
+
+       b.substring (0, 4);     // BUG: Clears shared flag.
+       b.replace (0, 4, "Bad "); // Modifies shared data.
+
+       System.out.println (s);
+       assert s.equals (t);
+    }
+
+}
diff --git a/libjava/testsuite/libjava.lang/PR12350.out b/libjava/testsuite/libjava.lang/PR12350.out
new file mode 100644 (file)
index 0000000..61dc0a6
--- /dev/null
@@ -0,0 +1 @@
+Good string.  More than 16 chars.