/*
* Copyright ( C ) 2015 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
public class Main extends UnresolvedSuperClass {
/// CHECK-START: void Main.callInvokeUnresolvedStatic() register (before)
/// CHECK: InvokeUnresolved invoke_type:static
static public void callInvokeUnresolvedStatic() {
UnresolvedClass.staticMethod();
}
/// CHECK-START: void Main.callInvokeUnresolvedVirtual(UnresolvedClass) register (before)
/// CHECK: InvokeUnresolved invoke_type:virtual
static public void callInvokeUnresolvedVirtual(UnresolvedClass c) {
c.virtualMethod();
}
/// CHECK-START: void Main.callInvokeUnresolvedInterface(UnresolvedInterface) register (before)
/// CHECK: InvokeUnresolved invoke_type:interface
static public void callInvokeUnresolvedInterface(UnresolvedInterface c) {
c.interfaceMethod();
}
static public void callInvokeUnresolvedSuper(Main c) {
c.superMethod();
}
/// CHECK-START: void Main.superMethod() register (before)
/// CHECK: InvokeUnresolved invoke_type:super
public void superMethod() {
super .superMethod();
}
/// CHECK-START: void Main.callUnresolvedStaticFieldAccess() register (before)
/// CHECK: UnresolvedStaticFieldSet field_type:Int8
/// CHECK: UnresolvedStaticFieldSet field_type:Uint16
/// CHECK: UnresolvedStaticFieldSet field_type:Int32
/// CHECK: UnresolvedStaticFieldSet field_type:Int64
/// CHECK: UnresolvedStaticFieldSet field_type:Float32
/// CHECK: UnresolvedStaticFieldSet field_type:Float64
/// CHECK: UnresolvedStaticFieldSet field_type:Reference
/// CHECK: UnresolvedStaticFieldGet field_type:Int8
/// CHECK: UnresolvedStaticFieldGet field_type:Uint16
/// CHECK: UnresolvedStaticFieldGet field_type:Int32
/// CHECK: UnresolvedStaticFieldGet field_type:Int64
/// CHECK: UnresolvedStaticFieldGet field_type:Float32
/// CHECK: UnresolvedStaticFieldGet field_type:Float64
/// CHECK: UnresolvedStaticFieldGet field_type:Reference
static public void callUnresolvedStaticFieldAccess() {
Object o = new Object();
UnresolvedClass.staticByte = (byte )1 ;
UnresolvedClass.staticChar = '1' ;
UnresolvedClass.staticInt = 123456789 ;
UnresolvedClass.staticLong = 123456789123456789 l;
UnresolvedClass.staticFloat = 123456789123456789 f;
UnresolvedClass.staticDouble = 123456789123456789 d;
UnresolvedClass.staticObject = o;
expectEquals((byte )1 , UnresolvedClass.staticByte);
expectEquals('1' , UnresolvedClass.staticChar);
expectEquals(123456789 , UnresolvedClass.staticInt);
expectEquals(123456789123456789 l, UnresolvedClass.staticLong);
expectEquals(123456789123456789 f, UnresolvedClass.staticFloat);
expectEquals(123456789123456789 d, UnresolvedClass.staticDouble);
expectEquals(o, UnresolvedClass.staticObject);
// Check "large" values.
UnresolvedClass.staticByte = (byte )-1 ;
UnresolvedClass.staticChar = (char )32768 ;
UnresolvedClass.staticInt = -1 ;
expectEquals((byte )-1 , UnresolvedClass.staticByte);
expectEquals((char )32768 , UnresolvedClass.staticChar);
expectEquals(-1 , UnresolvedClass.staticInt);
}
/// CHECK-START: void Main.callUnresolvedInstanceFieldAccess(UnresolvedClass) register (before)
/// CHECK: UnresolvedInstanceFieldSet field_type:Int8
/// CHECK: UnresolvedInstanceFieldSet field_type:Uint16
/// CHECK: UnresolvedInstanceFieldSet field_type:Int32
/// CHECK: UnresolvedInstanceFieldSet field_type:Int64
/// CHECK: UnresolvedInstanceFieldSet field_type:Float32
/// CHECK: UnresolvedInstanceFieldSet field_type:Float64
/// CHECK: UnresolvedInstanceFieldSet field_type:Reference
/// CHECK: UnresolvedInstanceFieldGet field_type:Int8
/// CHECK: UnresolvedInstanceFieldGet field_type:Uint16
/// CHECK: UnresolvedInstanceFieldGet field_type:Int32
/// CHECK: UnresolvedInstanceFieldGet field_type:Int64
/// CHECK: UnresolvedInstanceFieldGet field_type:Float32
/// CHECK: UnresolvedInstanceFieldGet field_type:Float64
/// CHECK: UnresolvedInstanceFieldGet field_type:Reference
static public void callUnresolvedInstanceFieldAccess(UnresolvedClass c) {
Object o = new Object();
c.instanceByte = (byte )1 ;
c.instanceChar = '1' ;
c.instanceInt = 123456789 ;
c.instanceLong = 123456789123456789 l;
c.instanceFloat = 123456789123456789 f;
c.instanceDouble = 123456789123456789 d;
c.instanceObject = o;
expectEquals((byte )1 , c.instanceByte);
expectEquals('1' , c.instanceChar);
expectEquals(123456789 , c.instanceInt);
expectEquals(123456789123456789 l, c.instanceLong);
expectEquals(123456789123456789 f, c.instanceFloat);
expectEquals(123456789123456789 d, c.instanceDouble);
expectEquals(o, c.instanceObject);
// Check "large" values.
c.instanceByte = (byte )-1 ;
c.instanceChar = (char )32768 ;
c.instanceInt = -1 ;
expectEquals((byte )-1 , c.instanceByte);
expectEquals((char )32768 , c.instanceChar);
expectEquals(-1 , c.instanceInt);
}
/// CHECK-START: void Main.callUnresolvedNull(UnresolvedClass) register (before)
/// CHECK-NOT: NullCheck
static public void callUnresolvedNull(UnresolvedClass c) {
int x = 0 ;
try {
x = c.instanceInt;
throw new Error("Expected NPE" );
} catch (NullPointerException e) {
x -= 1 ;
}
expectEquals(-1 , x);
try {
c.instanceInt = -1 ;
throw new Error("Expected NPE" );
} catch (NullPointerException e) {
x -= 1 ;
}
expectEquals(-2 , x);
try {
c.virtualMethod();
throw new Error("Expected NPE" );
} catch (NullPointerException e) {
x -= 1 ;
}
expectEquals(-3 , x);
}
static public void testInstanceOf(Object o) {
if (o instanceof UnresolvedSuperClass) {
System.out.println("instanceof ok" );
}
}
static public UnresolvedSuperClass testCheckCast(Object o) {
UnresolvedSuperClass c = (UnresolvedSuperClass) o;
System.out.println("checkcast ok" );
return c;
}
/// CHECK-START: void Main.main(java.lang.String[]) register (before)
/// CHECK: InvokeUnresolved invoke_type:direct
static public void main(String[] args) {
UnresolvedClass c = new UnresolvedClass();
Main m = new Main();
callInvokeUnresolvedStatic();
callInvokeUnresolvedVirtual(c);
callInvokeUnresolvedInterface(c);
callInvokeUnresolvedSuper(m);
callUnresolvedStaticFieldAccess();
callUnresolvedInstanceFieldAccess(c);
callUnresolvedNull(null );
testInstanceOf(m);
testCheckCast(m);
testLicm(2 );
}
/// CHECK-START: void Main.testLicm(int) licm (before)
/// CHECK: <<Class:l\d+>> LoadClass loop:<<LoopLabel:B\d+>>
/// CHECK-NEXT: <<Clinit:l\d+>> ClinitCheck [<<Class>>] loop:<<LoopLabel>>
/// CHECK-NEXT: <<New:l\d+>> NewInstance [<<Clinit>>] loop:<<LoopLabel>>
/// CHECK-NEXT: ConstructorFence [<<New>>] loop:<<LoopLabel>>
/// CHECK-NEXT: InvokeUnresolved [<<New>>] loop:<<LoopLabel>>
/// CHECK-START: void Main.testLicm(int) licm (after)
/// CHECK: <<Class:l\d+>> LoadClass loop:none
/// CHECK-NEXT: <<Clinit:l\d+>> ClinitCheck [<<Class>>] loop:none
/// CHECK: <<New:l\d+>> NewInstance [<<Clinit>>] loop:<<LoopLabel:B\d+>>
/// CHECK-NEXT: ConstructorFence [<<New>>] loop:<<LoopLabel>>
/// CHECK-NEXT: InvokeUnresolved [<<New>>] loop:<<LoopLabel>>
static public void testLicm(int count) {
// Test to make sure we keep the initialization check after loading an unresolved class.
UnresolvedClass c;
int i = 0 ;
do {
c = new UnresolvedClass();
} while (i++ != count);
}
public static void expectEquals(byte expected, byte result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(char expected, char result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(int expected, int result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(long expected, long result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(float expected, float result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(double expected, double result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(Object expected, Object result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
}
Messung V0.5 in Prozent C=82 H=79 G=80
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland