Commit 8d5c5f43 authored by Calin Juravle's avatar Calin Juravle Committed by Android Git Automerger
Browse files

am 163a7bcc: am 54d8f4bc: Fix in reference type propagation

* commit '163a7bcc':
  Fix in reference type propagation
parents 6d9c13fd 163a7bcc
......@@ -316,7 +316,9 @@ bool ReferenceTypePropagation::UpdateNullability(HInstruction* instr) {
void ReferenceTypePropagation::ProcessWorklist() {
while (!worklist_.IsEmpty()) {
HInstruction* instruction = worklist_.Pop();
if (UpdateNullability(instruction) || UpdateReferenceTypeInfo(instruction)) {
bool updated_nullability = UpdateNullability(instruction);
bool updated_reference_type = UpdateReferenceTypeInfo(instruction);
if (updated_nullability || updated_reference_type) {
AddDependentInstructionsToWorklist(instruction);
}
}
......
Test that we set the proper types for objects (b/25008765).
/*
* 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.
*/
final class Final { }
public class Main {
// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) reference_type_propagation (after)
// CHECK: [[Phi:l\d+]] Phi
// CHECK: [[Class:l\d+]] LoadClass
// CHECK: CheckCast [ [[Phi]] [[Class]] ]
// CHECK: Return [ [[Phi]] ]
// CHECK-START: Final Main.testKeepCheckCast(java.lang.Object, boolean) instruction_simplifier_after_types (after)
// CHECK: [[Phi:l\d+]] Phi
// CHECK: [[Class:l\d+]] LoadClass
// CHECK: CheckCast
// CHECK: Return [ [[Phi]] ]
public static Final testKeepCheckCast(Object o, boolean cond) {
Object x = new Final();
while (cond) {
x = o;
cond = false;
}
return (Final) x;
}
public static void main(String[] args) {
try {
testKeepCheckCast(new Object(), true);
throw new Error("Expected check cast exception");
} catch (ClassCastException e) {
// expected
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment