SUGGESTED FIX
A sufficient fix for this bug in 1.4.2 is below, but the tiger fix could be expanded to do some cleanup in this area.
------- lcm.cpp -------
753c753
< Node_List *out = new Node_List(Thread::current()->resource_area());
---
> Unique_Node_List *out = new Unique_Node_List(Thread::current()->resource_area());
###@###.### 2003-07-30

2003-07-30

EVALUATION
This bug is a more reproducible version of 4827295.
Build_oop_map() is failing because it can't find a def corresponding to a use. Specifically, it encounters an oop phi node with a NULL input.
The phi input turns null during register allocation when a redundant copy placed by insert_copies() is eliminated in the subsequent build_ifg_physical() pass.
The redundant copy had been placed because the live ranges for two (nearly identical) phi nodes had been merged during aggressive coalescing. Yet, both phis remained alive and did not conflict because one had no output edges.
Both phi nodes were created in GCM during the catch_call_cleanup phase. The phi node with no uses was created because a single call node used the original (pre-cloned) node multiple times, causing it to be put on the out list more than once. The second cloning has no uses because the first cloning took care of both uses. This problem can be solved by changing the Node_List "out" in catch_call_cleanup to a "Unique_Node_List".
Further investigation is needed to determine if the call node with multiple uses is actually a legal graph.
###@###.### 2003-07-24
We can do some housekeeping improvements in catch_call_cleanup() to avoid creation of duplicate phi nodes there.
###@###.### 2003-07-30

2003-07-24

WORK AROUND
Use the following .hotspot_compiler directive:
exclude com/sun/jts/pi/InterceptorImpl receive_request_service_contexts
###@###.### 2003-07-24