mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 14:17:59 +00:00
[Support] Fix a bug in ErrorList::join / joinErrors.
When concatenating two error lists the ErrorList::join method (which is called by joinErrors) was failing to set the checked bit on the second error, leading to a 'failure to check error' assertion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274249 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
91d41f9825
commit
3df768796a
@ -345,7 +345,8 @@ private:
|
||||
if (E1.isA<ErrorList>()) {
|
||||
auto &E1List = static_cast<ErrorList &>(*E1.getPtr());
|
||||
if (E2.isA<ErrorList>()) {
|
||||
auto &E2List = static_cast<ErrorList &>(*E2.getPtr());
|
||||
auto E2Payload = E2.takePayload();
|
||||
auto &E2List = static_cast<ErrorList &>(*E2Payload);
|
||||
for (auto &Payload : E2List.Payloads)
|
||||
E1List.Payloads.push_back(std::move(Payload));
|
||||
} else
|
||||
|
@ -314,6 +314,51 @@ TEST(Error, CheckJoinErrors) {
|
||||
EXPECT_TRUE(CustomErrorInfo1 == 7 && CustomErrorInfo2 == 42 &&
|
||||
CustomErrorExtraInfo == 7)
|
||||
<< "Failed handling compound Error.";
|
||||
|
||||
// Test appending a single item to a list.
|
||||
{
|
||||
int Sum = 0;
|
||||
handleAllErrors(
|
||||
joinErrors(
|
||||
joinErrors(make_error<CustomError>(7),
|
||||
make_error<CustomError>(7)),
|
||||
make_error<CustomError>(7)),
|
||||
[&](const CustomError &CE) {
|
||||
Sum += CE.getInfo();
|
||||
});
|
||||
EXPECT_EQ(Sum, 21) << "Failed to correctly append error to error list.";
|
||||
}
|
||||
|
||||
// Test prepending a single item to a list.
|
||||
{
|
||||
int Sum = 0;
|
||||
handleAllErrors(
|
||||
joinErrors(
|
||||
make_error<CustomError>(7),
|
||||
joinErrors(make_error<CustomError>(7),
|
||||
make_error<CustomError>(7))),
|
||||
[&](const CustomError &CE) {
|
||||
Sum += CE.getInfo();
|
||||
});
|
||||
EXPECT_EQ(Sum, 21) << "Failed to correctly prepend error to error list.";
|
||||
}
|
||||
|
||||
// Test concatenating two error lists.
|
||||
{
|
||||
int Sum = 0;
|
||||
handleAllErrors(
|
||||
joinErrors(
|
||||
joinErrors(
|
||||
make_error<CustomError>(7),
|
||||
make_error<CustomError>(7)),
|
||||
joinErrors(
|
||||
make_error<CustomError>(7),
|
||||
make_error<CustomError>(7))),
|
||||
[&](const CustomError &CE) {
|
||||
Sum += CE.getInfo();
|
||||
});
|
||||
EXPECT_EQ(Sum, 28) << "Failed to correctly concatenate erorr lists.";
|
||||
}
|
||||
}
|
||||
|
||||
// Test that we can consume success values.
|
||||
|
Loading…
Reference in New Issue
Block a user