summaryrefslogtreecommitdiffstats
path: root/tests/bugs/java5/arrayCloning/C.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bugs/java5/arrayCloning/C.java')
-rw-r--r--tests/bugs/java5/arrayCloning/C.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/bugs/java5/arrayCloning/C.java b/tests/bugs/java5/arrayCloning/C.java
new file mode 100644
index 000000000..8886906f5
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/C.java
@@ -0,0 +1,41 @@
+import java.lang.reflect.*;
+
+class C {
+
+ public static B.D[] arr = new B.D[5];
+
+ public static void main(String[]argv) {
+ arr[0] = new B.D(42);
+ arr[1] = new B.D(22);
+ arr[2] = new B.D(46);
+ arr[3] = new B.D(50);
+ arr[4] = new B.D(54);
+
+ B.D[] arr2 = arr.clone();
+
+
+ // Check the clone is OK
+ if (arr2[0].i!=42) throw new RuntimeException("Call that a clone 0");
+ if (arr2[1].i!=22) throw new RuntimeException("Call that a clone 1");
+ if (arr2[2].i!=46) throw new RuntimeException("Call that a clone 2");
+ if (arr2[3].i!=50) throw new RuntimeException("Call that a clone 3");
+ if (arr2[4].i!=54) throw new RuntimeException("Call that a clone 4");
+ System.err.println("Clone OK - attempting value manipulation");
+
+ // Change the clone, check the original is OK
+ arr2[2] = new B.D(1);
+ if (arr[2].i == 1) throw new RuntimeException("Shouldnt have affected original");
+ if (arr2[2].i != 1) throw new RuntimeException("Should have affected clone");
+
+
+ System.err.println("Clone OK - finished");
+ }
+}
+
+
+class B {
+ public static class D {
+ public int i;
+ D(int x) { i=x;}
+ }
+}