hotspot/test/runtime/duplAttributes/DuplAttributes.jcod
author tschatzl
Wed, 19 Aug 2015 13:47:40 +0200
changeset 32377 5ee15c417d02
parent 24432 482afb00f089
permissions -rw-r--r--
8003237: G1: Reduce unnecessary (and failing) allocation attempts when handling an evacuation failure Summary: Remember for every generation whether the memory for that generation has already been exhausted. If so, do not try to get a new region for these generations. Further, if the last generation is full, early exit from copy_to_survivor_space. Reviewed-by: jmasa, brutisso

/*
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */


/*
 * This file contains ten different sub-tests.  Each sub-test consists of a
 * class with a different case of an invalid duplicate attribute.  The main
 * test runs each of these tests individually.  If any of them fail then the
 * whole test fails.
 */



/*
 * This test contains a class with invalid duplicate AnnotationDefault attributes.
 */
class AnnotationDefaultDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "AnnotationDefault"; // #9
    Utf8 "LAnnotationDefaultI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "AnnotationDefaultDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "AnnotationDefaultDupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
        ;

        Attr(#9) { // AnnotationDefault
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end AnnotationDefault
    // wrong:
        ;
        Attr(#9) { // AnnotationDefault
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end AnnotationDefault
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // AnnotationDefault
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end AnnotationDefault
  } // Attributes

} // end class



/*
 * This test contains a class with invalid duplicate RuntimeInvisibleAnnotations
 * attributes.
 */
class ClassInvisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "RuntimeInvisibleAnnotations"; // #9
    Utf8 "LClassInvisAnnotsI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "ClassInvisAnnotsDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "ClassInvisAnnotsDupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // RuntimeInvisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeInvisibleAnnotations
// wrong:
    ;
    Attr(#9) { // RuntimeInvisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeInvisibleAnnotations
// end wrong
  } // Attributes

} // end class



/*
 * This test contains a class with invalid duplicate RuntimeVisibleAnnotations
 * attributes.
 */
class ClassVisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "RuntimeVisibleAnnotations"; // #9
    Utf8 "LClassVisAnnotsI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "ClassVisAnnotsDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "ClassVisAnnotsDupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // RuntimeVisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeVisibleAnnotations
// wrong:
    ;
    Attr(#9) { // RuntimeVisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeVisibleAnnotations
// end wrong
  } // Attributes

} // end class



/*
 * This test contains a field with invalid duplicate RuntimeInvisibleAnnotations
 * attributes.
 */
class FieldInvisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #4 #16; // #1
    Method #17 #18; // #2
    class #19; // #3
    class #20; // #4
    Utf8 "fld"; // #5
    Utf8 "Ljava/util/ArrayList;"; // #6
    Utf8 "Signature"; // #7
    Utf8 "Ljava/util/ArrayList<Ljava/lang/Object;>;"; // #8
    Utf8 "RuntimeInvisibleAnnotations"; // #9
    Utf8 "LFieldInvisAnnotsI;"; // #10
    Utf8 "<init>"; // #11
    Utf8 "()V"; // #12
    Utf8 "Code"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #11 #12; // #16
    class #21; // #17
    NameAndType #14 #15; // #18
    Utf8 "FieldInvisAnnotsDup"; // #19
    Utf8 "java/lang/Object"; // #20
    Utf8 "FieldInvisAnnotsDupChecker"; // #21
  } // Constant Pool

  0x0021; // access
  #3;// this_cpx
  #4;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
    { // Member
      0x0001; // access
      #5; // name_cpx
      #6; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Signature
          #8;
        } // end Signature
        ;
        Attr(#9) { // RuntimeInvisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeInvisibleAnnotations
    // wrong:
        ;
        Attr(#9) { // RuntimeInvisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeInvisibleAnnotations
    // end wrong
      } // Attributes
    } // Member
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #11; // name_cpx
      #12; // sig_cpx
      [] { // Attributes
        Attr(#13) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#13) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80002AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
  } // Attributes
} // end class



/*
 * This test contains a field with invalid duplicate RuntimeVisibleAnnotations
 * attributes.
 */
class FieldVisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #4 #16; // #1
    Method #17 #18; // #2
    class #19; // #3
    class #20; // #4
    Utf8 "fld"; // #5
    Utf8 "Ljava/util/ArrayList;"; // #6
    Utf8 "Signature"; // #7
    Utf8 "Ljava/util/ArrayList<Ljava/lang/Object;>;"; // #8
    Utf8 "RuntimeVisibleAnnotations"; // #9
    Utf8 "LFieldVisAnnotsI;"; // #10
    Utf8 "<init>"; // #11
    Utf8 "()V"; // #12
    Utf8 "Code"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #11 #12; // #16
    class #21; // #17
    NameAndType #14 #15; // #18
    Utf8 "FieldVisAnnotsDup"; // #19
    Utf8 "java/lang/Object"; // #20
    Utf8 "FieldVisAnnotsDupChecker"; // #21
  } // Constant Pool

  0x0021; // access
  #3;// this_cpx
  #4;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
    { // Member
      0x0001; // access
      #5; // name_cpx
      #6; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Signature
          #8;
        } // end Signature
        ;
        Attr(#9) { // RuntimeVisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeVisibleAnnotations
    // wrong:
        ;
        Attr(#9) { // RuntimeVisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeVisibleAnnotations
    // end wrong
      } // Attributes
    } // Member
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #11; // name_cpx
      #12; // sig_cpx
      [] { // Attributes
        Attr(#13) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#13) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80002AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
  } // Attributes
} // end class



/*
 * This test contains a method with invalid duplicate RuntimeInvisibleAnnotations
 * attributes.
 */
class MethInvisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "RuntimeInvisibleAnnotations"; // #9
    Utf8 "LMethInvisAnnotsI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "MethInvisAnnotsDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "MethInvisAnnotsDupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
        ;

        Attr(#9) { // RuntimeInvisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeInvisibleAnnotations
    // wrong:
        ;
        Attr(#9) { // RuntimeInvisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeInvisibleAnnotations
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // RuntimeInvisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeInvisibleAnnotations
  } // Attributes

} // end class



/*
 * This test contains a method with invalid duplicate
 * RuntimeInvisibleParameterAnnotations attributes.
 */
class MethInvisParamAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #4 #16; // #1
    Method #17 #18; // #2
    class #19; // #3
    class #20; // #4
    Utf8 "<init>"; // #5
    Utf8 "()V"; // #6
    Utf8 "Code"; // #7
    Utf8 "m"; // #8
    Utf8 "()I"; // #9
    Utf8 "Signature"; // #10
    Utf8 "<T:Ljava/lang/Object;>()I"; // #11
    Utf8 "RuntimeInvisibleParameterAnnotations"; // #12
    Utf8 "LMethInvisParamAnnotsI;"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #5 #6; // #16
    class #21; // #17
    NameAndType #14 #15; // #18
    Utf8 "MethInvisParamAnnotsDup"; // #19
    Utf8 "java/lang/Object"; // #20
    Utf8 "MethInvisParamAnnotsDupChecker"; // #21
  } // Constant Pool

  0x0021; // access
  #3;// this_cpx
  #4;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #5; // name_cpx
      #6; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0001; // access
      #8; // name_cpx
      #9; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x03AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
        ;
        Attr(#10) { // Signature
          #11;
        } // end Signature
        ;
        Attr(#12) { // RuntimeInvisibleParameterAnnotations
          0x0001010000000D00;
          0x00;
        } // end RuntimeInvisibleParameterAnnotations
// wrong:
        ;
        Attr(#12) { // RuntimeInvisibleParameterAnnotations
          0x0001010000000D00;
          0x00;
        } // end RuntimeInvisibleParameterAnnotations
// end wrong
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80002AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
  } // Attributes
} // end class



/*
 * This test contains a method with invalid duplicate RuntimeVisibleAnnotations
 * attributes.
 */
class MethVisAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "RuntimeVisibleAnnotations"; // #9
    Utf8 "LMethodVisAnnotsDupI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "MethVisAnnotsDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "MethVisAnnotsDupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
        ;

        Attr(#9) { // RuntimeVisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeVisibleAnnotations
    // wrong:
        ;
        Attr(#9) { // RuntimeVisibleAnnotations
          [] { // type annotations
            { // type annotation
              0x00;  // target_type
              0x00;  // type_parameter_index
              []b { //  type_path
              }

              #10; // type_index
              [] { // element_value_pairs
              } // element_value_pairs
            } // type annotation
          } // type annotations
        } // end RuntimeVisibleAnnotations
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // RuntimeVisibleAnnotations
      [] { // type annotations
        { // type annotation
          0x00;  // target_type
          0x00;  // type_parameter_index
          []b { //  type_path
          }

          #10; // type_index
          [] { // element_value_pairs
          } // element_value_pairs
        } // type annotation
      } // type annotations
    } // end RuntimeVisibleAnnotations
  } // Attributes

} // end class



/*
 * This test contains a method with invalid duplicate
 * RuntimeVisibleParameterAnnotations attributes.
 */
class MethVisParamAnnotsDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #4 #16; // #1
    Method #17 #18; // #2
    class #19; // #3
    class #20; // #4
    Utf8 "<init>"; // #5
    Utf8 "()V"; // #6
    Utf8 "Code"; // #7
    Utf8 "m"; // #8
    Utf8 "()I"; // #9
    Utf8 "Signature"; // #10
    Utf8 "<T:Ljava/lang/Object;>()I"; // #11
    Utf8 "RuntimeVisibleParameterAnnotations"; // #12
    Utf8 "LMethVisParamAnnotsI;"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #5 #6; // #16
    class #21; // #17
    NameAndType #14 #15; // #18
    Utf8 "MethVisParamAnnotsDup"; // #19
    Utf8 "java/lang/Object"; // #20
    Utf8 "MethVisParamAnnotsDupChecker"; // #21
  } // Constant Pool

  0x0021; // access
  #3;// this_cpx
  #4;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #5; // name_cpx
      #6; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0001; // access
      #8; // name_cpx
      #9; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x03AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
        ;
        Attr(#10) { // Signature
          #11;
        } // end Signature
        ;
        Attr(#12) { // RuntimeVisibleParameterAnnotations
          0x0001010000000D00;
          0x00;
        } // end RuntimeVisibleParameterAnnotations
// wrong:
        ;
        Attr(#12) { // RuntimeVisibleParameterAnnotations
          0x0001010000000D00;
          0x00;
        } // end RuntimeVisibleParameterAnnotations
// end wrong
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#7) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80002AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
  } // Attributes
} // end class



/*
 * This test contains a method with invalid duplicate SourceDebugExtension
 * attributes.
 */
class SrcDbgExtDup {
  0xCAFEBABE;
  0; // minor version
  52; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #3 #11; // #1
    class #12; // #2
    class #13; // #3
    Utf8 "<init>"; // #4
    Utf8 "()V"; // #5
    Utf8 "Code"; // #6
    Utf8 "Signature"; // #7
    Utf8 "<T:Ljava/lang/Object;>Ljava/lang/Object;"; // #8
    Utf8 "SourceDebugExtension"; // #9
    Utf8 "LSrcDbgExtDupI;"; // #10
    NameAndType #4 #5; // #11
    Utf8 "SrcDbgExtDup"; // #12
    Utf8 "java/lang/Object"; // #13
    Utf8 "run"; // #14
    Utf8 "([Ljava/lang/String;Ljava/io/PrintStream;)I"; // #15
    NameAndType #14 #15; // #16
    class #19; // #17
    Method #17 #16; // #18
    Utf8 "SrcDbgExt_dupChecker"; // #19
  } // Constant Pool

  0x0021; // access
  #2;// this_cpx
  #3;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #4; // name_cpx
      #5; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #14; // name_cpx
      #15; // sig_cpx
      [] { // Attributes
        Attr(#6) { // Code
          2; // max_stack
          2; // max_locals
          Bytes[]{
            0x2A2BB80012AC;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#7) { // Signature
      #8;
    } // end Signature
    ;
    Attr(#9) { // SourceDebugExtension
      [] { // debug_extensions
        { // type debug_extension
          []b { //  type_path
          }
        } // type debug_extension
      } // type debug_extensions
    } // end SourceDebugExtension
// wrong:
    ;
    Attr(#9) { // SourceDebugExtension
      [] { // debug_extensions
        { // type debug_extension
          []b { //  type_path
          }
        } // type debug_extension
      } // type debug_extensions
    } // end SourceDebugExtension
// end wrong
  } // Attributes

} // end class