diff options
| author | Cliff Click <cliffc@acm.org> | 2026-09-14 13:27:36 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-09-14 13:27:36 -0700 |
| commit | e44bf7549dedb51397e3d430935f8eed4d35096e (patch) | |
| tree | ad082b0945ef7b7f7fe3192ef9dafe7b0cae1583 /chapter25/src/main | |
| parent | 8c5f7683eb4366fbb452ed30c11829daabeaddd2 (diff) | |
| download | Simple-e44bf7549dedb51397e3d430935f8eed4d35096e.tar.gz Simple-e44bf7549dedb51397e3d430935f8eed4d35096e.zip | |
Handle dying escapenode
Diffstat (limited to 'chapter25/src/main')
| -rw-r--r-- | chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java index b27da676..f5b61048 100644 --- a/chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java +++ b/chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java @@ -189,8 +189,10 @@ public class LoadNode extends MemOpNode { case EscapeNode esc: if( esc.self()==ptr ) // Proved equal { mem = esc.priv(); break; } + // Mal-formed, dying + if( !(esc.self().in(0) instanceof NewNode) ) + break outer; // Two NewNodes are always unequal - assert esc.self().in(0) instanceof NewNode; if( ptr.in(0) instanceof NewNode ) { mem = esc.pub(); break; } // TODO: Can we prove unequal? |
