mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01: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. llvm-svn: 274249
This commit is contained in:
parent
05b0d33b0c
commit
ea10bd5e79
@ -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…
x
Reference in New Issue
Block a user