1 /* 2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 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 26 * @bug 8140650 27 * @summary Method::is_accessor should cover getters and setters for all types 28 * @modules java.base/jdk.internal.misc 29 * @library /test/lib 30 * @requires vm.flagless 31 * 32 * @run driver compiler.inlining.InlineAccessors 33 */ 34 35 package compiler.inlining; 36 37 import jdk.test.lib.process.OutputAnalyzer; 38 import jdk.test.lib.process.ProcessTools; 39 40 public class InlineAccessors { 41 public static void main(String[] args) throws Exception { 42 // try some sanity checks first 43 doTest(); 44 45 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( 46 "-XX:+IgnoreUnrecognizedVMOptions", "-showversion", 47 "-server", "-XX:-TieredCompilation", "-Xbatch", 48 "-XX:+PrintCompilation", "-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining", 49 Launcher.class.getName()); 50 51 OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); 52 53 analyzer.shouldHaveExitValue(0); 54 55 // The test is applicable only to C2 (present in Server VM). 56 if (analyzer.getStderr().contains("Server VM")) { 57 analyzer.shouldContain("InlineAccessors::setBool (6 bytes) accessor"); 58 analyzer.shouldContain("InlineAccessors::setByte (6 bytes) accessor"); 59 analyzer.shouldContain("InlineAccessors::setChar (6 bytes) accessor"); 60 analyzer.shouldContain("InlineAccessors::setShort (6 bytes) accessor"); 61 analyzer.shouldContain("InlineAccessors::setInt (6 bytes) accessor"); 62 analyzer.shouldContain("InlineAccessors::setFloat (6 bytes) accessor"); 63 analyzer.shouldContain("InlineAccessors::setLong (6 bytes) accessor"); 64 analyzer.shouldContain("InlineAccessors::setDouble (6 bytes) accessor"); 65 analyzer.shouldContain("InlineAccessors::setObject (6 bytes) accessor"); 66 analyzer.shouldContain("InlineAccessors::setArray (6 bytes) accessor"); 67 68 analyzer.shouldContain("InlineAccessors::getBool (5 bytes) accessor"); 69 analyzer.shouldContain("InlineAccessors::getByte (5 bytes) accessor"); 70 analyzer.shouldContain("InlineAccessors::getChar (5 bytes) accessor"); 71 analyzer.shouldContain("InlineAccessors::getShort (5 bytes) accessor"); 72 analyzer.shouldContain("InlineAccessors::getInt (5 bytes) accessor"); 73 analyzer.shouldContain("InlineAccessors::getFloat (5 bytes) accessor"); 74 analyzer.shouldContain("InlineAccessors::getLong (5 bytes) accessor"); 75 analyzer.shouldContain("InlineAccessors::getDouble (5 bytes) accessor"); 76 analyzer.shouldContain("InlineAccessors::getObject (5 bytes) accessor"); 77 analyzer.shouldContain("InlineAccessors::getArray (5 bytes) accessor"); 78 } 79 } 80 81 boolean bool; 82 byte b; 83 char c; 84 short s; 85 int i; 86 float f; 87 long l; 88 double d; 89 Object o; 90 Object[] a; 91 92 public void setBool(boolean v) { bool = v; } 93 public void setByte(byte v) { b = v; } 94 public void setChar(char v) { c = v; } 95 public void setShort(short v) { s = v; } 96 public void setInt(int v) { i = v; } 97 public void setFloat(float v) { f = v; } 98 public void setLong(long v) { l = v; } 99 public void setDouble(double v) { d = v; } 100 public void setObject(Object v) { o = v; } 101 public void setArray(Object[] v) { a = v; } 102 103 public boolean getBool() { return bool; } 104 public byte getByte() { return b; } 105 public char getChar() { return c; } 106 public short getShort() { return s; } 107 public int getInt() { return i; } 108 public float getFloat() { return f; } 109 public long getLong() { return l; } 110 public double getDouble() { return d; } 111 public Object getObject() { return o; } 112 public Object[] getArray() { return a; } 113 114 static void doTest() { 115 InlineAccessors o = new InlineAccessors(); 116 o.setBool(false); 117 o.setByte((byte)0); 118 o.setChar('a'); 119 o.setShort((short)0); 120 o.setInt(0); 121 o.setFloat(0F); 122 o.setLong(0L); 123 o.setDouble(0D); 124 o.setObject(new Object()); 125 o.setArray(new Object[1]); 126 127 o.getBool(); 128 o.getByte(); 129 o.getChar(); 130 o.getShort(); 131 o.getInt(); 132 o.getFloat(); 133 o.getLong(); 134 o.getDouble(); 135 o.getObject(); 136 o.getArray(); 137 } 138 139 static class Launcher { 140 public static void main(String[] args) throws Exception { 141 for (int c = 0; c < 20_000; c++) { 142 doTest(); 143 } 144 } 145 } 146 }