// Copyright (c) 2017, 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. // This code is not run directly. It needs to be compiled to dex code. // 'arithmetic.dex' is what is run. package cse; public class CommonSubexpressionElimination { public static int divNoCatch(int a, int b, int c) { int d = c / (a - b); System.out.println(d); return c / (a - b); } public static int divNoCatch2(int a, int b, int c) { int d = c / (a - b); int e = c / (a - b); System.out.println(d + " " + e); return c / (a - b); } public static int divCatch(int a, int b, int c) { try { int d = c / (a - b); System.out.println(d); return d; } catch (Throwable t) { return c / (a - b); } } public static int divCatch2(int a, int b, int c) { try { int d = c / (a - b); int e = c / (a - b); System.out.println(d + " " + e); return d; } catch (Throwable t) { return c / (a - b); } } public static String divCatchCatch(int a, int b, int c) { try { int d = c / (a - b); System.out.println(d); return "X"; } catch (Throwable t) { try { return "" + c / (a - b); } catch (Throwable t2) { return "A"; } } } public static String divCatchSharedCatchHandler(int a, int b, int c) { try { int d = c / (a - b); System.out.println(d); if (a == 0) { int e = c / (a - b); System.out.println(e); } else { int f = c / (a - b); System.out.println(f); } return "X"; } catch (Throwable t) { return "B"; } } public static void main(String[] args) { System.out.println(divNoCatch(1, 0, 1)); System.out.println(divNoCatch2(1, 0, 2)); System.out.println(divCatch(1, 0, 3)); System.out.println(divCatch2(1, 0, 4)); System.out.println(divCatchCatch(0, 0, 1)); System.out.println(divCatchSharedCatchHandler(0, 0, 1)); try { divNoCatch(0, 0, 1); throw new RuntimeException("UNEXPECTED"); } catch (ArithmeticException e) { // Expected "divide by zero". } try { divNoCatch2(0, 0, 1); throw new RuntimeException("UNEXPECTED"); } catch (ArithmeticException e) { // Expected "divide by zero". } try { divCatch(0, 0, 1); throw new RuntimeException("UNEXPECTED"); } catch (ArithmeticException e) { // Expected "divide by zero". } try { divCatch2(0, 0, 1); throw new RuntimeException("UNEXPECTED"); } catch (ArithmeticException e) { // Expected "divide by zero". } } }