| 939 | } |
| 940 | |
| 941 | expr State::FnCallInput::implies(const FnCallInput &rhs) const { |
| 942 | if (noret != rhs.noret || willret != rhs.willret || |
| 943 | (rhs.memaccess.canReadSomething().isTrue() && |
| 944 | (fncall_ranges != rhs.fncall_ranges || is_neq(m <=> rhs.m)))) |
| 945 | return false; |
| 946 | |
| 947 | AndExpr eq; |
| 948 | eq.add(memaccess.refinedBy(rhs.memaccess)); |
| 949 | for (unsigned i = 0, e = args_nonptr.size(); i != e; ++i) { |
| 950 | eq.add(args_nonptr[i].implies(rhs.args_nonptr[i])); |
| 951 | } |
| 952 | |
| 953 | for (unsigned i = 0, e = args_ptr.size(); i != e; ++i) { |
| 954 | eq.add(args_ptr[i].implies(rhs.args_ptr[i])); |
| 955 | } |
| 956 | return eq(); |
| 957 | } |
| 958 | |
| 959 | expr State::FnCallInput::refinedBy( |
| 960 | State &s, const string &callee, unsigned inaccessible_bid, |
no test coverage detected