[PATCH] D32778: [libcxx] [test] Conditionally workaround C1XX/EDG bugs

Casey Carter via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue May 2 17:52:05 PDT 2017

CaseyCarter created this revision.

Test support machinery changes needed to parse with EDG and compile with C1XX's /Za flag that disables MS extensions.

I try to make changes to `<optional>` and the `optional`/`variant` tests simultaneously in the MS STL and in libc++, which realistically requires that I keep the tests largely synchronized between libc++ and our internal test suite. As a first step toward automating that integration, I'd like to upstream this patch.

This change works around a couple of bugs:

1. EDG doesn't like explicit constexpr in a derived class. This program:

  struct Base {};
  struct Derived : Base {
      constexpr Derived() = default;

triggers "error: defaulted default constructor cannot be constexpr."

2. C1XX with /Za has no idea which constructor needs to be valid for copy elision.

The change also conditionally disables parts of the msvc_stdlib_force_include.hpp header that conflict with external configuration when `_LIBCXX_IN_DEVCRT` is defined.



-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32778.97530.patch
Type: text/x-patch
Size: 6840 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170503/d3fe0a09/attachment.bin>

More information about the cfe-commits mailing list