1# Copyright (C) 2015 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15.class public LTestCase; 16.super Ljava/lang/Object; 17 18# Inliner used to assign exact type to the artificial multiple-return phi if the 19# class type was final which does not hold for arrays. 20 21# The type information is only used by recursive calls to the inliner and is 22# overwritten by the next pass of reference type propagation. Since we do not 23# inline any methods from array classes, this bug cannot be triggered and we 24# verify it using Checker. 25 26## CHECK-START: void TestCase.testInliner() inliner (after) 27## CHECK-DAG: CheckCast [<<Phi:l\d+>>,{{l\d+}}] 28## CHECK-DAG: <<Phi>> Phi klass:java.lang.Object[] exact:false 29 30.method public static testInliner()V 31 .registers 3 32 33 invoke-static {}, Ljava/lang/System;->nanoTime()J 34 move-result-wide v0 35 long-to-int v0, v0 36 37 invoke-static {v0}, LTestCase;->$inline$getArray(I)[Ljava/lang/Object; 38 move-result-object v0 39 40 check-cast v0, [LMain$MyClassA; 41 return-void 42 43.end method 44 45.method public static $inline$getArray(I)[Ljava/lang/Object; 46 .registers 2 47 if-eqz p0, :else 48 49 :then 50 const/4 v0, 2 51 new-array v0, v0, [LMain$MyClassA; 52 return-object v0 53 54 :else 55 const/4 v0, 3 56 new-array v0, v0, [LMain$MyClassB; 57 return-object v0 58 59.end method 60