diff options
Diffstat (limited to 'chapter20/src/main/java')
| -rw-r--r-- | chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java | 1 | ||||
| -rw-r--r-- | chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java index df362850..94c3e337 100644 --- a/chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java +++ b/chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java @@ -139,6 +139,7 @@ public class LoadNode extends MemOpNode { private Node zero(NewNode nnn) { TypeStruct ts = nnn._ptr._obj; Type zero = ts._fields[ts.findAlias(_alias)]._type.makeZero(); + assert zero.isa(_type); // Catch an uninitialized non-null field return castRO(new ConstantNode(zero).peephole()); } diff --git a/chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java index 4e592235..cb374c58 100644 --- a/chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java +++ b/chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java @@ -101,6 +101,8 @@ public class StoreNode extends MemOpNode { public Parser.ParseException err() { Parser.ParseException err = super.err(); if( err != null ) return err; + if( ptr()._type == Type.TOP ) + return null; // Dead store TypeMemPtr tmp = (TypeMemPtr)ptr()._type; if( tmp._obj.field(_name)._final && !_init ) return Parser.error("Cannot modify final field '"+_name+"'",_loc); |
