C++: Avoid bad join ordering in getOperandMemoryAccess

This commit is contained in:
Dave Bartolomeo
2018-12-11 00:47:53 -08:00
parent 4170d4fadd
commit 8a73bea72f

View File

@@ -268,9 +268,10 @@ MemoryAccess getOperandMemoryAccess(Operand operand) {
if exists(IRVariable var, IntValue i |
resultPointsTo(operand.getAddressOperand().getDefinitionInstruction(), var, i)
)
then exists(IRVariable var, IntValue i |
then exists(IRVariable var, IntValue i, int size |
resultPointsTo(operand.getAddressOperand().getDefinitionInstruction(), var, i) and
result = getVariableMemoryAccess(var, i, operand.getDefinitionInstruction().getResultSize())
result = getVariableMemoryAccess(var, i, size) and
size = operand.getDefinitionInstruction().getResultSize()
)
else (
result = TUnknownMemoryAccess(TUnknownVirtualVariable(operand.getInstruction().getFunctionIR())) and