1# 2# Copyright (C) 2022 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.class public LB260387991; 16 17.super Ljava/lang/Object; 18 19# When eliminating the unnecessary try and its catch block we turn the 20# TryBoundary instructions into Goto instructions. If one of these 21# instructions is pointing to the exit block, we use its single 22# predecessor instead. If this TryBoundary-turned-into-Goto instruction 23# was the only one pointing to the Exit, we also have to update the dominators. 24 25## CHECK-START: void B260387991.testInfiniteCatch() dead_code_elimination$initial (before) 26## CHECK: TryBoundary 27## CHECK: TryBoundary 28 29## CHECK-START: void B260387991.testInfiniteCatch() dead_code_elimination$initial (after) 30## CHECK-NOT: TryBoundary 31.method public static testInfiniteCatch()V 32 .registers 4 33 const/4 v0, 0x2 34 const/4 v1, 0x4 35 :try_start 36 div-int v0, v1, v0 37 return-void 38 :try_end 39 .catchall {:try_start .. :try_end} :catch_all 40 41 # Infinite catch block which does not lead to the exit block. 42 :catch_all 43 nop 44 goto :catch_all 45.end method 46