diff options
Diffstat (limited to 'test')
20 files changed, 884 insertions, 72 deletions
diff --git a/test/048-reflect-v8/expected.txt b/test/048-reflect-v8/expected.txt index 2d0b4ccb6b..3109eccda6 100644 --- a/test/048-reflect-v8/expected.txt +++ b/test/048-reflect-v8/expected.txt @@ -1,4 +1,95 @@ -Main$DefaultInterface is default = yes -Main$RegularInterface is default = no -Main$ImplementsWithDefault is default = yes -Main$ImplementsWithRegular is default = no +============================== +Are These Methods Default: +============================== +IsDefaultTest$DefaultInterface is default = yes +IsDefaultTest$RegularInterface is default = no +IsDefaultTest$ImplementsWithDefault is default = yes +IsDefaultTest$ImplementsWithRegular is default = no +============================== +Class annotations by type: +============================== +Annotations by type, defined by class SingleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Annotations by type, defined by class SingleUser with annotation Calendars: <empty> +Annotations by type, defined by class User with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23) +Annotations by type, defined by class User with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Annotations by type, defined by class User2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6) +Annotations by type, defined by class User2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)]) +Annotations by type, defined by class UserComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23) +Annotations by type, defined by class UserComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +Annotations by type, defined by class UserSub with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23) +Annotations by type, defined by class UserSub with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Annotations by type, defined by class UserSub2 with annotation Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6) +Annotations by type, defined by class UserSub2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +----------------------------- +----------------------------- +============================== +Class declared annotation: +============================== +Declared annotations by class class SingleUser, annotation interface Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Declared annotations by class class SingleUser, annotation interface Calendars: <null> +Declared annotations by class class User, annotation interface Calendar: <null> +Declared annotations by class class User, annotation interface Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Declared annotations by class class UserComplex, annotation interface Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6) +Declared annotations by class class UserComplex, annotation interface Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +Declared annotations by class class UserSub, annotation interface Calendar: <null> +Declared annotations by class class UserSub, annotation interface Calendars: <null> +Declared annotations by class class UserSub2, annotation interface Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6) +Declared annotations by class class UserSub2, annotation interface Calendars: <null> +----------------------------- +----------------------------- +============================== +Declared class annotations by type: +============================== +Declared annnotations by type, defined by class SingleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Declared annnotations by type, defined by class SingleUser with annotation Calendars: <empty> +Declared annnotations by type, defined by class User with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23) +Declared annnotations by type, defined by class User with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Declared annnotations by type, defined by class User2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6) +Declared annnotations by type, defined by class User2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)]) +Declared annnotations by type, defined by class UserComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23) +Declared annnotations by type, defined by class UserComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +Declared annnotations by type, defined by class UserSub with annotation Calendar: <empty> +Declared annnotations by type, defined by class UserSub with annotation Calendars: <empty> +Declared annnotations by type, defined by class UserSub2 with annotation Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6) +Declared annnotations by type, defined by class UserSub2 with annotation Calendars: <empty> +----------------------------- +----------------------------- +============================== +Method annotations by type: +============================== +Annotations by type, defined by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Annotations by type, defined by method singleUser with annotation Calendars: <empty> +Annotations by type, defined by method user with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23) +Annotations by type, defined by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Annotations by type, defined by method user2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6) +Annotations by type, defined by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)]) +Annotations by type, defined by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23) +Annotations by type, defined by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +----------------------------- +----------------------------- +============================== +Declared method annotations: +============================== +Annotations declared by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Annotations declared by method singleUser with annotation Calendars: <null> +Annotations declared by method user with annotation Calendar: <null> +Annotations declared by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Annotations declared by method user2 with annotation Calendar: <null> +Annotations declared by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)]) +Annotations declared by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6) +Annotations declared by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +----------------------------- +----------------------------- +============================== +Declared method annotations by type: +============================== +Annotations by type, defined by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23) +Annotations by type, defined by method singleUser with annotation Calendars: <empty> +Annotations by type, defined by method user with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23) +Annotations by type, defined by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)]) +Annotations by type, defined by method user2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6) +Annotations by type, defined by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)]) +Annotations by type, defined by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23) +Annotations by type, defined by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)]) +----------------------------- +----------------------------- diff --git a/test/048-reflect-v8/src/AnnotationTest.java b/test/048-reflect-v8/src/AnnotationTest.java new file mode 100644 index 0000000000..75e684557c --- /dev/null +++ b/test/048-reflect-v8/src/AnnotationTest.java @@ -0,0 +1,291 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + +public class AnnotationTest extends AnnotationTestHelpers { + public static void testAnnotationsByType() { + System.out.println("=============================="); + System.out.println("Class annotations by type:"); + System.out.println("=============================="); + + // Print associated annotations: + // * A is directly present or repeatably present on an element E; + // * No annotation of A is directly/repeatably present on an element + // AND E is a class AND A's type is inheritable, AND A is associated with its superclass. + // (Looks through subtypes recursively only if there's 0 result at each level, + // and the annotation is @Inheritable). + printAnnotationsByType(Calendar.class, SingleUser.class); + printAnnotationsByType(Calendars.class, SingleUser.class); + + printAnnotationsByType(Calendar.class, User.class); + printAnnotationsByType(Calendars.class, User.class); + + printAnnotationsByType(Calendar.class, User2.class); // Enforce ordering 'z,x,y' + printAnnotationsByType(Calendars.class, User2.class); + + // NOTE: + // Order of outer-most annotations Calendars[C,C],S vs C,Calendars[C,C] is unspecified. + // In particular it's the order of #getDeclaredAnnotations which is completely unmentioned. + // The only requirement for #getAnnotationsByType is to have same ordering as + // #getDeclaredAnnotations. + // (Calendars[] itself has to maintain value() order). + printAnnotationsByType(Calendar.class, UserComplex.class); // Cs(C,C),C collapses into C,C,C. + printAnnotationsByType(Calendars.class, UserComplex.class); + + printAnnotationsByType(Calendar.class, UserSub.class); + printAnnotationsByType(Calendars.class, UserSub.class); + + printAnnotationsByType(Calendar.class, UserSub2.class); + // The directly present "Calendar" annotation masks all the repeatably present + // "Calendar" annotations coming from User. + printAnnotationsByType(Calendars.class, UserSub2.class); + // Edge case: UserSub2 doesn't directly have a Calendars annotation, + // so it doesn't mask the "User" Calendars annotation. + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + + } + + public static void testDeclaredAnnotation() { + System.out.println("=============================="); + System.out.println("Class declared annotation:"); + System.out.println("=============================="); + + // Print directly present annotations: + // + // The element E has an annotation_item for it (accessible through an + // annotations_directory_item) corresponding to an annotation A, + // and A's type_idx must match that on the encoded_annotation (from the annotation_item). + // (Does not look through the subtypes recursively) + printDeclaredAnnotation(SingleUser.class, Calendar.class); + printDeclaredAnnotation(SingleUser.class, Calendars.class); + + printDeclaredAnnotation(User.class, Calendar.class); + printDeclaredAnnotation(User.class, Calendars.class); + + printDeclaredAnnotation(UserComplex.class, Calendar.class); + printDeclaredAnnotation(UserComplex.class, Calendars.class); + + printDeclaredAnnotation(UserSub.class, Calendar.class); + printDeclaredAnnotation(UserSub.class, Calendars.class); + + printDeclaredAnnotation(UserSub2.class, Calendar.class); + printDeclaredAnnotation(UserSub2.class, Calendars.class); + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + } + + public static void testDeclaredAnnotationsByType() { + System.out.println("=============================="); + System.out.println("Declared class annotations by type:"); + System.out.println("=============================="); + + // A is directly present or repeatably present on an element E; + // -- (does not do any recursion for classes regardless of @Inherited) + printDeclaredAnnotationsByType(Calendar.class, SingleUser.class); + printDeclaredAnnotationsByType(Calendars.class, SingleUser.class); + + printDeclaredAnnotationsByType(Calendar.class, User.class); + printDeclaredAnnotationsByType(Calendars.class, User.class); + + printDeclaredAnnotationsByType(Calendar.class, User2.class); // Enforce ordering 'z,x,y' + printDeclaredAnnotationsByType(Calendars.class, User2.class); + + printDeclaredAnnotationsByType(Calendar.class, UserComplex.class); + printDeclaredAnnotationsByType(Calendars.class, UserComplex.class); + + printDeclaredAnnotationsByType(Calendar.class, UserSub.class); + printDeclaredAnnotationsByType(Calendars.class, UserSub.class); + + printDeclaredAnnotationsByType(Calendar.class, UserSub2.class); + // The directly present "Calendar" annotation masks all the repeatably present "Calendar" + // annotations coming from User. + printDeclaredAnnotationsByType(Calendars.class, UserSub2.class); + // Edge case: UserSub2 doesn't directly have a Calendars annotation, + // so it doesn't mask the "User" Calendars annotation. + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + } + + // Print the annotation "annotationClass" that is associated with an element denoted by + // "annotationUseClass." + private static <A extends Annotation> void printAnnotationsByType(Class<A> annotationClass, + Class<?> annotationUseClass) { + A[] annotationsByType = annotationUseClass.getAnnotationsByType(annotationClass); + + String msg = "Annotations by type, defined by class " + + annotationUseClass.getName() + " with annotation " + annotationClass.getName() + ": " + + asString(annotationsByType); + + + System.out.println(msg); + } + + private static <A extends Annotation> void printDeclaredAnnotation(Class<?> annotationUseClass, + Class<A> annotationDefClass) { + A anno = annotationUseClass.getDeclaredAnnotation(annotationDefClass); + + String msg = asString(anno); + + System.out.println("Declared annotations by class " + annotationUseClass + + ", annotation " + annotationDefClass + ": " + msg); + } + + // Print the annotation "annotationClass" that is directly/indirectly present with an element + // denoted by "annotationUseClass." + private static <A extends Annotation> void printDeclaredAnnotationsByType( + Class<A> annotationClass, Class<?> annotationUseClass) { + A[] annotationsByType = annotationUseClass.getDeclaredAnnotationsByType(annotationClass); + + String msg = "Declared annnotations by type, defined by class " + annotationUseClass.getName() + + " with annotation " + annotationClass.getName() + ": " + + asString(annotationsByType); + + System.out.println(msg); + } + + public static void testMethodAnnotationsByType() { + System.out.println("=============================="); + System.out.println("Method annotations by type:"); + System.out.println("=============================="); + + // Print associated annotations: + // * A is directly present or repeatably present on an element E; + // * No annotation of A is directly/repeatably present on an element AND E is a class + // AND A's type is inheritable, AND A is associated with its superclass. + // (Looks through subtypes recursively only if there's 0 result at each level, + // and the annotation is @Inheritable). + printMethodAnnotationsByType(Calendar.class, "singleUser", AnnotationTestFixture.class); + printMethodAnnotationsByType(Calendars.class, "singleUser", AnnotationTestFixture.class); + + printMethodAnnotationsByType(Calendar.class, "user", AnnotationTestFixture.class); + printMethodAnnotationsByType(Calendars.class, "user", AnnotationTestFixture.class); + + printMethodAnnotationsByType(Calendar.class, "user2", AnnotationTestFixture.class); + printMethodAnnotationsByType(Calendars.class, "user2", AnnotationTestFixture.class); + + printMethodAnnotationsByType(Calendar.class, "userComplex", AnnotationTestFixture.class); + printMethodAnnotationsByType(Calendars.class, "userComplex", AnnotationTestFixture.class); + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + } + + // Print the annotation "annotationClass" that is associated with an element denoted by + // "annotationUseClass" method methodName. + private static <A extends Annotation> void printMethodAnnotationsByType(Class<A> annotationClass, + String methodName, Class<?> annotationUseClass) { + Method m = null; + try { + m = annotationUseClass.getDeclaredMethod(methodName); + } catch (Throwable t) { + throw new AssertionError(t); + } + A[] annotationsByType = m.getAnnotationsByType(annotationClass); + + String msg = "Annotations by type, defined by method " + m.getName() + " with annotation " + + annotationClass.getName() + ": " + + asString(annotationsByType); + + System.out.println(msg); + } + + public static void testMethodDeclaredAnnotations() { + System.out.println("=============================="); + System.out.println("Declared method annotations:"); + System.out.println("=============================="); + + printMethodDeclaredAnnotation(Calendar.class, "singleUser", AnnotationTestFixture.class); + printMethodDeclaredAnnotation(Calendars.class, "singleUser", AnnotationTestFixture.class); + + printMethodDeclaredAnnotation(Calendar.class, "user", AnnotationTestFixture.class); + printMethodDeclaredAnnotation(Calendars.class, "user", AnnotationTestFixture.class); + + printMethodDeclaredAnnotation(Calendar.class, "user2", AnnotationTestFixture.class); + printMethodDeclaredAnnotation(Calendars.class, "user2", AnnotationTestFixture.class); + + printMethodDeclaredAnnotation(Calendar.class, "userComplex", AnnotationTestFixture.class); + printMethodDeclaredAnnotation(Calendars.class, "userComplex", AnnotationTestFixture.class); + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + } + + // Print the annotation "annotationClass" that is associated with an element denoted by + // methodName in annotationUseClass. + private static <A extends Annotation> void printMethodDeclaredAnnotation(Class<A> annotationClass, + String methodName, Class<?> annotationUseClass) { + Method m = null; + try { + m = annotationUseClass.getDeclaredMethod(methodName); + } catch (Throwable t) { + throw new AssertionError(t); + } + Annotation annotationsByType = m.getDeclaredAnnotation(annotationClass); + + String msg = "Annotations declared by method " + m.getName() + " with annotation " + + annotationClass.getName() + ": " + + asString(annotationsByType); + + System.out.println(msg); + } + + public static void testMethodDeclaredAnnotationsByType() { + System.out.println("=============================="); + System.out.println("Declared method annotations by type:"); + System.out.println("=============================="); + + printMethodDeclaredAnnotationByType(Calendar.class, "singleUser", AnnotationTestFixture.class); + printMethodDeclaredAnnotationByType(Calendars.class, "singleUser", AnnotationTestFixture.class); + + printMethodDeclaredAnnotationByType(Calendar.class, "user", AnnotationTestFixture.class); + printMethodDeclaredAnnotationByType(Calendars.class, "user", AnnotationTestFixture.class); + + printMethodDeclaredAnnotationByType(Calendar.class, "user2", AnnotationTestFixture.class); + printMethodDeclaredAnnotationByType(Calendars.class, "user2", AnnotationTestFixture.class); + + printMethodDeclaredAnnotationByType(Calendar.class, "userComplex", AnnotationTestFixture.class); + printMethodDeclaredAnnotationByType(Calendars.class, "userComplex", + AnnotationTestFixture.class); + + System.out.println("-----------------------------"); + System.out.println("-----------------------------"); + } + + // Print the annotation "annotationClass" that is associated with an element denoted by + // methodName in annotationUseClass. + private static <A extends Annotation> void printMethodDeclaredAnnotationByType( + Class<A> annotationClass, String methodName, Class<?> annotationUseClass) { + Method m = null; + try { + m = annotationUseClass.getDeclaredMethod(methodName); + } catch (Throwable t) { + throw new AssertionError(t); + } + A[] annotationsByType = m.getDeclaredAnnotationsByType(annotationClass); + + String msg = "Annotations by type, defined by method " + m.getName() + " with annotation " + + annotationClass.getName() + ": " + + asString(annotationsByType); + + System.out.println(msg); + } +} diff --git a/test/048-reflect-v8/src/AnnotationTestFixture.java b/test/048-reflect-v8/src/AnnotationTestFixture.java new file mode 100644 index 0000000000..248dfacf3b --- /dev/null +++ b/test/048-reflect-v8/src/AnnotationTestFixture.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +public class AnnotationTestFixture { + + @Calendar(dayOfWeek="single", hour=23) + public static void singleUser() { + + } + @Calendars ({ + @Calendar(dayOfMonth="last"), + @Calendar(dayOfWeek="Fri", hour=23) + }) + public static void user() { + + } + + @Calendars ({ + @Calendar(dayOfMonth="z"), + @Calendar(dayOfMonth="x"), + @Calendar(dayOfMonth="y") + }) + public static void user2() { + + } + + @Calendar(dayOfMonth="afirst") + @Calendars ({ + @Calendar(dayOfMonth="zsecond"), + @Calendar(dayOfMonth="athird", hour=23) + }) + public static void userComplex() { + + } +} diff --git a/test/048-reflect-v8/src/AnnotationTestHelpers.java b/test/048-reflect-v8/src/AnnotationTestHelpers.java new file mode 100644 index 0000000000..6b5bea266e --- /dev/null +++ b/test/048-reflect-v8/src/AnnotationTestHelpers.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.annotation.Annotation; + +public class AnnotationTestHelpers { + // Provide custom print function that print a deterministic output. + // Note that Annotation#toString has unspecified order: it prints out the + // fields, which is why we can't rely on it. + + public static String asString(Annotation anno) { + if (anno instanceof Calendar) { + return asString((Calendar)anno); + } else if (anno instanceof Calendars) { + return asString((Calendars)anno); + } else { + if (anno == null) { + return "<null>"; + } + // Fall-back, usually would only go here in a test failure. + return anno.toString(); + } + } + + public static String asString(Annotation[] annos) { + String msg = ""; + + if (annos == null) { + msg += "<null>"; + } else if (annos.length == 0) { + msg += "<empty>"; + } else { + for (int i = 0; i < annos.length; ++i) { + msg += asString(annos[i]); + + if (i != annos.length - 1) { + msg += ", "; + } + } + } + + return msg; + } + + public static String asString(Calendar calendar) { + if (calendar == null) { + return "<null>"; + } + + return "@Calendar(dayOfMonth=" + calendar.dayOfMonth() + ", dayOfWeek=" + + calendar.dayOfWeek() + ", hour=" + calendar.hour() + ")"; + } + + public static String asString(Calendars calendars) { + if (calendars == null) { + return "<null>"; + } + + String s = "@Calendars(value=["; + + Calendar[] allValues = calendars.value(); + for (int i = 0; i < allValues.length; ++i) { + s += asString(allValues[i]); + if (i != allValues.length - 1) { + s += ", "; + } + } + + s += "])"; + + return s; + } +} diff --git a/test/048-reflect-v8/src/Calendar.java b/test/048-reflect-v8/src/Calendar.java new file mode 100644 index 0000000000..4a16573bca --- /dev/null +++ b/test/048-reflect-v8/src/Calendar.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.annotation.Inherited; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +// This is a plain old non-1.8 annotation. At runtime we can see that it has a +// "Repeatable" annotation if we query with getDeclaredAnnotation(Repeatable.class) +@Retention(RetentionPolicy.RUNTIME) +@Repeatable(Calendars.class) +@Inherited // note: container must also be @Inherited by JLS. +public @interface Calendar { + String dayOfMonth() default "unspecified_month"; + String dayOfWeek() default "unspecified_week"; + int hour() default 6; +} + diff --git a/test/048-reflect-v8/src/Calendars.java b/test/048-reflect-v8/src/Calendars.java new file mode 100644 index 0000000000..caeda52ea6 --- /dev/null +++ b/test/048-reflect-v8/src/Calendars.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +// Plain old annotation, there's nothing 1.8 specific about it. +@Retention(RetentionPolicy.RUNTIME) +@Inherited // note: elements must also be @Inherited by JLS. +public @interface Calendars { + Calendar[] value(); +} diff --git a/test/048-reflect-v8/src/IFaceA.java b/test/048-reflect-v8/src/IFaceA.java new file mode 100644 index 0000000000..9b1f610f84 --- /dev/null +++ b/test/048-reflect-v8/src/IFaceA.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Stored as a complex annotation Calendars(Calendar,Calendar) +// in the binary. +@Calendars ({ + @Calendar(dayOfMonth="if_a_first"), + @Calendar(dayOfMonth="if_b_last") +}) +public interface IFaceA { +} diff --git a/test/048-reflect-v8/src/IFaceSimple.java b/test/048-reflect-v8/src/IFaceSimple.java new file mode 100644 index 0000000000..93cf61057e --- /dev/null +++ b/test/048-reflect-v8/src/IFaceSimple.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Simple annotation, no container. +@Calendar(dayOfMonth="if_simple_first") +public interface IFaceSimple { + +} diff --git a/test/048-reflect-v8/src/IsDefaultTest.java b/test/048-reflect-v8/src/IsDefaultTest.java new file mode 100644 index 0000000000..177dcf1ab9 --- /dev/null +++ b/test/048-reflect-v8/src/IsDefaultTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.reflect.Method; + +public class IsDefaultTest { + interface DefaultInterface { + default void sayHi() { + System.out.println("hi default"); + } + } + + interface RegularInterface { + void sayHi(); + } + + class ImplementsWithDefault implements DefaultInterface {} + class ImplementsWithRegular implements RegularInterface { + public void sayHi() { + System.out.println("hello specific"); + } + } + + private static void printIsDefault(Class<?> klass) { + Method m; + try { + m = klass.getMethod("sayHi"); + } catch (Throwable t) { + System.out.println(t); + return; + } + + boolean isDefault = m.isDefault(); + System.out.println(klass.getName() + " is default = " + (isDefault ? "yes" : "no")); + } + + public static void test() { + System.out.println("=============================="); + System.out.println("Are These Methods Default:"); + System.out.println("=============================="); + + printIsDefault(DefaultInterface.class); + printIsDefault(RegularInterface.class); + printIsDefault(ImplementsWithDefault.class); + printIsDefault(ImplementsWithRegular.class); + } +} diff --git a/test/048-reflect-v8/src/Main.java b/test/048-reflect-v8/src/Main.java index 7fa2a923d7..f2b8287d18 100644 --- a/test/048-reflect-v8/src/Main.java +++ b/test/048-reflect-v8/src/Main.java @@ -14,43 +14,14 @@ * limitations under the License. */ -import java.lang.reflect.Method; - public class Main { - interface DefaultInterface { - default void sayHi() { - System.out.println("hi default"); - } - } - - interface RegularInterface { - void sayHi(); - } - - class ImplementsWithDefault implements DefaultInterface {} - class ImplementsWithRegular implements RegularInterface { - public void sayHi() { - System.out.println("hello specific"); - } - } - - private static void printIsDefault(Class<?> klass) { - Method m; - try { - m = klass.getMethod("sayHi"); - } catch (Throwable t) { - System.out.println(t); - return; - } - - boolean isDefault = m.isDefault(); - System.out.println(klass.getName() + " is default = " + (isDefault ? "yes" : "no")); - } - public static void main(String[] args) { - printIsDefault(DefaultInterface.class); - printIsDefault(RegularInterface.class); - printIsDefault(ImplementsWithDefault.class); - printIsDefault(ImplementsWithRegular.class); + IsDefaultTest.test(); + AnnotationTest.testAnnotationsByType(); + AnnotationTest.testDeclaredAnnotation(); + AnnotationTest.testDeclaredAnnotationsByType(); + AnnotationTest.testMethodAnnotationsByType(); + AnnotationTest.testMethodDeclaredAnnotations(); + AnnotationTest.testMethodDeclaredAnnotationsByType(); } } diff --git a/test/048-reflect-v8/src/SingleUser.java b/test/048-reflect-v8/src/SingleUser.java new file mode 100644 index 0000000000..0f9c430109 --- /dev/null +++ b/test/048-reflect-v8/src/SingleUser.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Stored as a single "Calendar" annotation in the binary. +@Calendar(dayOfWeek="single", hour=23) +public class SingleUser { + +} diff --git a/test/048-reflect-v8/src/User.java b/test/048-reflect-v8/src/User.java new file mode 100644 index 0000000000..003ceeb093 --- /dev/null +++ b/test/048-reflect-v8/src/User.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Stored as a complex annotation Calendars(Calendar,Calendar) +// in the binary. +// +/* FIXME: Use this code instead, when Jack supports repeatable annotations properly. + * + * @Calendar(dayOfMonth="last") + * @Calendar(dayOfWeek="Fri", hour=23) + */ +@Calendars ({ + @Calendar(dayOfMonth="last"), + @Calendar(dayOfWeek="Fri", hour=23) +}) +public class User { + +} diff --git a/test/048-reflect-v8/src/User2.java b/test/048-reflect-v8/src/User2.java new file mode 100644 index 0000000000..1a6049f508 --- /dev/null +++ b/test/048-reflect-v8/src/User2.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Stored as a complex annotation Calendars(Calendar,Calendar,Calendar) +// in the binary. +// (Check for order, should be z,x,y) +@Calendars ({ + @Calendar(dayOfMonth="z"), + @Calendar(dayOfMonth="x"), + @Calendar(dayOfMonth="y") +}) +public class User2 { + +} diff --git a/test/048-reflect-v8/src/UserComplex.java b/test/048-reflect-v8/src/UserComplex.java new file mode 100644 index 0000000000..e26234960b --- /dev/null +++ b/test/048-reflect-v8/src/UserComplex.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Stored as a complex annotation Calendars(Calendar,Calendar) +// followed by a Calendar in the binary. +// In other words { Calendars([C,C]), C } +// +// Note that trying to do {C,Calendars,C} or similar +// is illegal by the JLS. +@Calendar(dayOfMonth="afirst") +@Calendars ({ + @Calendar(dayOfMonth="zsecond"), + @Calendar(dayOfMonth="athird", hour=23) +}) +// @Calendar(dayOfMonth="zlast") // Leave for future ordering test +public class UserComplex { + +} diff --git a/test/048-reflect-v8/src/UserSub.java b/test/048-reflect-v8/src/UserSub.java new file mode 100644 index 0000000000..d60aa6a3f1 --- /dev/null +++ b/test/048-reflect-v8/src/UserSub.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +public class UserSub + extends User + implements IFaceA, IFaceSimple { + +} diff --git a/test/048-reflect-v8/src/UserSub2.java b/test/048-reflect-v8/src/UserSub2.java new file mode 100644 index 0000000000..13e2eb07c8 --- /dev/null +++ b/test/048-reflect-v8/src/UserSub2.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This calendar subsumes anything else we would've normally gotten from the subclass. +@Calendar(dayOfMonth="sub2") +public class UserSub2 + extends User + implements IFaceA, IFaceSimple { + +} diff --git a/test/115-native-bridge/run b/test/115-native-bridge/run index ea2045b86c..aeb5721aac 100644 --- a/test/115-native-bridge/run +++ b/test/115-native-bridge/run @@ -28,4 +28,4 @@ ln -s ${LIBPATH}/libarttestd.so libarttestd2.so LEFT=$(echo ${ARGS} | sed -r 's/-Djava.library.path.*//') RIGHT=$(echo ${ARGS} | sed -r 's/.*Djava.library.path[^ ]* //') MODARGS="${LEFT} -Djava.library.path=`pwd` ${RIGHT}" -exec ${RUN} --runtime-option -XX:NativeBridge=libnativebridgetest.so ${MODARGS} NativeBridgeMain +exec ${RUN} --runtime-option -Xforce-nb-testing --runtime-option -XX:NativeBridge=libnativebridgetest.so ${MODARGS} NativeBridgeMain diff --git a/test/562-bce-preheader/src/Main.java b/test/562-bce-preheader/src/Main.java index 8de0533591..8b527b4f63 100644 --- a/test/562-bce-preheader/src/Main.java +++ b/test/562-bce-preheader/src/Main.java @@ -70,6 +70,26 @@ public class Main { return acc; } + /** + * An artificial example with an inconsistent phi structure during + * dynamic bce that is corrected afterwards. Note that only the last + * assignment is really live, but the other statements set up an + * interesting phi structure. + */ + private static int doit(int[] z) { + int a = 0; + for (int i = 0; i < 10; ++i) { + for (int j = i; j < 10; ++j) { + a = z[i]; + for (int k = 0; k < 10; ++k) { + a += z[k]; + a = z[i]; + } + } + } + return a; + } + public static void main(String args[]) { int[][] x = new int[2][2]; int y; @@ -96,6 +116,9 @@ public class Main { expectEquals(26, foo(a, b, 2)); expectEquals(38, foo(a, b, 3)); + int[] z = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + expectEquals(10, doit(z)); + System.out.println("passed"); } diff --git a/test/565-checker-doublenegbitwise/src/Main.java b/test/565-checker-doublenegbitwise/src/Main.java index d681ad7e8e..c51eda8a66 100644 --- a/test/565-checker-doublenegbitwise/src/Main.java +++ b/test/565-checker-doublenegbitwise/src/Main.java @@ -37,7 +37,7 @@ public class Main { // Note: before the instruction_simplifier pass, Xor's are used instead of // Not's (the simplification happens during the same pass). - /// CHECK-START-ARM64: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (before) + /// CHECK-START: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<CstM1:i\d+>> IntConstant -1 @@ -46,14 +46,14 @@ public class Main { /// CHECK: <<And:i\d+>> And [<<Not1>>,<<Not2>>] /// CHECK: Return [<<And>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (after) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<Or:i\d+>> Or [<<P1>>,<<P2>>] /// CHECK: <<Not:i\d+>> Not [<<Or>>] /// CHECK: Return [<<Not>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (after) /// CHECK: Not /// CHECK-NOT: Not /// CHECK-NOT: And @@ -69,7 +69,7 @@ public class Main { // See note above. // The second Xor has its arguments reversed for no obvious reason. - /// CHECK-START-ARM64: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (before) + /// CHECK-START: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (before) /// CHECK: <<P1:j\d+>> ParameterValue /// CHECK: <<P2:j\d+>> ParameterValue /// CHECK: <<CstM1:j\d+>> LongConstant -1 @@ -78,14 +78,14 @@ public class Main { /// CHECK: <<Or:j\d+>> Or [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Or>>] - /// CHECK-START-ARM64: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (after) + /// CHECK-START: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (after) /// CHECK: <<P1:j\d+>> ParameterValue /// CHECK: <<P2:j\d+>> ParameterValue /// CHECK: <<And:j\d+>> And [<<P1>>,<<P2>>] /// CHECK: <<Not:j\d+>> Not [<<And>>] /// CHECK: Return [<<Not>>] - /// CHECK-START-ARM64: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (after) + /// CHECK-START: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (after) /// CHECK: Not /// CHECK-NOT: Not /// CHECK-NOT: Or @@ -102,7 +102,7 @@ public class Main { * operation incorrectly. */ - /// CHECK-START-ARM64: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (before) + /// CHECK-START: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 @@ -114,7 +114,7 @@ public class Main { /// CHECK: <<Or:i\d+>> Or [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Or>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (after) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<Cst1:i\d+>> IntConstant 1 @@ -124,7 +124,7 @@ public class Main { /// CHECK: <<Not:i\d+>> Not [<<And>>] /// CHECK: Return [<<Not>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (after) /// CHECK: Not /// CHECK-NOT: Not /// CHECK-NOT: Or @@ -143,7 +143,7 @@ public class Main { */ // See first note above. - /// CHECK-START-ARM64: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (before) + /// CHECK-START: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<CstM1:i\d+>> IntConstant -1 @@ -152,13 +152,13 @@ public class Main { /// CHECK: <<Xor:i\d+>> Xor [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Xor>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (after) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<Xor:i\d+>> Xor [<<P1>>,<<P2>>] /// CHECK: Return [<<Xor>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (after) /// CHECK-NOT: Not public static int $opt$noinline$notXorToXor(int a, int b) { @@ -170,7 +170,7 @@ public class Main { * Check that no transformation is done when one Not has multiple uses. */ - /// CHECK-START-ARM64: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (before) + /// CHECK-START: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<CstM1:i\d+>> IntConstant -1 @@ -182,7 +182,7 @@ public class Main { /// CHECK: <<Add:i\d+>> Add [<<And2>>,<<And1>>] /// CHECK: Return [<<Add>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (after) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue /// CHECK: <<One:i\d+>> IntConstant 1 @@ -193,7 +193,7 @@ public class Main { /// CHECK: <<Add:i\d+>> Add [<<And2>>,<<And1>>] /// CHECK: Return [<<Add>>] - /// CHECK-START-ARM64: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (after) + /// CHECK-START: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (after) /// CHECK-NOT: Or public static int $opt$noinline$notMultipleUses(int a, int b) { diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index dfb540edf2..a8938fad40 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -302,18 +302,7 @@ TEST_ART_BROKEN_NO_RELOCATE_TESTS := # Temporarily disable some broken tests when forcing access checks in interpreter b/22414682 TEST_ART_BROKEN_INTERPRETER_ACCESS_CHECK_TESTS := \ - 004-JniTest \ - 005-annotations \ - 044-proxy \ - 073-mismatched-field \ - 088-monitor-verification \ - 135-MirandaDispatch \ - 137-cfi \ - 412-new-array \ - 471-uninitialized-locals \ - 506-verify-aput \ - 554-jit-profile-file \ - 800-smali + 137-cfi ifneq (,$(filter interp-ac,$(COMPILER_TYPES))) ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES),$(PREBUILD_TYPES), \ @@ -470,10 +459,7 @@ TEST_ART_BROKEN_DEFAULT_RUN_TESTS := # Known broken tests for the mips32 optimizing compiler backend. TEST_ART_BROKEN_OPTIMIZING_MIPS_RUN_TESTS := \ - 441-checker-inliner \ 510-checker-try-catch \ - 536-checker-intrinsic-optimization \ - 557-checker-instruction-simplifier-ror \ ifeq (mips,$(TARGET_ARCH)) ifneq (,$(filter optimizing,$(COMPILER_TYPES))) @@ -488,7 +474,6 @@ TEST_ART_BROKEN_OPTIMIZING_MIPS_RUN_TESTS := # Known broken tests for the mips64 optimizing compiler backend. TEST_ART_BROKEN_OPTIMIZING_MIPS64_RUN_TESTS := \ - 557-checker-instruction-simplifier-ror \ ifeq (mips64,$(TARGET_ARCH)) ifneq (,$(filter optimizing,$(COMPILER_TYPES))) |