blob: 9cfd7fa7b26378cf76d9560c53f6ec1646850688 [file] [log] [blame]
// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.smali;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Test;
public class ComputeBlockTryRangeTest extends SmaliTestBase {
@Test
public void jumpIntoTryRange() throws CompilationFailedException {
SmaliBuilder builder = new SmaliBuilder("Test");
builder.addStaticMethod(
"void", "main", Arrays.asList("java.lang.String[]"), 2,
" sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;",
" const v0, 1",
" invoke-static {v0}, LTest;->method(I)I",
" move-result v0",
" invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V",
" const v0, 0",
" invoke-static {v0}, LTest;->method(I)I",
" move-result v0",
" invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V",
" return-void");
MethodSignature methodSig = builder.addStaticMethod(
"int", "method", Collections.singletonList("int"), 1,
" const v0, 42",
" goto :in_try",
":try_start",
":dead_code",
" const v0, 0",
":in_try",
" div-int/2addr v0, v1",
" return v0",
":try_end",
" .catch Ljava/io/IOException; {:try_start .. :try_end} :dead_code",
" .catch Ljava/lang/Throwable; {:try_start .. :try_end} :return_half",
":return_half",
" const v1, 2",
" goto :in_try"
);
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
DexEncodedMethod method = getMethod(processedApplication, methodSig);
assert method.getCode().asDexCode().tries.length > 0;
}
}