blob: aa6d5a75f730a5efafa296d45def09a6147e41a6 [file] [log] [blame]
Guillaume Sanchez222862c2015-06-09 18:33:02 +01001/*
2 * Copyright (C) 2015 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 */
16
17public class Main {
18 public static boolean $inline$classTypeTest(Object o) {
19 return ((SubMain)o) == o;
20 }
21
22 public static boolean $inline$interfaceTypeTest(Object o) {
23 return ((Itf)o) == o;
24 }
25
26 public static SubMain subMain;
27 public static Main mainField;
28 public static Unrelated unrelatedField;
29 public static FinalUnrelated finalUnrelatedField;
30
31 /// CHECK-START: boolean Main.classTypeTestNull() register (after)
32 /// CHECK-NOT: CheckCast
33 public static boolean classTypeTestNull() {
34 return $inline$classTypeTest(null);
35 }
36
37 /// CHECK-START: boolean Main.classTypeTestExactMain() register (after)
38 /// CHECK: CheckCast
39 public static boolean classTypeTestExactMain() {
40 return $inline$classTypeTest(new Main());
41 }
42
43 /// CHECK-START: boolean Main.classTypeTestExactSubMain() register (after)
44 /// CHECK-NOT: CheckCast
45 public static boolean classTypeTestExactSubMain() {
46 return $inline$classTypeTest(new SubMain());
47 }
48
49 /// CHECK-START: boolean Main.classTypeTestSubMainOrNull() register (after)
50 /// CHECK-NOT: CheckCast
51 public static boolean classTypeTestSubMainOrNull() {
52 return $inline$classTypeTest(subMain);
53 }
54
55 /// CHECK-START: boolean Main.classTypeTestMainOrNull() register (after)
56 /// CHECK: CheckCast
57 public static boolean classTypeTestMainOrNull() {
58 return $inline$classTypeTest(mainField);
59 }
60
61 /// CHECK-START: boolean Main.classTypeTestUnrelated() register (after)
62 /// CHECK: CheckCast
63 public static boolean classTypeTestUnrelated() {
64 return $inline$classTypeTest(unrelatedField);
65 }
66
67 /// CHECK-START: boolean Main.classTypeTestFinalUnrelated() register (after)
68 /// CHECK: CheckCast
69 public static boolean classTypeTestFinalUnrelated() {
70 return $inline$classTypeTest(finalUnrelatedField);
71 }
72
73 /// CHECK-START: boolean Main.interfaceTypeTestNull() register (after)
74 /// CHECK-NOT: CheckCast
75 public static boolean interfaceTypeTestNull() {
76 return $inline$interfaceTypeTest(null);
77 }
78
79 /// CHECK-START: boolean Main.interfaceTypeTestExactMain() register (after)
80 /// CHECK: CheckCast
81 public static boolean interfaceTypeTestExactMain() {
82 return $inline$interfaceTypeTest(new Main());
83 }
84
85 /// CHECK-START: boolean Main.interfaceTypeTestExactSubMain() register (after)
86 /// CHECK-NOT: CheckCast
87 public static boolean interfaceTypeTestExactSubMain() {
88 return $inline$interfaceTypeTest(new SubMain());
89 }
90
91 /// CHECK-START: boolean Main.interfaceTypeTestSubMainOrNull() register (after)
92 /// CHECK-NOT: CheckCast
93 public static boolean interfaceTypeTestSubMainOrNull() {
94 return $inline$interfaceTypeTest(subMain);
95 }
96
97 /// CHECK-START: boolean Main.interfaceTypeTestMainOrNull() register (after)
98 /// CHECK: CheckCast
99 public static boolean interfaceTypeTestMainOrNull() {
100 return $inline$interfaceTypeTest(mainField);
101 }
102
103 /// CHECK-START: boolean Main.interfaceTypeTestUnrelated() register (after)
104 /// CHECK: CheckCast
105 public static boolean interfaceTypeTestUnrelated() {
106 return $inline$interfaceTypeTest(unrelatedField);
107 }
108
109 /// CHECK-START: boolean Main.interfaceTypeTestFinalUnrelated() register (after)
110 /// CHECK: CheckCast
111 public static boolean interfaceTypeTestFinalUnrelated() {
112 return $inline$interfaceTypeTest(finalUnrelatedField);
113 }
114
115 public static void main(String[] args) {
116 classTypeTestNull();
117 try {
118 classTypeTestExactMain();
119 throw new Error("ClassCastException expected");
120 } catch (ClassCastException e) {}
121 classTypeTestExactSubMain();
122
123 subMain = null;
124 classTypeTestSubMainOrNull();
125 subMain = new SubMain();
126 classTypeTestSubMainOrNull();
127
128 mainField = null;
129 classTypeTestMainOrNull();
130 mainField = new Main();
131 try {
132 classTypeTestMainOrNull();
133 throw new Error("ClassCastException expected");
134 } catch (ClassCastException e) {}
135 mainField = new SubMain();
136 classTypeTestMainOrNull();
137
138 unrelatedField = null;
139 classTypeTestUnrelated();
140 unrelatedField = new Unrelated();
141 try {
142 classTypeTestUnrelated();
143 throw new Error("ClassCastException expected");
144 } catch (ClassCastException e) {}
145
146 finalUnrelatedField = null;
147 classTypeTestFinalUnrelated();
148 finalUnrelatedField = new FinalUnrelated();
149 try {
150 classTypeTestFinalUnrelated();
151 throw new Error("ClassCastException expected");
152 } catch (ClassCastException e) {}
153
154 interfaceTypeTestNull();
155 try {
156 interfaceTypeTestExactMain();
157 throw new Error("ClassCastException expected");
158 } catch (ClassCastException e) {}
159 interfaceTypeTestExactSubMain();
160
161 subMain = null;
162 interfaceTypeTestSubMainOrNull();
163 subMain = new SubMain();
164 interfaceTypeTestSubMainOrNull();
165
166 mainField = null;
167 interfaceTypeTestMainOrNull();
168 mainField = new Main();
169 try {
170 interfaceTypeTestMainOrNull();
171 throw new Error("ClassCastException expected");
172 } catch (ClassCastException e) {}
173 mainField = new SubMain();
174 interfaceTypeTestMainOrNull();
175
176 unrelatedField = null;
177 interfaceTypeTestUnrelated();
178 unrelatedField = new Unrelated();
179 try {
180 interfaceTypeTestUnrelated();
181 throw new Error("ClassCastException expected");
182 } catch (ClassCastException e) {}
183
184 finalUnrelatedField = null;
185 interfaceTypeTestFinalUnrelated();
186 finalUnrelatedField = new FinalUnrelated();
187 try {
188 interfaceTypeTestFinalUnrelated();
189 throw new Error("ClassCastException expected");
190 } catch (ClassCastException e) {}
191 }
192}
193
194interface Itf {
195}
196
197class SubMain extends Main implements Itf {
198}
199
200class Unrelated {
201}
202
203final class FinalUnrelated {
204}