<feed xmlns='http://www.w3.org/2005/Atom'>
<title>bcm5719-llvm/libcxx/include, branch meklort-10.0.1</title>
<subtitle>Project Ortega BCM5719 LLVM</subtitle>
<id>https://git.raptorcs.com/git/bcm5719-llvm/atom?h=meklort-10.0.1</id>
<link rel='self' href='https://git.raptorcs.com/git/bcm5719-llvm/atom?h=meklort-10.0.1'/>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/'/>
<updated>2020-06-26T20:46:12+00:00</updated>
<entry>
<title>[libc++] Fix recursive instantiation in std::array.</title>
<updated>2020-06-26T20:46:12+00:00</updated>
<author>
<name>Eric Fiselier</name>
<email>eric@efcs.ca</email>
</author>
<published>2020-04-09T21:39:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=77d76b71d7df39b573dfa1e391096a040e9b7bd3'/>
<id>urn:sha1:77d76b71d7df39b573dfa1e391096a040e9b7bd3</id>
<content type='text'>
The use of the `&amp;&amp; ...` fold expression in std::array's deduction guides
recursively builds a set of binary operator expressions of depth N where
`N` is the number of elements in the initializer.

This is problematic because arrays may be large, and instantiation
depth is limited.

This patch addresses the issue by flattening the SFINAE using
the existing `__all` type trait.

(cherry picked from commit c6eb584c64872fbb779df14acd31c1f3947f6e52)
</content>
</entry>
<entry>
<title>[libc++] Fix ABI break in __bit_reference.</title>
<updated>2020-02-20T14:32:05+00:00</updated>
<author>
<name>Eric Fiselier</name>
<email>eric@efcs.ca</email>
</author>
<published>2020-02-19T16:59:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=7a18790ae2f4b92dc26b2be963e588c8837d0076'/>
<id>urn:sha1:7a18790ae2f4b92dc26b2be963e588c8837d0076</id>
<content type='text'>
The libc++ __bit_iterator type has weird ABI calling conventions as a
quirk
of the implementation. The const bit iterator is trivial, but the
non-const
bit iterator is not because it declares a user-defined copy constructor.

Changing this now is an ABI break, so this test ensures that each type
is trivial/non-trivial as expected.

The definition of 'non-trivial for the purposes of calls':
  A type is considered non-trivial for the purposes of calls if:
      * it has a non-trivial copy constructor, move constructor, or
            destructor, or
	        * all of its copy and move constructors are deleted.

(cherry picked from commit a829443cc7359ecf0f2de8f82519f511795675ec)
</content>
</entry>
<entry>
<title>[libcxx] [Windows] Store the lconv struct returned from localeconv in locale_t</title>
<updated>2020-02-04T10:41:50+00:00</updated>
<author>
<name>Martin Storsjö</name>
<email>martin@martin.st</email>
</author>
<published>2019-10-28T08:39:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=ca6b341bd5d7159d9e398eef1a787b649c5bc888'/>
<id>urn:sha1:ca6b341bd5d7159d9e398eef1a787b649c5bc888</id>
<content type='text'>
This fixes using non-default locales, which currently can crash when
e.g. formatting numbers.

Within the localeconv_l function, the per-thread locale is temporarily
changed with __libcpp_locale_guard, then localeconv() is called,
returning an lconv * struct pointer.

When localeconv_l returns, the __libcpp_locale_guard dtor restores
the per-thread locale back to the original. This invalidates the
contents of the earlier returned lconv struct, and all C strings
that are pointed to within it are also invalidated.

Thus, to have an actually working localeconv_l function, the
function needs to allocate some sort of storage for the returned
contents, that stays valid for as long as the caller needs to use
the returned struct.

Extend the libcxx/win32 specific locale_t class with storage for
a deep copy of a lconv struct, and change localeconv_l to take
a reference to the locale_t, to allow it to store the returned
lconv struct there.

This works fine for libcxx itself, but wouldn't necessarily be right
for a caller that uses libcxx's localeconv_l function.

This fixes around 11 of libcxx's currently failing tests on windows.

Differential Revision: https://reviews.llvm.org/D69505

(cherry picked from commit 7db4f2c6945a24a7d81dad3362700353e2ec369e)
</content>
</entry>
<entry>
<title>Define _LIBCPP_HAS_TIMESPEC_GET for FreeBSD when appropriate</title>
<updated>2020-01-30T14:16:10+00:00</updated>
<author>
<name>Dimitry Andric</name>
<email>dimitry@andric.com</email>
</author>
<published>2020-01-30T07:00:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=1a5959196da075e37ce55ea53b76a3db994197e6'/>
<id>urn:sha1:1a5959196da075e37ce55ea53b76a3db994197e6</id>
<content type='text'>
Summary:
FreeBSD got `timespec_get` support somewhere in the 12.x timeframe, but
the C++ version check in its system headers was written incorrectly.
This has now been fixed for both FreeBSD 13 and 12.

Add checks for the corresponding `__FreeBSD_version` values, to define
`_LIBCPP_HAS_TIMESPEC_GET` when the function is supported.

Reviewers: emaste, EricWF, ldionne, mclow.lists

Reviewed By: ldionne

Subscribers: arichardson, krytarowski, christof, dexonsmith, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D71522

(cherry picked from commit 5e416ba943b7c737deb8eca62756f7b4fa925845)
</content>
</entry>
<entry>
<title>Add test for spaceship operator to __config</title>
<updated>2020-01-24T18:35:17+00:00</updated>
<author>
<name>David Zarzycki</name>
<email>dave@znu.io</email>
</author>
<published>2020-01-24T18:26:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=39c349e8fc7f4b334cf4b30724b28dfce44a024e'/>
<id>urn:sha1:39c349e8fc7f4b334cf4b30724b28dfce44a024e</id>
<content type='text'>
Summary:
The libcxx test suite auto-detects spaceship operator, but __config does not. This means that the libcxx test suite has been broken for over a month when using top-of-tree clang. This also really ought to be fixed before 10.0.

See: bc633a42dd409dbeb456263e3388b8caa4680aa0

Reviewers: chandlerc, mclow.lists, EricWF, ldionne, CaseyCarter

Reviewed By: EricWF

Subscribers: broadwaylamb, hans, dexonsmith, tstellar, llvm-commits, libcxx-commits

Tags: #libc, #llvm

Differential Revision: https://reviews.llvm.org/D72980

(cherry picked from commit 5dda92fcb0ce9206f831aa7cddf24421dcf044d7)
</content>
</entry>
<entry>
<title>[libcxx] Use mtx_plain | mtx_recursive following C11 API</title>
<updated>2020-01-17T09:12:05+00:00</updated>
<author>
<name>Petr Hosek</name>
<email>phosek@google.com</email>
</author>
<published>2020-01-15T21:58:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=f06cd8c8c8e2adc5dad66a851bc1df1ecdd1b58e'/>
<id>urn:sha1:f06cd8c8c8e2adc5dad66a851bc1df1ecdd1b58e</id>
<content type='text'>
The C11 API specifies that to initialize a recursive mutex,
mtx_plain | mtx_recursive should be used with mtx_init.

Differential Revision: https://reviews.llvm.org/D72809

(cherry picked from commit 3481e5d7ed08d068a4e3427cb1afcd8bf2acafdc)
</content>
</entry>
<entry>
<title>[libcxx] Use C11 thread API on Fuchsia</title>
<updated>2020-01-15T00:48:20+00:00</updated>
<author>
<name>Petr Hosek</name>
<email>phosek@google.com</email>
</author>
<published>2019-12-04T18:38:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=ab9aefee9fa09957d1a3e76fcc47abda0d002255'/>
<id>urn:sha1:ab9aefee9fa09957d1a3e76fcc47abda0d002255</id>
<content type='text'>
On Fuchsia, pthread API is emulated on top of C11 thread API. Using C11
thread API directly is more efficient.

While this implementation is only used by Fuchsia at the moment, it's
not Fuchsia specific, and could be used by other platforms that use C11
threads rather than pthreads in the future.

Differential Revision: https://reviews.llvm.org/D64378
</content>
</entry>
<entry>
<title>[libcxx] [Windows] Make a more proper implementation of strftime_l for mingw with msvcrt.dll</title>
<updated>2020-01-14T20:29:47+00:00</updated>
<author>
<name>Martin Storsjö</name>
<email>martin@martin.st</email>
</author>
<published>2019-10-28T21:53:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=337e4359645ebd0f35136dbec9b51c48b9071f9c'/>
<id>urn:sha1:337e4359645ebd0f35136dbec9b51c48b9071f9c</id>
<content type='text'>
This also makes this function consistent with the rest of the
libc++ provided fallbacks.

The locale support in msvcrt.dll is very limited anyway; it can
only be configured processwide, not per thread, and it only seems
to support the locales "C" and "" (the user set locale), so it's
hard to make any meaningful automatic test for it. But manually tested,
this change does make time formatting locale code in libc++ output
times in the user requested format, when using locale "".

Differential Revision: https://reviews.llvm.org/D69554
</content>
</entry>
<entry>
<title>Revert "[libc++] Explicitly enumerate std::string external instantiations."</title>
<updated>2020-01-13T13:54:04+00:00</updated>
<author>
<name>Oliver Stannard</name>
<email>oliver.stannard@linaro.org</email>
</author>
<published>2020-01-13T13:54:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=6a634a5dba847e1c1d81bf59f76dfa7d76ac3c4c'/>
<id>urn:sha1:6a634a5dba847e1c1d81bf59f76dfa7d76ac3c4c</id>
<content type='text'>
This is causing failures for multiple buildbots and bootstrap builds,
details at https://reviews.llvm.org/rG61bd1920.

This reverts commit 61bd19206f61ace4b007838a2ff8884a13ec0374.
</content>
</entry>
<entry>
<title>[libc++] Explicitly enumerate std::string external instantiations.</title>
<updated>2020-01-09T20:51:02+00:00</updated>
<author>
<name>Eric Fiselier</name>
<email>eric@efcs.ca</email>
</author>
<published>2020-01-09T20:50:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=61bd19206f61ace4b007838a2ff8884a13ec0374'/>
<id>urn:sha1:61bd19206f61ace4b007838a2ff8884a13ec0374</id>
<content type='text'>
 The external instantiation of std::string is a problem for libc++.
    Additions and removals of inline functions in string can cause ABI
    breakages, including introducing new symbols.

    This patch aims to:
      (1) Make clear which functions are explicitly instatiated.
      (2) Prevent new functions from being accidentally instantiated.
      (3) Allow a migration path for adding or removing functions from the
      explicit instantiation over time.

    Although this new formulation is uglier, it is preferable from a
    maintainability and readability standpoint because it explicitly
    enumerates the functions we've chosen to expose in our ABI. Changing
    this list is non-trivial and requires thought and planning.

    (3) is achieved by making it possible to control the extern template declaration
    separately from it's definition. Meaning we could add a new definition to
    the dylib, wait for it to roll out, then add the extern template
    declaration to the header. Similarly, we could remove existing extern
    template declarations while still keeping the definition to prevent ABI
    breakages.
</content>
</entry>
</feed>
