mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-24 12:02:36 +08:00
[libcxx] Fix definition of regex_traits::__regex_word on big-endian glibc systems
Summary: On glibc, the bits used for the various character classes is endian dependant (see _ISbit() in ctypes.h) but __regex_word does not account for this and uses a spare bit that isn't spare on big-endian. On big-endian, it overlaps with the bit for graphic characters which causes '-', '@', etc. to be considered a word character. Fixed this by defining the value using _ISbit(15) on MIPS glibc systems. We've restricted this to MIPS for now to avoid the risk of introducing failures in other targets. Fixes PR26476. Reviewers: hans, mclow.lists Subscribers: dsanders, cfe-commits Differential Revision: http://reviews.llvm.org/D17132 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261088 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -976,7 +976,12 @@ public:
|
||||
typedef locale locale_type;
|
||||
typedef ctype_base::mask char_class_type;
|
||||
|
||||
#if defined(__mips__) && defined(__GLIBC__)
|
||||
static const char_class_type __regex_word = static_cast<char_class_type>(_ISbit(15));
|
||||
#else
|
||||
static const char_class_type __regex_word = 0x80;
|
||||
#endif
|
||||
|
||||
private:
|
||||
locale __loc_;
|
||||
const ctype<char_type>* __ct_;
|
||||
|
||||
Reference in New Issue
Block a user