Closed Bug 193418 Opened 22 years ago Closed 22 years ago

Empty block {} triggers NullPointerException when optimization >= 1

Categories

(Rhino Graveyard :: Compiler, defect)

x86
Linux
defect
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: user, Assigned: norrisboyd)

Details

Attachments

(1 file)

Empty block {} triggers NullPointerException when optimization >= 1

With optimization level set to 1 or higher empty block { } usage can trigger
NullPointerException in the compiler.

To reproduce, run the following script against Rhino shell with the optimization
level set to 1:

//-------TEST START --------------------------------
var test = false;

function f() {
  while (0) {
    {  }
  }
  test = true;
}

f();

print(test ? "OK" : "FAILED!");
//-------TEST END ----------------------------------


The test should print "OK" but instead the following stack trace appears:


Exception in thread "main" java.lang.NullPointerException
        at org.mozilla.javascript.optimizer.Block.buildBlocks(Block.java:137)
        at
org.mozilla.javascript.optimizer.Optimizer.optimizeFunction(Optimizer.java:71)
        at org.mozilla.javascript.optimizer.Optimizer.optimize(Optimizer.java:149)
        at org.mozilla.javascript.optimizer.Codegen.compile(Codegen.java:95)
        at org.mozilla.javascript.Context.compile(Context.java:2072)
        at org.mozilla.javascript.Context.compile(Context.java:2002)
        at org.mozilla.javascript.Context.compileReader(Context.java:897)
        at org.mozilla.javascript.Context.evaluateReader(Context.java:815)
        at org.mozilla.javascript.tools.shell.Main.evaluateReader(Main.java:363)
        at org.mozilla.javascript.tools.shell.Main.processFileSecure(Main.java:354)
        at org.mozilla.javascript.tools.shell.Main.processFile(Main.java:291)
        at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:283)
        at org.mozilla.javascript.tools.shell.Main.exec(Main.java:103)
        at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
The bug caused by missed check in StmtNodeIterator.nextNode for a possible null
result of findFirstInterestingNode inside the search loop which made search to
stop preliminary with non-empty stack.

The patch fixes this and integrates StmtNodeIterator into
Optimizer.buildStatementList as StmtNodeIterator was used only by
buildStatementList and the new version is simpler.
I commited the fix
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Testcase added to JS testsuite:

      mozilla/js/tests/js1_5/Regress/regress-193418.js
Verified FIXED. The above testcase now passes in the Rhino shell.
I tested with optimization levels set to -1, 0, 1, and 9.

Before this patch was committed, the test failed as Igor described
above, whenever the optimization was set to be greater than 0.
Status: RESOLVED → VERIFIED
Targeting as resolved against 1.5R5
Target Milestone: --- → 1.5R5
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: