forked from ShuriZma/suyu
1
0
Fork 0

Merge pull request #4868 from lioncash/discard-error

General: Make ignoring a discarded return value an error
This commit is contained in:
bunnei 2020-10-30 00:35:40 -07:00 committed by GitHub
commit 8aa9ae5ba5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 6 deletions

View File

@ -32,7 +32,6 @@ if (MSVC)
# /Zc:inline - Let codegen omit inline functions in object files # /Zc:inline - Let codegen omit inline functions in object files
# /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null # /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null
add_compile_options( add_compile_options(
/W3
/MP /MP
/Zi /Zi
/Zo /Zo
@ -43,6 +42,14 @@ if (MSVC)
/Zc:externConstexpr /Zc:externConstexpr
/Zc:inline /Zc:inline
/Zc:throwingNew /Zc:throwingNew
# Warnings
/W3
/we4547 # 'operator' : operator before comma has no effect; expected operator with side-effect
/we4548 # Expression before comma has no effect; expected expression with side-effect
/we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'?
/we4555 # Expression has no effect; expected expression with side-effect
/we4834 # Discarding return value of function with 'nodiscard' attribute
) )
# /GS- - No stack buffer overflow checks # /GS- - No stack buffer overflow checks
@ -56,6 +63,7 @@ else()
-Werror=implicit-fallthrough -Werror=implicit-fallthrough
-Werror=missing-declarations -Werror=missing-declarations
-Werror=reorder -Werror=reorder
-Werror=unused-result
-Wextra -Wextra
-Wmissing-declarations -Wmissing-declarations
-Wno-attributes -Wno-attributes

View File

@ -232,7 +232,7 @@ public:
void Swap(IOFile& other) noexcept; void Swap(IOFile& other) noexcept;
[[nodiscard]] bool Open(const std::string& filename, const char openmode[], int flags = 0); bool Open(const std::string& filename, const char openmode[], int flags = 0);
bool Close(); bool Close();
template <typename T> template <typename T>

View File

@ -16,16 +16,23 @@
// Call directly after the command or use the error num. // Call directly after the command or use the error num.
// This function might change the error code. // This function might change the error code.
std::string GetLastErrorMsg() { std::string GetLastErrorMsg() {
static const std::size_t buff_size = 255; static constexpr std::size_t buff_size = 255;
char err_str[buff_size]; char err_str[buff_size];
#ifdef _WIN32 #ifdef _WIN32
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr);
return std::string(err_str, buff_size);
#elif defined(__GLIBC__) && (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))
// Thread safe (GNU-specific)
const char* str = strerror_r(errno, err_str, buff_size);
return std::string(str);
#else #else
// Thread safe (XSI-compliant) // Thread safe (XSI-compliant)
strerror_r(errno, err_str, buff_size); const int success = strerror_r(errno, err_str, buff_size);
if (success != 0) {
return {};
}
return std::string(err_str);
#endif #endif
return std::string(err_str, buff_size);
} }