summaryrefslogtreecommitdiff
path: root/chapter25
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-14 13:27:36 -0700
committerCliff Click <cliffc@acm.org>2026-09-14 13:27:36 -0700
commite44bf7549dedb51397e3d430935f8eed4d35096e (patch)
treead082b0945ef7b7f7fe3192ef9dafe7b0cae1583 /chapter25
parent8c5f7683eb4366fbb452ed30c11829daabeaddd2 (diff)
downloadSimple-e44bf7549dedb51397e3d430935f8eed4d35096e.tar.gz
Simple-e44bf7549dedb51397e3d430935f8eed4d35096e.zip
Handle dying escapenode
Diffstat (limited to 'chapter25')
-rw-r--r--chapter25/helloWorld.exe.stackdump16
-rw-r--r--chapter25/src/main/java/com/seaofnodes/simple/node/LoadNode.java4
2 files changed, 19 insertions, 1 deletions
diff --git a/chapter25/helloWorld.exe.stackdump b/chapter25/helloWorld.exe.stackdump
new file mode 100644
index 00000000..369cf738
--- /dev/null
+++ b/chapter25/helloWorld.exe.stackdump
@@ -0,0 +1,16 @@
+Exception: STATUS_ACCESS_VIOLATION at rip=001004010BB
+rax=0000000100405000 rbx=0000000000000001 rcx=00000001004010D0
+rdx=00000001004010A6 rsi=0000000000000015 rdi=0000000800049E60
+r8 =00000000FFFFC568 r9 =000000010040500C r10=0000000100000000
+r11=00000001004010A6 r12=0000000800051F10 r13=00000000FFFFCC40
+r14=00000000FFFFFFFF r15=00000000FFFFCC79
+rbp=0000000800051EF0 rsp=00000000FFFFCB50
+program=C:\Users\cliffc\Desktop\Simple\chapter25\build\objs\helloWorld.exe, pid 1066, thread main
+cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
+Stack trace:
+Frame Function Args
+00800051EF0 001004010BB (0000000000D, 00000000000, 00000000015, 0010040181E)
+00800051EF0 00000000001 (00000000000, 00000000015, 0010040181E, 00000000015)
+00800051EF0 0010040500C (00000000015, 0010040181E, 00000000015, 00800049E60)
+00800051EF0 0000000000D (00000000015, 0010040181E, 00000000015, 00800049E60)
+End of stack trace
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?