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

ERROR: sun.tools.java.CompilerError

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 1.1.6
    • tools
    • sparc
    • solaris_2.6



      Name: diC59631 Date: 08/11/98


      -----> Ok. The compiler ask to report this:

      cuba-vthierry% setenv CLASSPATH /usr/local/java11/lib
      cuba-vthierry% javac Exec.java

      -----> With the file:

      /**************************************************************************
      * ###@###.###, Copyright (C) 1996. All rights reserved. *
      **************************************************************************/

      package FR.inria.duck.util;

      import java.io.*;

      /**
       * This class encapsulates an operating system exec interface.
       * @see Runtime for more information on the Runtime environment.
       * For example: <i>
       * new ItemDialog(new Exec(command).get(0));
       * </i> execute a command and pop the result in a message window.
       */

      public class Exec {

          // Thread which executes the command

          private Process process;

          private Wait wait;

          private class Wait extends Thread {
      public final void run() {
      try {
      process.waitFor();
      } catch(Exception e) { }
      }
          }

          private Run run;

          private class Run extends Thread {

      public final void run() {
      try {
      process = Runtime.getRuntime().exec(command);
      (wait = new Wait()).start();
      int c;
      output = new StringBuffer();
      InputStream stdout = process.getInputStream();
      while(wait.isAlive() && ((c = stdout.read()) != -1)) {
      output.append((char) c);
      if (action != null)
      action.run(null, output);
      }
      stdout.close();
      if (process.exitValue() != 0) {
      output.append("\n Error in Exec: Exit Value = " +
      process.exitValue() + "\n");
      InputStream stderr = process.getErrorStream();
      while((c = stderr.read()) != -1)
      output.append((char) c);
      stderr.close();
      }
      if (action != null)
      action.run(new Integer(process.exitValue()), output);
      } catch(Exception e) {
      if (output == null)
      output = new StringBuffer();
      output.append("Error in Exec: " + e.getMessage());
      }
      }
          }

          /** Parameter:
           * @param command The command to be executed.
           * - Optional parameter:
           * @param action An action to run during command execution.
           */
          private String command;

          private StringBuffer output;

          private Runnable action;

          public Exec(String command, Exec.Runnable action) {
      this.action = action;
      this.command = command;
      output = null;
      (run = new Run()).start();
          }
          /*!*/ public Exec(String command) {
      this(command, null);
          }


          /** Runnable called during command execution:
           * - During the command execution, the runnable is called several time
           * (in fact after each stdout char has been read) with:
           * <i>status = null</i>, <i>output = stdout-buffer</i>
           * - After the command completion, the runnable is called a last time
           * width:
           * <i>status = command-exit-value</i>, <i>output = final-stdout-buffer</a>
           * thus the Runnable detects this last call by checking if status != null.
           */
          public interface Runnable {
      public abstract void run(Integer status, StringBuffer output);
          }

          /**
           * Get the command output or null if not yet finished.
           */
          public String get() {
      if (output == null)
      return null;
      else
      return output.toString();
          }

          /**
           * Wait until the end of the execution and get the command output.
           * @param time Optional maximal waiting time in second.
           */

          public String get(int time) {
      if (time == 0)
      time = -1;
      while(time != 0) {
      if (output != null)
      return get();
      try {
      Thread.sleep(1000);
      } catch (InterruptedException e) { }
      time--;
      }
      return get();
          }

          /**
           * Stop the execution of the command.
           */

          public final void stop() {
      if (process != null)
      process.destroy();
      try {
      Thread.sleep(100);
      } catch (InterruptedException e) { }
      if (run != null)
      run.stop();
      if (wait != null)
      wait.stop();
          }
      }

      ----> and outputing this:

      ERROR: sun.tools.java.CompilerError: stack under flow: 40: invokevirtual vo
      id start() = -1
      -- listing --
      $38:
      38: try 499363399
      39: aload 0
      39: getfield FR.inria.duck.util.Exec this$0
      39: invokestatic java.lang.Runtime getRuntime()
      39: aload 0
      39: getfield FR.inria.duck.util.Exec this$0
      39: invokestatic java.lang.String access$0(FR.inria.duck.util.Exec)
      39: invokevirtual java.lang.Process exec(java.lang.String)
      39: invokestatic void access$2(FR.inria.duck.util.Exec, java.lang.Process)
      40: aload 0
      40: getfield FR.inria.duck.util.Exec this$0
      40: new inner class FR.inria.duck.util.Exec. Wait
      40: dup
      40: aload 0
      40: getfield FR.inria.duck.util.Exec this$0
      40: invokespecial FR.inria.duck.util.Exec. Wait(FR.inria.duck.util.Exec)
      40: invokestatic void access$4(FR.inria.duck.util.Exec, FR.inria.duck.util.E
      xec. Wait)
      40: invokevirtual void start()
      42: aload 0
      42: getfield FR.inria.duck.util.Exec this$0
      42: new class java.lang.StringBuffer
      42: dup
      42: invokespecial java.lang.StringBuffer()
      42: invokestatic void access$6(FR.inria.duck.util.Exec, java.lang.StringBuff
      er)
      43: aload 0
      43: getfield FR.inria.duck.util.Exec this$0
      43: invokestatic java.lang.Process access$1(FR.inria.duck.util.Exec)
      43: invokevirtual java.io.InputStream getInputStream()
      43: astore 2
      44: goto $43:
      $44:
      45: aload 0
      45: getfield FR.inria.duck.util.Exec this$0
      45: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      45: iload 1
      45: i2c
      45: invokevirtual java.lang.StringBuffer append(char)
      45: pop
      46: aload 0
      46: getfield FR.inria.duck.util.Exec this$0
      46: invokestatic FR.inria.duck.util.Exec. Runnable access$7(FR.inria.duck.ut
      il.Exec)
      46: ifnull $43:
      47: aload 0
      47: getfield FR.inria.duck.util.Exec this$0
      47: invokestatic FR.inria.duck.util.Exec. Runnable access$7(FR.inria.duck.ut
      il.Exec)
      47: aconst_null
      47: aload 0
      47: getfield FR.inria.duck.util.Exec this$0
      47: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      47: invokeinterface void run(java.lang.Integer, java.lang.StringBuffer)
      $43:
      44: aload 0
      44: getfield FR.inria.duck.util.Exec this$0
      44: invokestatic FR.inria.duck.util.Exec. Wait access$3(FR.inria.duck.util.E
      xec)
      44: invokevirtual boolean isAlive()
      44: ifeq $42:
      44: aload 2
      44: invokevirtual int read()
      44: dup
      44: istore 1
      44: iconst_m1 -1
      44: if_icmpne $44:
      $42:
      49: aload 2
      49: invokevirtual void close()
      50: aload 0
      50: getfield FR.inria.duck.util.Exec this$0
      50: invokestatic java.lang.Process access$1(FR.inria.duck.util.Exec)
      50: invokevirtual int exitValue()
      50: ifeq $47:
      51: aload 0
      51: getfield FR.inria.duck.util.Exec this$0
      51: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      51: new class java.lang.StringBuffer
      51: dup
      51: ldc "
       Error in Exec: Exit Value = "
      51: invokespecial java.lang.StringBuffer(java.lang.String)
      52: aload 0
      52: getfield FR.inria.duck.util.Exec this$0
      52: invokestatic java.lang.Process access$1(FR.inria.duck.util.Exec)
      52: invokevirtual int exitValue()
      52: invokevirtual java.lang.StringBuffer append(int)
      52: ldc "
      "
      52: invokevirtual java.lang.StringBuffer append(java.lang.String)
      52: invokevirtual java.lang.String toString()
      51: invokevirtual java.lang.StringBuffer append(java.lang.String)
      51: pop
      53: aload 0
      53: getfield FR.inria.duck.util.Exec this$0
      53: invokestatic java.lang.Process access$1(FR.inria.duck.util.Exec)
      53: invokevirtual java.io.InputStream getErrorStream()
      53: astore 3
      54: goto $49:
      $50:
      55: aload 0
      55: getfield FR.inria.duck.util.Exec this$0
      55: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      55: iload 1
      55: i2c
      55: invokevirtual java.lang.StringBuffer append(char)
      55: pop
      $49:
      54: aload 3
      54: invokevirtual int read()
      54: dup
      54: istore 1
      54: iconst_m1 -1
      54: if_icmpne $50:
      56: aload 3
      56: invokevirtual void close()
      $47:
      58: aload 0
      58: getfield FR.inria.duck.util.Exec this$0
      58: invokestatic FR.inria.duck.util.Exec. Runnable access$7(FR.inria.duck.ut
      il.Exec)
      58: ifnull $39:
      59: aload 0
      59: getfield FR.inria.duck.util.Exec this$0
      59: invokestatic FR.inria.duck.util.Exec. Runnable access$7(FR.inria.duck.ut
      il.Exec)
      59: new class java.lang.Integer
      59: dup
      59: aload 0
      59: getfield FR.inria.duck.util.Exec this$0
      59: invokestatic java.lang.Process access$1(FR.inria.duck.util.Exec)
      59: invokevirtual int exitValue()
      59: invokespecial java.lang.Integer(int)
      59: aload 0
      59: getfield FR.inria.duck.util.Exec this$0
      59: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      59: invokeinterface void run(java.lang.Integer, java.lang.StringBuffer)
      $40:
      38: return
      $41:
      60: astore 1
      61: aload 0
      61: getfield FR.inria.duck.util.Exec this$0
      61: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      61: ifnonnull $52:
      62: aload 0
      62: getfield FR.inria.duck.util.Exec this$0
      62: new class java.lang.StringBuffer
      62: dup
      62: invokespecial java.lang.StringBuffer()
      62: invokestatic void access$6(FR.inria.duck.util.Exec, java.lang.StringBuff
      er)
      $52:
      63: aload 0
      63: getfield FR.inria.duck.util.Exec this$0
      63: invokestatic java.lang.StringBuffer access$5(FR.inria.duck.util.Exec)
      63: new class java.lang.StringBuffer
      63: dup
      63: ldc "Error in Exec: "
      63: invokespecial java.lang.StringBuffer(java.lang.String)
      63: aload 1
      63: invokevirtual java.lang.String getMessage()
      63: invokevirtual java.lang.StringBuffer append(java.lang.String)
      63: invokevirtual java.lang.String toString()
      63: invokevirtual java.lang.StringBuffer append(java.lang.String)
      63: pop
      $39:
      37: return
      sun.tools.java.CompilerError: stack under flow: 40: invokevirtual void start
      () = -1
              at sun.tools.asm.Assembler.balance(Assembler.java)
              at sun.tools.asm.Assembler.write(Assembler.java)
              at sun.tools.javac.SourceClass.compileClass(SourceClass.java)
              at sun.tools.javac.SourceClass.compile(SourceClass.java)
              at sun.tools.javac.Main.compile(Main.java)
              at sun.tools.javac.Main.main(Main.java)
      error: An error has occurred in the compiler; please file a bug report (http://j
      ava.sun.com/cgi-bin/bugreport.cgi).
      1 error

      -----> THIS MAY HELP YOU:

       The bug diseapears if the line 40 :

         // (waitFor = new WaitFor()).start();

      is escaped by a //.
      (Review ID: 36748)
      ======================================================================

            wmaddoxsunw William Maddox (Inactive)
            dindrigo Daniel Indrigo (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: