OpenJDK / code-tools / jcstress
changeset 397:794ae5fc5330
Chapter 0.a: Add initialization tests that check class headers and array lengths.
author | shade |
---|---|
date | Tue, 28 Mar 2017 13:41:44 +0200 |
parents | 1b0f8547b888 |
children | 2357daa047b7 |
files | jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter0aTestGenerator.java jcstress-test-gen/src/main/resources/init/X-ArrayInitClassTest.java.template jcstress-test-gen/src/main/resources/init/X-ArrayInitLengthTest.java.template jcstress-test-gen/src/main/resources/init/X-ArrayLargeInitClassTest.java.template jcstress-test-gen/src/main/resources/init/X-ArrayLargeInitLengthTest.java.template jcstress-test-gen/src/main/resources/init/X-FieldInitClassTest.java.template |
diffstat | 6 files changed, 314 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter0aTestGenerator.java Mon Mar 27 18:41:27 2017 +0200 +++ b/jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter0aTestGenerator.java Tue Mar 28 13:41:44 2017 +0200 @@ -63,6 +63,14 @@ new String[]{ "", "volatile", "final" } ); + + makeTests( + dest, + GeneratorUtils.readFromResource("/init/X-FieldInitClassTest.java.template"), + "initClass.fields", + new String[]{ "", "volatile" } + ); + makeTests( dest, GeneratorUtils.readFromResource("/tearing/X-FieldTearingTest.java.template"), @@ -100,6 +108,34 @@ makeTests( dest, + GeneratorUtils.readFromResource("/init/X-ArrayInitClassTest.java.template"), + "initClass.arrays.small", + new String[]{ "", "volatile" } + ); + + makeTests( + dest, + GeneratorUtils.readFromResource("/init/X-ArrayLargeInitClassTest.java.template"), + "initClass.arrays.large", + new String[]{ "", "volatile" } + ); + + makeTests( + dest, + GeneratorUtils.readFromResource("/init/X-ArrayInitLengthTest.java.template"), + "initLen.arrays.small", + new String[]{ "", "volatile" } + ); + + makeTests( + dest, + GeneratorUtils.readFromResource("/init/X-ArrayLargeInitLengthTest.java.template"), + "initLen.arrays.large", + new String[]{ "", "volatile" } + ); + + makeTests( + dest, GeneratorUtils.readFromResource("/accessAtomic/X-ArrayAtomicityTest.java.template"), "accessAtomic.arrays", new String[]{ "", "volatile" }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jcstress-test-gen/src/main/resources/init/X-ArrayInitClassTest.java.template Tue Mar 28 13:41:44 2017 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017, Red Hat Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package $package$; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.*; + +#warn + +/** + * Tests if fields initialization is visible via racy publication. + */ +@JCStressTest +@Outcome(id = "true", expect = Expect.ACCEPTABLE, desc = "Consistent class for object.") +@State +public class $name$ { + + $modifier$ Object arr; + + @Actor + public void actor1() { + arr = new $type$[4]; + } + + @Actor + public void actor2(Z_Result r) { + Object a = arr; + if (a == null) { + r.r1 = true; + } else { + r.r1 = (a.getClass() == $type$[].class); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jcstress-test-gen/src/main/resources/init/X-ArrayInitLengthTest.java.template Tue Mar 28 13:41:44 2017 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2017, Red Hat Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package $package$; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.*; + +#warn + +@JCStressTest +@Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Haven't seen yet.") +@Outcome(id = "4", expect = Expect.ACCEPTABLE, desc = "Seeing good length.") +@State +public class $name$ { + + $modifier$ Object arr; + + @Actor + public void actor1() { + arr = new $type$[4]; + } + + @Actor + public void actor2(I_Result r) { + Object a = arr; + if (a == null) { + r.r1 = 0; + } else { + r.r1 = (($type$[])a).length; + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jcstress-test-gen/src/main/resources/init/X-ArrayLargeInitClassTest.java.template Tue Mar 28 13:41:44 2017 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017, Red Hat Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package $package$; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.*; + +#warn + +@JCStressTest +@Outcome(id = "true", expect = Expect.ACCEPTABLE, desc = "Consistent class for object.") +@State +public class $name$ { + + $modifier$ Object arr; + + @Actor + public void actor1() { + arr = new $type$[2 * 1024 * 1024]; + } + + @Actor + public void actor2(Z_Result r) { + Object a = arr; + if (a == null) { + r.r1 = true; + } else { + r.r1 = (a.getClass() == $type$[].class); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jcstress-test-gen/src/main/resources/init/X-ArrayLargeInitLengthTest.java.template Tue Mar 28 13:41:44 2017 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package $package$; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.*; + +#warn + +@JCStressTest +@Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Haven't seen yet.") +@Outcome(id = "2097152", expect = Expect.ACCEPTABLE, desc = "Seeing good length.") +@State +public class $name$ { + + $modifier$ Object arr; + + @Actor + public void actor1() { + arr = new $type$[2 * 1024 * 1024]; + } + + @Actor + public void actor2(I_Result r) { + Object a = arr; + if (a == null) { + r.r1 = 0; + } else { + r.r1 = (($type$[])a).length; + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jcstress-test-gen/src/main/resources/init/X-FieldInitClassTest.java.template Tue Mar 28 13:41:44 2017 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017, Red Hat Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package $package$; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.*; + +#warn + +@JCStressTest +@Outcome(id = "true", expect = Expect.ACCEPTABLE, desc = "Consistent class for object.") +@State +public class $name$ { + + $modifier$ Object data; + + public static class Data {} + + @Actor + public void actor1() { + data = new Data(); + } + + @Actor + public void actor2(Z_Result r) { + Object d = this.data; + if (d == null) { + // Pretend we have seen the set value + r.r1 = true; + } else { + r.r1 = (d.getClass() == Data.class); + } + } + +}