Thanks for the feedback. Your reproducer is not enough to trigger the FP, but this is unfortunately a known issue with our Symbolic Execution (SE) engine. SE is having trouble handling exceptional path when try-catch-finally are nested, and does not quite follow unlocking mechanism, as illustrated in the following example:
abstract class A {
public void foo(java.util.concurrent.locks.Lock w) {
try {
w.lock(); // FP on w, which is necessarily unlocked in the finally.
try {
doSomething();
} finally {
w.unlock(); // <--- SE engine consider unlock() can fail
}
} catch (Exception e) {
doSomething();
}
}
abstract void doSomething();
}