diff options
Diffstat (limited to 'org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java')
-rw-r--r-- | org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java b/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java index 1cd6911..c7a8107 100644 --- a/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java +++ b/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/PropertySimulator.java @@ -19,15 +19,8 @@ import java.util.Queue; import java.util.Set; import java.util.Map.Entry; -import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; -import org.eclipse.cdt.core.dom.ast.IASTIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; -import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.ptp.pldt.mpi.analysis.cdt.graphs.IBlock; import org.eclipse.ptp.pldt.mpi.analysis.cdt.graphs.IControlFlowEdge; @@ -213,9 +206,11 @@ public class PropertySimulator { private Set<SymbolicState> flowBranch(IBlock blk, Set<SymbolicState> ss, boolean value) { Set<SymbolicState> ret = new HashSet<SymbolicState>(); for (SymbolicState s : ss) { - SymbolicState s0 = transferBranch(blk, s, value); - if (!s0.getExecutionState().isBottom()) { - ret.add(s0); + Set<SymbolicState> ss0 = transferBranch(blk, s, value); + for (SymbolicState s0 : ss0) { + if (!s0.getExecutionState().isBottom()) { + ret.add(s0); + } } } return group(ret); @@ -304,12 +299,13 @@ public class PropertySimulator { return null; } - private SymbolicState transferBranch(IBlock blk, SymbolicState s, boolean value) { + private Set<SymbolicState> transferBranch(IBlock blk, SymbolicState s, boolean value) { IASTNode node = blk.getContent(); - SymbolicState ret = s.copy(); + Set<SymbolicState> ret = new HashSet<SymbolicState>(); + ret.add(s.copy()); if (node != null) { - ConditionalVisitor visitor = new ConditionalVisitor(ret.getExecutionState(), value); + ConditionalVisitor visitor = new ConditionalVisitor(s, ret, value); node.accept(visitor); } |