/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.jar /export/starexec/sandbox/output/output_files
--------------------------------------------------------------------------------
YES
proof of /export/starexec/sandbox/benchmark/theBenchmark.jar
# AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty
termination of the given Bare JBC problem could be proven:
(0) Bare JBC problem
(1) BareJBCToJBCProof [EQUIVALENT, 96 ms]
(2) JBC problem
(3) JBCToGraph [EQUIVALENT, 186 ms]
(4) JBCTerminationGraph
(5) TerminationGraphToSCCProof [SOUND, 0 ms]
(6) TRUE
----------------------------------------
(0)
Obligation:
need to prove termination of the following program:
/**
* A loop that might potentially throw a NullPointerException
* because of the instance field access exc.f. If that happened,
* the loop would diverge since the exception handler does not include any
* progress statement. However, Julia can prove that exc is not
* null at the point where exc.f is accessed, so that
* no exception can be thrown there. Hence the loop is proved to terminate.
*
* All calls terminate.
*
* Julia + BinTerm prove that all calls terminate.
*
* Note: without a preliminary nullness analysis, termination could not
* be proved.
*
* @author Fausto Spoto
*/
public class Exc {
private int f;
public static void main(String[] args) {
Exc exc = new Exc();
int i = 0;
while (i < 20) {
try {
if (i > 10) exc.f = 5;
i += 2;
}
catch (NullPointerException e) {
}
}
}
}
----------------------------------------
(1) BareJBCToJBCProof (EQUIVALENT)
initialized classpath
----------------------------------------
(2)
Obligation:
need to prove termination of the following program:
/**
* A loop that might potentially throw a NullPointerException
* because of the instance field access exc.f. If that happened,
* the loop would diverge since the exception handler does not include any
* progress statement. However, Julia can prove that exc is not
* null at the point where exc.f is accessed, so that
* no exception can be thrown there. Hence the loop is proved to terminate.
*
* All calls terminate.
*
* Julia + BinTerm prove that all calls terminate.
*
* Note: without a preliminary nullness analysis, termination could not
* be proved.
*
* @author Fausto Spoto
*/
public class Exc {
private int f;
public static void main(String[] args) {
Exc exc = new Exc();
int i = 0;
while (i < 20) {
try {
if (i > 10) exc.f = 5;
i += 2;
}
catch (NullPointerException e) {
}
}
}
}
----------------------------------------
(3) JBCToGraph (EQUIVALENT)
Constructed TerminationGraph.
----------------------------------------
(4)
Obligation:
Termination Graph based on JBC Program:
Exc.main([Ljava/lang/String;)V: Graph of 106 nodes with 0 SCCs.
----------------------------------------
(5) TerminationGraphToSCCProof (SOUND)
Proven termination by absence of SCCs
----------------------------------------
(6)
TRUE