Main.java revision 1a43dd78d054dbad8d7af9ba4829ea2f1cb70b53
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17// Note that $opt$ is a marker for the optimizing compiler to ensure 18// it does compile the method. 19 20public class Main { 21 public static void main(String[] args) { 22 Error error = null; 23 try { 24 $opt$TestInvokeStatic(); 25 } catch (Error e) { 26 error = e; 27 } 28 System.out.println(error); 29 30 $opt$TestInvokeNew(); 31 32 int result = $opt$TestInvokeIntParameter(42); 33 if (result != 42) { 34 throw new Error("Different value returned: " + result); 35 } 36 37 38 $opt$TestInvokeObjectParameter(new Object()); 39 40 Object a = new Object(); 41 Object b = $opt$TestInvokeObjectParameter(a); 42 if (a != b) { 43 throw new Error("Different object returned " + a + " " + b); 44 } 45 46 result = $opt$TestInvokeWith2Parameters(10, 9); 47 if (result != 1) { 48 throw new Error("Unexpected result: " + result); 49 } 50 51 result = $opt$TestInvokeWith3Parameters(10, 9, 1); 52 if (result != 0) { 53 throw new Error("Unexpected result: " + result); 54 } 55 56 result = $opt$TestInvokeWith5Parameters(10000, 1000, 100, 10, 1); 57 if (result != 8889) { 58 throw new Error("Unexpected result: " + result); 59 } 60 61 result = $opt$TestInvokeWith7Parameters(100, 6, 5, 4, 3, 2, 1); 62 if (result != 79) { 63 throw new Error("Unexpected result: " + result); 64 } 65 66 Main m = new Main(); 67 if (m.$opt$TestThisParameter(m) != m) { 68 throw new Error("Unexpected value returned"); 69 } 70 71 if (m.$opt$TestOtherParameter(new Main()) == m) { 72 throw new Error("Unexpected value returned"); 73 } 74 75 if (m.$opt$TestReturnNewObject(m) == m) { 76 throw new Error("Unexpected value returned"); 77 } 78 79 // Loop enough iterations to hope for a crash if no write barrier 80 // is emitted. 81 for (int j = 0; j < 3; j++) { 82 Main m1 = new Main(); 83 $opt$SetFieldInOldObject(m1); 84 for (int i = 0; i < 1000; ++i) { 85 Object o = new byte[1024]; 86 } 87 } 88 } 89 90 static int $opt$TestInvokeIntParameter(int param) { 91 return param; 92 } 93 94 static Object $opt$TestInvokeObjectParameter(Object a) { 95 forceGCStaticMethod(); 96 return a; 97 } 98 99 static int $opt$TestInvokeWith2Parameters(int a, int b) { 100 return a - b; 101 } 102 103 static int $opt$TestInvokeWith3Parameters(int a, int b, int c) { 104 return a - b - c; 105 } 106 107 static int $opt$TestInvokeWith5Parameters(int a, int b, int c, int d, int e) { 108 return a - b - c - d - e; 109 } 110 111 static int $opt$TestInvokeWith7Parameters(int a, int b, int c, int d, int e, int f, int g) { 112 return a - b - c - d - e - f - g; 113 } 114 115 Object $opt$TestThisParameter(Object other) { 116 forceGCStaticMethod(); 117 return other; 118 } 119 120 Object $opt$TestOtherParameter(Object other) { 121 forceGCStaticMethod(); 122 return other; 123 } 124 125 Object $opt$TestReturnNewObject(Object other) { 126 Object o = new Object(); 127 forceGCStaticMethod(); 128 return o; 129 } 130 131 public static void $opt$TestInvokeStatic() { 132 printStaticMethod(); 133 printStaticMethodWith2Args(1, 2); 134 printStaticMethodWith5Args(1, 2, 3, 4, 5); 135 printStaticMethodWith7Args(1, 2, 3, 4, 5, 6, 7); 136 forceGCStaticMethod(); 137 throwStaticMethod(); 138 } 139 140 public static void $opt$TestInvokeNew() { 141 Object o = new Object(); 142 forceGCStaticMethod(); 143 printStaticMethodWithObjectArg(o); 144 forceGCStaticMethod(); 145 } 146 147 public static void printStaticMethod() { 148 System.out.println("In static method"); 149 } 150 151 public static void printStaticMethodWith2Args(int a, int b) { 152 System.out.println("In static method with 2 args " + a + " " + b); 153 } 154 155 public static void printStaticMethodWith5Args(int a, int b, int c, int d, int e) { 156 System.out.println("In static method with 5 args " 157 + a + " " + b + " " + c + " " + d + " " + e); 158 } 159 160 public static void printStaticMethodWith7Args(int a, int b, int c, int d, int e, int f, int g) { 161 System.out.println("In static method with 7 args " 162 + a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g); 163 } 164 165 public static void printStaticMethodWithObjectArg(Object a) { 166 System.out.println("In static method with object arg " + a.getClass()); 167 } 168 169 public static void forceGCStaticMethod() { 170 Runtime.getRuntime().gc(); 171 Runtime.getRuntime().gc(); 172 Runtime.getRuntime().gc(); 173 Runtime.getRuntime().gc(); 174 Runtime.getRuntime().gc(); 175 Runtime.getRuntime().gc(); 176 System.out.println("Forced GC"); 177 } 178 179 public static void throwStaticMethod() { 180 throw new Error("Error"); 181 } 182 183 public static void $opt$SetFieldInOldObject(Main m) { 184 m.o = new Main(); 185 } 186 187 Object o; 188} 189