diff --git a/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp --- a/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp +++ b/libcxx/test/std/re/re.alg/re.alg.match/awk.locale.pass.cpp @@ -19,7 +19,6 @@ // TODO: investigation needed // TODO(netbsd): incomplete support for locales // XFAIL: target={{.*}}-linux-gnu{{.*}}, netbsd, freebsd -// XFAIL: LIBCXX-AIX-FIXME // REQUIRES: locale.cs_CZ.ISO8859-2 #include @@ -35,8 +34,15 @@ { std::cmatch m; const char s[] = "m"; +// AIX supports character equivalence classes. What the contents of the class are depends +// on the locale and the standards do not specify any locale other than C/POSIX. +#if defined(_AIX) + assert(std::regex_match(s, m, + std::regex("[a[=m=]z]", std::regex_constants::awk))); +#else assert(std::regex_match(s, m, std::regex("[a[=M=]z]", std::regex_constants::awk))); +#endif assert(m.size() == 1); assert(!m.prefix().matched); assert(m.prefix().first == s); @@ -78,8 +84,13 @@ { std::wcmatch m; const wchar_t s[] = L"m"; +#if defined(_AIX) + assert(std::regex_match(s, m, std::wregex(L"[a[=m=]z]", + std::regex_constants::awk))); +#else assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]", std::regex_constants::awk))); +#endif assert(m.size() == 1); assert(!m.prefix().matched); assert(m.prefix().first == s); @@ -91,6 +102,8 @@ assert(m.position(0) == 0); assert(m.str(0) == s); } +//TODO: Need to be investigated for AIX OS +#if !defined(_AIX) { std::wcmatch m; const wchar_t s[] = L"Ch"; @@ -107,6 +120,7 @@ assert(m.position(0) == 0); assert(m.str(0) == s); } +#endif std::locale::global(std::locale("C")); { std::wcmatch m;