blob: 2daa0a993a29b1da78c70672ec4976357c824190 [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;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DirectMappedDexApplication;
import com.android.tools.r8.ir.conversion.IRConverter;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.Ignore;
import org.junit.Test;
public class R8UnreachableCodeTest {
private static final Path SMALI_DIR = Paths.get(ToolHelper.SMALI_BUILD_DIR);
@Ignore
@Test
public void UnreachableCode() throws IOException, ExecutionException {
String name = "unreachable-code-1";
AndroidApp input =
AndroidApp.builder()
.addProgramFiles(SMALI_DIR.resolve(name).resolve(name + ".dex"))
.build();
ExecutorService executorService = Executors.newSingleThreadExecutor();
Timing timing = Timing.empty();
InternalOptions options = new InternalOptions();
options.programConsumer = DexIndexedConsumer.emptyConsumer();
DirectMappedDexApplication application =
new ApplicationReader(input, options, timing).read(executorService).toDirect();
IRConverter converter =
new IRConverter(
AppView.createForR8(new AppInfoWithClassHierarchy(application), options), null);
converter.optimize();
DexProgramClass clazz = application.classes().iterator().next();
assertEquals(4, clazz.getMethodCollection().numberOfDirectMethods());
for (DexEncodedMethod method : clazz.directMethods()) {
if (!method.method.name.toString().equals("main")) {
assertEquals(2, method.getCode().asDexCode().instructions.length);
}
}
}
}