blob: 3c64a1d710bfb74ffe99662201e3a32253cf49af [file] [log] [blame]
Mads Ager418d1ca2017-05-22 09:35:49 +02001// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5// This code is not run directly. It needs to be compiled to dex code.
6// 'arithmetic.dex' is what is run.
7
8package cse;
9
10public class CommonSubexpressionElimination {
11
12 public static int divNoCatch(int a, int b, int c) {
13 int d = c / (a - b);
14 System.out.println(d);
15 return c / (a - b);
16 }
17
18 public static int divNoCatch2(int a, int b, int c) {
19 int d = c / (a - b);
20 int e = c / (a - b);
21 System.out.println(d + " " + e);
22 return c / (a - b);
23 }
24
25 public static int divCatch(int a, int b, int c) {
26 try {
27 int d = c / (a - b);
28 System.out.println(d);
29 return d;
30 } catch (Throwable t) {
31 return c / (a - b);
32 }
33 }
34
35 public static int divCatch2(int a, int b, int c) {
36 try {
37 int d = c / (a - b);
38 int e = c / (a - b);
39 System.out.println(d + " " + e);
40 return d;
41 } catch (Throwable t) {
42 return c / (a - b);
43 }
44 }
45
46 public static String divCatchCatch(int a, int b, int c) {
47 try {
48 int d = c / (a - b);
49 System.out.println(d);
50 return "X";
51 } catch (Throwable t) {
52 try {
53 return "" + c / (a - b);
54 } catch (Throwable t2) {
55 return "A";
56 }
57 }
58 }
59
60 public static String divCatchSharedCatchHandler(int a, int b, int c) {
61 try {
62 int d = c / (a - b);
63 System.out.println(d);
64 if (a == 0) {
65 int e = c / (a - b);
66 System.out.println(e);
67 } else {
68 int f = c / (a - b);
69 System.out.println(f);
70 }
71 return "X";
72 } catch (Throwable t) {
73 return "B";
74 }
75 }
76
77
78 public static void main(String[] args) {
79 System.out.println(divNoCatch(1, 0, 1));
80 System.out.println(divNoCatch2(1, 0, 2));
81 System.out.println(divCatch(1, 0, 3));
82 System.out.println(divCatch2(1, 0, 4));
83
84 System.out.println(divCatchCatch(0, 0, 1));
85 System.out.println(divCatchSharedCatchHandler(0, 0, 1));
86
87 try {
88 divNoCatch(0, 0, 1);
89 throw new RuntimeException("UNEXPECTED");
90 } catch (ArithmeticException e) {
91 // Expected "divide by zero".
92 }
93
94 try {
95 divNoCatch2(0, 0, 1);
96 throw new RuntimeException("UNEXPECTED");
97 } catch (ArithmeticException e) {
98 // Expected "divide by zero".
99 }
100
101 try {
102 divCatch(0, 0, 1);
103 throw new RuntimeException("UNEXPECTED");
104 } catch (ArithmeticException e) {
105 // Expected "divide by zero".
106 }
107
108 try {
109 divCatch2(0, 0, 1);
110 throw new RuntimeException("UNEXPECTED");
111 } catch (ArithmeticException e) {
112 // Expected "divide by zero".
113 }
114 }
115}