Skip to content

Commit dbabcd0

Browse files
authored
Merge pull request #16147 from radik878/opinashnev
[SMTChecker] Fix comparison of `CHCVerificationTarget` for proper `std::set` ordering
2 parents 53b9c89 + d578b6b commit dbabcd0

File tree

1 file changed

+5
-13
lines changed

1 file changed

+5
-13
lines changed

libsolidity/formal/CHC.h

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,10 @@ class CHC: public SMTEncoder
7474

7575
friend bool operator<(CHCVerificationTarget const& _a, CHCVerificationTarget const& _b)
7676
{
77-
return _a.errorId < _b.errorId;
78-
}
79-
};
80-
81-
struct SafeTargetsCompare
82-
{
83-
bool operator()(CHCVerificationTarget const & _lhs, CHCVerificationTarget const & _rhs) const
84-
{
85-
if (_lhs.errorNode->id() == _rhs.errorNode->id())
86-
return _lhs.type < _rhs.type;
77+
if (_a.errorNode->id() == _b.errorNode->id())
78+
return _a.type < _b.type;
8779
else
88-
return _lhs.errorNode->id() == _rhs.errorNode->id();
80+
return _a.errorNode->id() < _b.errorNode->id();
8981
}
9082
};
9183

@@ -96,7 +88,7 @@ class CHC: public SMTEncoder
9688
std::string message;
9789
};
9890

99-
std::map<ASTNode const*, std::set<CHCVerificationTarget, SafeTargetsCompare>, smt::EncodingContext::IdCompare> const& safeTargets() const { return m_safeTargets; }
91+
std::map<ASTNode const*, std::set<CHCVerificationTarget>, smt::EncodingContext::IdCompare> const& safeTargets() const { return m_safeTargets; }
10092
std::map<ASTNode const*, std::map<VerificationTargetType, ReportTargetInfo>, smt::EncodingContext::IdCompare> const& unsafeTargets() const { return m_unsafeTargets; }
10193

10294
/// This is used if the Horn solver is not directly linked into this binary.
@@ -434,7 +426,7 @@ class CHC: public SMTEncoder
434426
std::map<unsigned, CHCVerificationTarget> m_verificationTargets;
435427

436428
/// Targets proved safe.
437-
std::map<ASTNode const*, std::set<CHCVerificationTarget, SafeTargetsCompare>, smt::EncodingContext::IdCompare> m_safeTargets;
429+
std::map<ASTNode const*, std::set<CHCVerificationTarget>, smt::EncodingContext::IdCompare> m_safeTargets;
438430
/// Targets proved unsafe.
439431
std::map<ASTNode const*, std::map<VerificationTargetType, ReportTargetInfo>, smt::EncodingContext::IdCompare> m_unsafeTargets;
440432
/// Targets not proved.

0 commit comments

Comments
 (0)