[libcxx] r280543 - Avoid narrowing warnings in __bitset constructor
Dimitry Andric via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 2 14:02:11 PDT 2016
Author: dim
Date: Fri Sep 2 16:02:11 2016
New Revision: 280543
URL: http://llvm.org/viewvc/llvm-project?rev=280543&view=rev
Log:
Avoid narrowing warnings in __bitset constructor
When <bitset> is compiled with warnings enabled, on a platform where
size_t is 4 bytes, it results in errors similar to:
bitset:265:16: error: non-constant-expression cannot be narrowed
from type 'unsigned long long' to '__storage_type' (aka 'unsigned
int') in initializer list [-Wc++11-narrowing]
: __first_{__v, __v >> __bits_per_word}
^~~
bitset:676:52: note: in instantiation of member function
'std::__1::__bitset<2, 53>::__bitset' requested here
bitset(unsigned long long __v) _NOEXCEPT : base(__v) {}
^
Fix these by casting the initializer list elements to __storage_type.
Reviewers: mclow.lists, EricWF
Differential Revision: https://reviews.llvm.org/D23960
Modified:
libcxx/trunk/include/bitset
Modified: libcxx/trunk/include/bitset
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/bitset?rev=280543&r1=280542&r2=280543&view=diff
==============================================================================
--- libcxx/trunk/include/bitset (original)
+++ libcxx/trunk/include/bitset Fri Sep 2 16:02:11 2016
@@ -259,7 +259,7 @@ __bitset<_N_words, _Size>::__bitset(unsi
#if __SIZEOF_SIZE_T__ == 8
: __first_{__v}
#elif __SIZEOF_SIZE_T__ == 4
- : __first_{__v, __v >> __bits_per_word}
+ : __first_{static_cast<__storage_type>(__v), static_cast<__storage_type>(__v >> __bits_per_word)}
#else
#error This constructor has not been ported to this platform
#endif
More information about the cfe-commits
mailing list