mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 00:06:50 +00:00
Saleem Abdulrasool: If errno is defined as volatile int, the qualifier differences can cause
template typename deductions on swap<> (used in string.cpp). Use decltype(errno) to replicate the type and qualifier information for holding the errno value. Because errno is expected to be assignable, there is no need to use typename std::remove_const<decltype(errno)>::type to hold the value. llvm-svn: 173172
This commit is contained in:
parent
7a6e20070d
commit
2446649c1e
@ -830,11 +830,11 @@ __num_get_signed_integral(const char* __a, const char* __a_end,
|
||||
{
|
||||
if (__a != __a_end)
|
||||
{
|
||||
int __save_errno = errno;
|
||||
typename remove_reference<decltype(errno)>::type __save_errno = errno;
|
||||
errno = 0;
|
||||
char *__p2;
|
||||
long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
|
||||
int __current_errno = errno;
|
||||
typename remove_reference<decltype(errno)>::type __current_errno = errno;
|
||||
if (__current_errno == 0)
|
||||
errno = __save_errno;
|
||||
if (__p2 != __a_end)
|
||||
@ -870,11 +870,11 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end,
|
||||
__err = ios_base::failbit;
|
||||
return 0;
|
||||
}
|
||||
int __save_errno = errno;
|
||||
typename remove_reference<decltype(errno)>::type __save_errno = errno;
|
||||
errno = 0;
|
||||
char *__p2;
|
||||
unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
|
||||
int __current_errno = errno;
|
||||
typename remove_reference<decltype(errno)>::type __current_errno = errno;
|
||||
if (__current_errno == 0)
|
||||
errno = __save_errno;
|
||||
if (__p2 != __a_end)
|
||||
|
@ -31,7 +31,7 @@ stoi(const string& str, size_t* idx, int base)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long r = strtol(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -52,7 +52,7 @@ stoi(const wstring& str, size_t* idx, int base)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long r = wcstol(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -73,7 +73,7 @@ stol(const string& str, size_t* idx, int base)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long r = strtol(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -93,7 +93,7 @@ stol(const wstring& str, size_t* idx, int base)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long r = wcstol(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -113,7 +113,7 @@ stoul(const string& str, size_t* idx, int base)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
unsigned long r = strtoul(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -133,7 +133,7 @@ stoul(const wstring& str, size_t* idx, int base)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
unsigned long r = wcstoul(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -153,7 +153,7 @@ stoll(const string& str, size_t* idx, int base)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long long r = strtoll(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -173,7 +173,7 @@ stoll(const wstring& str, size_t* idx, int base)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long long r = wcstoll(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -193,7 +193,7 @@ stoull(const string& str, size_t* idx, int base)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
unsigned long long r = strtoull(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -213,7 +213,7 @@ stoull(const wstring& str, size_t* idx, int base)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
unsigned long long r = wcstoull(p, &ptr, base);
|
||||
swap(errno, errno_save);
|
||||
@ -233,7 +233,7 @@ stof(const string& str, size_t* idx)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
float r = strtof(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
@ -253,7 +253,7 @@ stof(const wstring& str, size_t* idx)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
float r = wcstof(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
@ -273,7 +273,7 @@ stod(const string& str, size_t* idx)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
double r = strtod(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
@ -293,7 +293,7 @@ stod(const wstring& str, size_t* idx)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
double r = wcstod(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
@ -313,7 +313,7 @@ stold(const string& str, size_t* idx)
|
||||
{
|
||||
char* ptr;
|
||||
const char* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long double r = strtold(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
@ -333,7 +333,7 @@ stold(const wstring& str, size_t* idx)
|
||||
{
|
||||
wchar_t* ptr;
|
||||
const wchar_t* const p = str.c_str();
|
||||
int errno_save = errno;
|
||||
typename remove_reference<decltype(errno)>::type errno_save = errno;
|
||||
errno = 0;
|
||||
long double r = wcstold(p, &ptr);
|
||||
swap(errno, errno_save);
|
||||
|
Loading…
x
Reference in New Issue
Block a user