summaryrefslogtreecommitdiffstats
path: root/libcxx/include/regex
diff options
context:
space:
mode:
authorDaniel Sanders <daniel.sanders@imgtec.com>2016-02-17 13:16:31 +0000
committerDaniel Sanders <daniel.sanders@imgtec.com>2016-02-17 13:16:31 +0000
commit4788179a2cbb8fceda25751b2bdfc4f3ae2d13d6 (patch)
treebf10154aa22255637de4de34928e50d68448af6e /libcxx/include/regex
parent124be56bcc0d8e9c770fa70a392560bebea9478c (diff)
downloadbcm5719-llvm-4788179a2cbb8fceda25751b2bdfc4f3ae2d13d6.tar.gz
bcm5719-llvm-4788179a2cbb8fceda25751b2bdfc4f3ae2d13d6.zip
[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 llvm-svn: 261088
Diffstat (limited to 'libcxx/include/regex')
-rw-r--r--libcxx/include/regex5
1 files changed, 5 insertions, 0 deletions
diff --git a/libcxx/include/regex b/libcxx/include/regex
index f1f3264d320..1139d8fb2a9 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -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_;
OpenPOWER on IntegriCloud