[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