Revert "Reject classes inheriting from themselves directly or transitively."

This reverts commit 498bb81f8725e2cf8f5ce1aa6b49ab5a9c5bb4c9.

Reverting not to break apps that do not follow the class
definition order rules.

Bug: 28797012
Bug: 28685551
Bug: 27682580
Change-Id: I2491b5aefe3ca8a364a05f7dfbc899c5a5757712
diff --git a/runtime/dex_file_verifier.cc b/runtime/dex_file_verifier.cc
index c76044dd5..bbffbbb 100644
--- a/runtime/dex_file_verifier.cc
+++ b/runtime/dex_file_verifier.cc
@@ -1956,29 +1956,6 @@
   }
 
   if (item->superclass_idx_ != DexFile::kDexNoIndex16) {
-    // Check that a class does not inherit from itself directly (by having
-    // the same type idx as its super class).
-    if (UNLIKELY(item->superclass_idx_ == item->class_idx_)) {
-      ErrorStringPrintf("Class with same type idx as its superclass: '%d'", item->class_idx_);
-      return false;
-    }
-
-    // Check that a class is defined after its super class (if the
-    // latter is defined in the same Dex file).
-    const DexFile::ClassDef* superclass_def = dex_file_->FindClassDef(item->superclass_idx_);
-    if (superclass_def != nullptr) {
-      // The superclass is defined in this Dex file.
-      if (superclass_def > item) {
-        // ClassDef item for super class appearing after the class' ClassDef item.
-        ErrorStringPrintf("Invalid class definition ordering:"
-                          " class with type idx: '%d' defined before"
-                          " superclass with type idx: '%d'",
-                          item->class_idx_,
-                          item->superclass_idx_);
-        return false;
-      }
-    }
-
     LOAD_STRING_BY_TYPE(superclass_descriptor, item->superclass_idx_,
                         "inter_class_def_item superclass_idx")
     if (UNLIKELY(!IsValidDescriptor(superclass_descriptor) || superclass_descriptor[0] != 'L')) {
diff --git a/runtime/dex_file_verifier_test.cc b/runtime/dex_file_verifier_test.cc
index fa6cfee..3741c1e 100644
--- a/runtime/dex_file_verifier_test.cc
+++ b/runtime/dex_file_verifier_test.cc
@@ -184,12 +184,6 @@
   return dex_file;
 }
 
-// To generate base64 encoded Dex file contents (such as kGoodTestDex,
-// below) from Smali files, use:
-//
-//   smali -o classes.dex class1.smali [class2.smali ...]
-//   base64 classes.dex >classes.dex.base64
-
 // For reference.
 static const char kGoodTestDex[] =
     "ZGV4CjAzNQDrVbyVkxX1HljTznNf95AglkUAhQuFtmKkAgAAcAAAAHhWNBIAAAAAAAAAAAQCAAAN"
@@ -1527,84 +1521,4 @@
   }
 }
 
-// Generated from:
-//
-//   .class public LB28685551;
-//   .super LB28685551;
-
-static const char kClassExtendsItselfTestDex[] =
-    "ZGV4CjAzNQDtGF0irRLsVfRf3hwTL3zgNupO1a8AkTEEAQAAcAAAAHhWNBIAAAAAAAAAAKwAAAAB"
-    "AAAAcAAAAAEAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHgAAABsAAAAmAAAAJgA"
-    "AAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAALTEIyODY4NTU1MTsAAAAAAAAA"
-    "AAcAAAAAAAAAAQAAAAAAAAABAAAAAQAAAHAAAAACAAAAAQAAAHQAAAAGAAAAAQAAAHgAAAACIAAA"
-    "AQAAAJgAAAADEAAAAQAAAKgAAAAAEAAAAQAAAKwAAAA=";
-
-TEST_F(DexFileVerifierTest, ClassExtendsItself) {
-  VerifyModification(
-      kClassExtendsItselfTestDex,
-      "class_extends_itself",
-      [](DexFile* dex_file ATTRIBUTE_UNUSED) { /* empty */ },
-      "Class with same type idx as its superclass: '0'");
-}
-
-// Generated from:
-//
-//   .class public LFoo;
-//   .super LBar;
-//
-// and:
-//
-//    .class public LBar;
-//    .super LFoo;
-
-static const char kClassesExtendOneAnotherTestDex[] =
-    "ZGV4CjAzNQDFHx5oxT079TdKMJ3M37hx96CSFQA8MaUsAQAAcAAAAHhWNBIAAAAAAAAAANQAAAAC"
-    "AAAAcAAAAAIAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAABsAAAAwAAAAMAA"
-    "AADHAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAABAAAAAQAA"
-    "AAAAAAD/////AAAAAAAAAAAAAAAABUxCYXI7AAVMRm9vOwAAAAAAAAAHAAAAAAAAAAEAAAAAAAAA"
-    "AQAAAAIAAABwAAAAAgAAAAIAAAB4AAAABgAAAAIAAACAAAAAAiAAAAIAAADAAAAAAxAAAAEAAADQ"
-    "AAAAABAAAAEAAADUAAAA";
-
-TEST_F(DexFileVerifierTest, ClassesExtendOneAnother) {
-  VerifyModification(
-      kClassesExtendOneAnotherTestDex,
-      "classes_extend_one_another",
-      [](DexFile* dex_file ATTRIBUTE_UNUSED) { /* empty */ },
-      "Invalid class definition ordering: class with type idx: '1' defined before"
-      " superclass with type idx: '0'");
-}
-
-// Generated from:
-//
-//   .class public LAll;
-//   .super LYour;
-//
-// and:
-//
-//   .class public LYour;
-//   .super LBase;
-//
-// and:
-//
-//   .class public LBase;
-//   .super LAll;
-
-static const char kCircularClassInheritanceTestDex[] =
-    "ZGV4CjAzNQDJJQtdMzp/mPagoltMlDWgd9MqiEtamoVcAQAAcAAAAHhWNBIAAAAAAAAAAAQBAAAD"
-    "AAAAcAAAAAMAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAIgAAAB0AAAA6AAAAOgA"
-    "AADvAAAA9wAAAAAAAAABAAAAAgAAAAEAAAABAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAgAA"
-    "AAEAAAABAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAA/////wAAAAAAAAAA"
-    "AAAAAAVMQWxsOwAGTEJhc2U7AAZMWW91cjsAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAQAAAAMAAABw"
-    "AAAAAgAAAAMAAAB8AAAABgAAAAMAAACIAAAAAiAAAAMAAADoAAAAAxAAAAEAAAAAAQAAABAAAAEA"
-    "AAAEAQAA";
-
-TEST_F(DexFileVerifierTest, CircularClassInheritance) {
-  VerifyModification(
-      kCircularClassInheritanceTestDex,
-      "circular_class_inheritance",
-      [](DexFile* dex_file ATTRIBUTE_UNUSED) { /* empty */ },
-      "Invalid class definition ordering: class with type idx: '1' defined before"
-      " superclass with type idx: '0'");
-}
-
 }  // namespace art