Description
In constructors, the access to final fields should happen via Heap.
But instead, it uses the new final function.
Please describe your concern in detail!
Example Java
public class A {
public final Object o;
/*@ ensures true; requires true; */
public A() {
o = new Object();
//@ assert o != null;
}
}
Reproducible
always
Steps to reproduce
Describe the steps needed to reproduce the issue.
- Load
A.java.
- Run auto
- Inspect the translation of
JMLAssertStatement w/o pretty-printing.
What is your expected behavior and what was the actual behavior?
Object::final(self, A::#o) becomes Object::select(heap, self, A::#o).
Description
In constructors, the access to final fields should happen via Heap.
But instead, it uses the new
finalfunction.Example Java
Reproducible
always
Steps to reproduce
A.java.JMLAssertStatementw/o pretty-printing.Object::final(self, A::#o)becomesObject::select(heap, self, A::#o).