Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6251458

JVM 1.4.2_06 crash in C2 compiler at IdealLoopTree::policy_do_remove_empty_loop

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P2 P2
    • 6
    • 1.4.2_06
    • hotspot
    • None
    • b50
    • generic
    • solaris_8

        Crash in complier2 :
         --- called from signal handler with signal -14283264 (SIG Unknown) ---
         fed9ac7c int IdealLoopTree::policy_do_remove_empty_loop(PhaseIdealLoop*) (1301724, 94cfebcc, 1301724, 1, 11b568,
        13035f1) + 8c
         fed9b1c8 void IdealLoopTree::iteration_split_impl(PhaseIdealLoop*,Node_List&) (1301724, 94cfebcc, 94cfeb10, ff1cd
        c7c, ff1bee2c, 117e51) +
        c
         fedda768 void IdealLoopTree::iteration_split(PhaseIdealLoop*,Node_List&) (13016ac, 94cfebcc, 94cfeb10, ffffffff,
        fffffff8, 1303890) + 2d8
         fedbf448 PhaseIdealLoop::PhaseIdealLoop #Nvariant 1(PhaseIterGVN&,const PhaseIdealLoop*,int) (ff1cdc7c, 0, 94cfec
        14, 1, 1, 1) + dac
         fee012f8 void Compile::Optimize() (94cff500, ff135b44, 94cff414, ff182000, 0, 0) + 600
         fedff70c Compile::Compile(ciEnv*,ciScope*,ciMethod*,int,int,int) (ff135979, 1ce3af4, 3acc8cc, bb9900, ffffffff, 1
        ) + bac
         fedfbee4 void C2Compiler::compile_method(ciEnv*,ciScope*,ciMethod*,int,int) (35898, 94cffd1c, 0, 1d1ba08, fffffff
        f, 0) + 64
         fedfb6a8 void CompileBroker::invoke_compiler_on_method(CompileTask*) (e8c, 0, ffffffff, ff1c0e70, ff1cdc7c, 1247b
        8) + 61c
         feeab0f0 void CompileBroker::compiler_thread_loop() (ff136181, ff1c1238, 1247b8, 124d68, 319e24, fee68140) + 428
         fee68168 void JavaThread::run() (1247b8, 8, 40, 0, 40, 0) + 284
         fee64648 _start (1247b8, ff260e00, 0, 0, 0, 0) + 134
         ff374b90 _lwp_start (0, 0, 0, 0, 0, 0)

        the code section that is failing is
        The method source:

           From AnnuityConstants class file
           final public static char [] VAR_ANNUITIZED_STATUS = {'O','P','0'};
           final public static char [] FIX_ANNUITIZED_STATUS = {'0'};

           /**
            *Return true if it is a Annutized Contract.
            */
           public boolean isAnnuitized() {

              char [] annuitized = null;
              char contractStatus = ' ';

              if(mAnnuityContract.isVariable()) {
                 annuitized = AnnuityConstants.VAR_ANNUITIZED_STATUS;
              } else {
                 annuitized = AnnuityConstants.FIX_ANNUITIZED_STATUS;
              }


              try {
                 contractStatus = mAnnuityContract.getContractStatus();
              } catch(AnnuityException ae) {
                 AnnuityLogger.error(this.getClass().getName(),"isAnnuitized(),
        Error occurred while attempting "+
                                     "to check Annuitized status or not" + ae,
        Layer.LAYER_BUSINESS_LOGIC,
                                     AnnuityErrors.GENERIC_EXCEPTION_CODE);
              }

              if(annuitized != null) {
                 for(int i = 0; i < annuitized.length; ++i) {
                    if(contractStatus == annuitized[i]) {
                       return true;
                    }
                 }
                 return false;
              } else
                 return false;
           }

        We can see that the optimizer might be interested in removing the if
        because annuitized can never be null.
        Also, since one of the two constant arrays is 1 byte in length, it could
        remove the loop for one of the branches of isVariable()..
        The core implied that an empty loop was being removed.


        ###@###.### 2005-04-06 17:48:39 GMT

              rknippelsunw Ross Knippel (Inactive)
              chrisphi Chris Phillips
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: