Catch all standard exceptions in C API. (#6220)

* `std::bad_alloc` is not guaranteed to be caught.
This commit is contained in:
Jiaming Yuan
2020-10-12 14:01:46 +08:00
committed by GitHub
parent 2241563f23
commit 70c2039748
2 changed files with 25 additions and 1 deletions

View File

@@ -10,6 +10,8 @@
#include "../helpers.h"
#include "../../../src/common/io.h"
#include "../../../src/c_api/c_api_error.h"
TEST(CAPI, XGDMatrixCreateFromMatDT) {
std::vector<int> col0 = {0, -1, 3};
std::vector<float> col1 = {-4.0f, 2.0f, 0.0f};
@@ -196,4 +198,18 @@ TEST(CAPI, DMatrixSetFeatureName) {
XGDMatrixFree(handle);
}
int TestExceptionCatching() {
API_BEGIN();
throw std::bad_alloc();
API_END();
}
TEST(CAPI, Exception) {
ASSERT_NO_THROW({TestExceptionCatching();});
ASSERT_EQ(TestExceptionCatching(), -1);
auto error = XGBGetLastError();
// Not null
ASSERT_TRUE(error);
}
} // namespace xgboost