[libcxx-dev] [cfe-dev] [Release-testers] [9.0.0 Release] Release Candidate 1 is here

Dimitry Andric via libcxx-dev libcxx-dev at lists.llvm.org
Wed Aug 7 13:23:09 PDT 2019


On 2019-08-06 22:59, Marshall Clow wrote:
> Many of the failing libc++ tests are explicitly XFAILed for NetBSD; I wonder if they should also be for FreeBSD.

If they can't be fixed, then indeed they should be XFAILed.  But maybe not right away, see below.


>    libcxx/thread/thread.threads/thread.thread.this/sleep_for.pass.cpp
>  I don't know about this one.

Apparently it slept for too long:

Assertion failed: (std::abs(ns.count()) < err.count()), function main, file /home/dim/llvm/9.0.0/rc1/llvm.src/projects/libcxx/test/libcxx/thread/thread.threads/thread.thread.this/sleep_for.pass.cpp, line 68.

Cause is unknown.


>           libc++ :: std/language.support/support.runtime/ctime.pass.cpp
> Does your C library have "timespec_get" ?

Yes, but it got introduced only in FreeBSD 12.0.  I ran the tests on FreeBSD 11.3, where it got:

/home/dim/llvm/9.0.0/rc1/llvm.src/projects/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp:25:2: error: TIME_UTC not defined

This could be worked around by checking the FreeBSD major version, using e.g. "#if __FreeBSD__ >= 12".


>           libc++ ::
>    std/localization/locale.categories/category.collate/locale.collate.byname/compare.pass.cpp

For this particular test, FreeBSD, Linux and Windows seem to have a different opinion than macOS on the result of std::strcoll("aaaaaaA", "BaaaaaA"), when the locale is en_US.UTF-8:

* macOS 10.14 gives 31
* FreeBSD 13.0 gives -13
* Linux (Ubuntu 18.04) gives -1
* Windows 10 (VS 2017) gives -1

E.g. macOS, which the test appears to be based on, is the odd one out here. :)

I won't pretend to fully understand the Unicode collation rules, but it could be that macOS does a case insensitive comparison, while the other systems do a case sensitive comparison.


>           libc++ ::
>    std/localization/locale.categories/category.collate/locale.collate.byname/transform.pass.cpp

This test failed because it segfaults on FreeBSD, due to a bug in our wcsxfrm_l(3). :-)

I have fixed the bug in FreeBSD 13 here: https://svnweb.freebsd.org/changeset/base/350697, but it may take a while before it is merged into FreeBSD 12 and 11.


> These contain:
> // NetBSD does not support LC_COLLATE at the moment
> // XFAIL: netbsd
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp
> These contain:
> // NetBSD does not support LC_MONETARY at the moment
> // XFAIL: netbsd
>           libc++ ::
>    std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.time/locale.time.get.byname/get_one.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.time/locale.time.get.byname/get_one_wide.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp
> These contain:
> // NetBSD does not support LC_TIME at the moment
> // XFAIL: netbsd
>           libc++ ::
>    std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp
>           libc++ ::
>    std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
> These contain:
> // NetBSD does not support LC_NUMERIC at the moment
> // XFAIL: netbsd
>           libc++ :: std/re/re.alg/re.alg.match/awk.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.match/basic.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.match/ecma.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.match/extended.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.search/awk.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.search/basic.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.search/ecma.pass.cpp
>           libc++ :: std/re/re.alg/re.alg.search/extended.pass.cpp
>           libc++ :: std/re/re.traits/lookup_collatename.pass.cpp
>           libc++ :: std/re/re.traits/transform_primary.pass.cpp
> These contain:
> // NetBSD does not support LC_COLLATE at the moment
> // XFAIL: netbsd
> Is this also a problem for FREEBSD?

FreeBSD does support all the LC_xxx functionality, but it could very well be that the output of the above tests is slightly different from what is expected.  I will have to look into all the individual cases to see what is going wrong.


>           libc++ :: std/utilities/time/date.time/ctime.pass.cpp
> Does your C library have "timespec_get" ?

See above, from FreeBSD 12 onwards.

-Dimitry

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 223 bytes
Desc: Message signed with OpenPGP
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20190807/d24799ea/attachment.sig>


More information about the libcxx-dev mailing list