Skip to content

Commit 2cff46f

Browse files
[libc][NFC] use builder pattern for ErrnoSetterMatcher (#79153)
ErrnoSetterMatcher::returns can be misleading as it does not initialize the errno. This is made worse as later on there is a switch statement on the errno comparator using __builtin_unreachable(). This patch make ErrnoSetterMatcher::returns give back a builder that is nomially different from ErrnoSetterMatcher.
1 parent dffa803 commit 2cff46f

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

libc/test/UnitTest/ErrnoSetterMatcher.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,22 @@ static internal::ErrnoSetterMatcher<RetT> Fails(int ExpectedErrno,
161161
EQ(ExpectedErrno));
162162
}
163163

164+
template <typename RetT = int> class ErrnoSetterMatcherBuilder {
165+
public:
166+
template <typename T> using Cmp = internal::Comparator<T>;
167+
ErrnoSetterMatcherBuilder(Cmp<RetT> cmp) : return_cmp(cmp) {}
168+
169+
internal::ErrnoSetterMatcher<RetT> with_errno(Cmp<int> cmp) {
170+
return internal::ErrnoSetterMatcher<RetT>(return_cmp, cmp);
171+
}
172+
173+
private:
174+
Cmp<RetT> return_cmp;
175+
};
176+
164177
template <typename RetT>
165-
static internal::ErrnoSetterMatcher<RetT>
166-
returns(internal::Comparator<RetT> cmp) {
167-
return internal::ErrnoSetterMatcher<RetT>(cmp);
178+
static ErrnoSetterMatcherBuilder<RetT> returns(internal::Comparator<RetT> cmp) {
179+
return ErrnoSetterMatcherBuilder<RetT>(cmp);
168180
}
169181

170182
} // namespace ErrnoSetterMatcher

0 commit comments

Comments
 (0)