12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test TestCompilerDirectivesCompatibilityBase
26 * @bug 8137167
27 * @library /testlibrary /test/lib
28 * @modules java.base/sun.misc
29 * java.compiler
30 * java.management
31 * @build jdk.test.lib.*
32 * @build jdk.test.lib.dcmd.*
33 * @build sun.hotspot.WhiteBox
34 * @run main ClassFileInstaller sun.hotspot.WhiteBox
35 * sun.hotspot.WhiteBox$WhiteBoxPermission
36 * @run testng/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityBase
37 * @summary Test compiler control compatibility with compile command
38 */
39
40 import jdk.test.lib.dcmd.CommandExecutor;
41 import jdk.test.lib.dcmd.JMXExecutor;
42
43 import org.testng.annotations.Test;
44 import org.testng.Assert;
45
46 import sun.hotspot.WhiteBox;
47
48 import java.io.BufferedReader;
49 import java.io.File;
50 import java.io.StringReader;
51 import java.lang.reflect.Method;
52 import java.util.Objects;
53
54 public class TestCompilerDirectivesCompatibilityBase {
55
56 public static final WhiteBox WB = WhiteBox.getWhiteBox();
57 public static String control_on, control_off;
58 Method method, nomatch;
59
60 public void run(CommandExecutor executor) throws Exception {
61
62 control_on = System.getProperty("test.src", ".") + File.separator + "control_on.txt";
63 control_off = System.getProperty("test.src", ".") + File.separator + "control_off.txt";
64 method = getMethod(TestCompilerDirectivesCompatibilityBase.class, "helper");
65 nomatch = getMethod(TestCompilerDirectivesCompatibilityBase.class, "another");
66
67 testCompatibility(executor);
68 }
69
70 public void testCompatibility(CommandExecutor executor) throws Exception {
71
72 // Call all validation twice to catch error when overwriting a directive
73 // Flag is default off
74 expect(!WB.getBooleanVMFlag("PrintAssembly"));
75 expect(!WB.shouldPrintAssembly(method));
76 expect(!WB.shouldPrintAssembly(nomatch));
77 expect(!WB.shouldPrintAssembly(method));
78 expect(!WB.shouldPrintAssembly(nomatch));
79
80 // load directives that turn it on
81 executor.execute("Compiler.directives_add " + control_on);
82 expect(WB.shouldPrintAssembly(method));
83 expect(!WB.shouldPrintAssembly(nomatch));
84 expect(WB.shouldPrintAssembly(method));
85 expect(!WB.shouldPrintAssembly(nomatch));
86
87 // remove and see that it is true again
88 executor.execute("Compiler.directives_remove");
89 expect(!WB.shouldPrintAssembly(method));
90 expect(!WB.shouldPrintAssembly(nomatch));
91 expect(!WB.shouldPrintAssembly(method));
92 expect(!WB.shouldPrintAssembly(nomatch));
93 }
94
95 public void expect(boolean test) throws Exception {
96 if (!test) {
97 throw new Exception("Test failed");
98 }
99 }
100
101 public void expect(boolean test, String msg) throws Exception {
102 if (!test) {
103 throw new Exception(msg);
104 }
105 }
106
107 @Test
108 public void jmx() throws Exception {
109 run(new JMXExecutor());
110 }
111
112 public void helper() {
|
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test TestCompilerDirectivesCompatibilityBase
26 * @bug 8137167
27 * @library /testlibrary /test/lib
28 * @modules java.base/sun.misc
29 * java.compiler
30 * java.management
31 * @build jdk.test.lib.*
32 * jdk.test.lib.dcmd.*
33 * sun.hotspot.WhiteBox
34 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
35 * sun.hotspot.WhiteBox$WhiteBoxPermission
36 * @run testng/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityBase
37 * @summary Test compiler control compatibility with compile command
38 */
39
40 import jdk.test.lib.dcmd.CommandExecutor;
41 import jdk.test.lib.dcmd.JMXExecutor;
42
43 import org.testng.annotations.Test;
44 import org.testng.Assert;
45
46 import sun.hotspot.WhiteBox;
47
48 import java.io.BufferedReader;
49 import java.io.File;
50 import java.io.StringReader;
51 import java.lang.reflect.Method;
52 import java.util.Objects;
53
54 public class TestCompilerDirectivesCompatibilityBase {
55
56 public static final WhiteBox WB = WhiteBox.getWhiteBox();
57 public static String control_on, control_off;
58 Method method, nomatch;
59
60 public void run(CommandExecutor executor) throws Exception {
61
62 control_on = System.getProperty("test.src", ".") + File.separator + "control_on.txt";
63 control_off = System.getProperty("test.src", ".") + File.separator + "control_off.txt";
64 method = getMethod(TestCompilerDirectivesCompatibilityBase.class, "helper");
65 nomatch = getMethod(TestCompilerDirectivesCompatibilityBase.class, "another");
66
67 final int COMPLEVEL_SIMPLE = 1;
68 final int COMPLEVEL_FULL = 4;
69
70 if (WB.hasC1Compiler()) {
71 testCompatibility(executor, COMPLEVEL_SIMPLE);
72 }
73 if (WB.hasC2Compiler()) {
74 testCompatibility(executor, COMPLEVEL_FULL);
75 }
76 }
77
78 public void testCompatibility(CommandExecutor executor, int comp_level) throws Exception {
79
80 // Call all validation twice to catch error when overwriting a directive
81 // Flag is default off
82 expect(!WB.getBooleanVMFlag("PrintAssembly"));
83 expect(!WB.shouldPrintAssembly(method, comp_level));
84 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
85 expect(!WB.shouldPrintAssembly(method, comp_level));
86 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
87
88 // load directives that turn it on
89 executor.execute("Compiler.directives_add " + control_on);
90 expect(WB.shouldPrintAssembly(method, comp_level));
91 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
92 expect(WB.shouldPrintAssembly(method, comp_level));
93 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
94
95 // remove and see that it is true again
96 executor.execute("Compiler.directives_remove");
97 expect(!WB.shouldPrintAssembly(method, comp_level));
98 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
99 expect(!WB.shouldPrintAssembly(method, comp_level));
100 expect(!WB.shouldPrintAssembly(nomatch, comp_level));
101 }
102
103 public void expect(boolean test) throws Exception {
104 if (!test) {
105 throw new Exception("Test failed");
106 }
107 }
108
109 public void expect(boolean test, String msg) throws Exception {
110 if (!test) {
111 throw new Exception(msg);
112 }
113 }
114
115 @Test
116 public void jmx() throws Exception {
117 run(new JMXExecutor());
118 }
119
120 public void helper() {
|