[libcxx-commits] [libcxx] [libcxx][test] Add msvc-no-unique-address feature, used by tests (PR #67849)

Caslyn Tonelli via libcxx-commits libcxx-commits at lists.llvm.org
Tue Oct 3 12:08:26 PDT 2023


https://github.com/Caslyn updated https://github.com/llvm/llvm-project/pull/67849

>From b92b950295e94ba23bfd36c906980b8e0f88c91f Mon Sep 17 00:00:00 2001
From: Caslyn Tonelli <caslyn at google.com>
Date: Fri, 29 Sep 2023 20:19:51 +0000
Subject: [PATCH 1/3] [libcxx][test] Add msvc-no-unique-address feature, used
 by tests

This PR introduces the `msvc-no-unique-address` feature, to be used in
no_unique_address.compile.pass.cpp tests.

Since PR 67199 implements the [[msvc::no_unique_address]] attribute,
these tests pass in a windows-x64 build against ToT clang-cl:

```
********************
Unexpectedly Passed Tests (3):
llvm-libc++-static-clangcl.cfg.in :: libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
llvm-libc++-static-clangcl.cfg.in :: libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
llvm-libc++-static-clangcl.cfg.in :: libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
```
---
 .../range.lazy.split/no_unique_address.compile.pass.cpp   | 4 +---
 .../range.split/no_unique_address.compile.pass.cpp        | 4 +---
 .../range.istream.view/no_unique_address.compile.pass.cpp | 4 +---
 libcxx/utils/libcxx/test/features.py                      | 8 ++++++++
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
index 2918d4f86afb5ae..844a4c628fbf0b2 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
@@ -7,9 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-
-// clang-cl and cl currently don't support [[no_unique_address]]
-// XFAIL: msvc
+// XFAIL: msvc && !msvc-no-unique-address
 
 // class lazy_split_view {
 //   _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
index c04dbd7ac0d6959..b73cf417d29215c 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
@@ -7,9 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-
-// clang-cl and cl currently don't support [[no_unique_address]]
-// XFAIL: msvc
+// XFAIL: msvc && !msvc-no-unique-address
 
 // class split_view {
 //   _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
diff --git a/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
index f2fd2d628bc1dca..4a279558c6216df 100644
--- a/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
@@ -8,9 +8,7 @@
 
 // UNSUPPORTED: no-localization
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-
-// clang-cl and cl currently don't support [[no_unique_address]]
-// XFAIL: msvc
+// XFAIL: msvc && !msvc-no-unique-address
 
 // Test the libc++ extension that the value stored in `std::ranges::istream_view` has been marked
 // as _LIBCPP_NO_UNIQUE_ADDRESS
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 3779af1094d5d0f..001b30451f87a3b 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -279,6 +279,14 @@ def _getSuitableClangTidy(cfg):
     Feature(name="msvc", when=_isMSVC),
     Feature(name=lambda cfg: "msvc-{}".format(*_msvcVersion(cfg)), when=_isMSVC),
     Feature(name=lambda cfg: "msvc-{}.{}".format(*_msvcVersion(cfg)), when=_isMSVC),
+    Feature(
+        name="msvc-no-unique-address", when=lambda cfg: sourceBuilds(
+          cfg,
+          """
+          struct A { [[msvc::no_unique_address]] A a; };
+          """,
+        ),
+    ),
 ]
 
 # Deduce and add the test features that that are implied by the #defines in

>From dea2c4054c501f4351b1bf128bcd0ba6eec5f35c Mon Sep 17 00:00:00 2001
From: Caslyn Tonelli <caslyn at google.com>
Date: Mon, 2 Oct 2023 21:51:29 +0000
Subject: [PATCH 2/3] re-format

---
 libcxx/utils/libcxx/test/features.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 001b30451f87a3b..883b43499882c6f 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -280,9 +280,10 @@ def _getSuitableClangTidy(cfg):
     Feature(name=lambda cfg: "msvc-{}".format(*_msvcVersion(cfg)), when=_isMSVC),
     Feature(name=lambda cfg: "msvc-{}.{}".format(*_msvcVersion(cfg)), when=_isMSVC),
     Feature(
-        name="msvc-no-unique-address", when=lambda cfg: sourceBuilds(
-          cfg,
-          """
+        name="msvc-no-unique-address",
+        when=lambda cfg: sourceBuilds(
+            cfg,
+            """
           struct A { [[msvc::no_unique_address]] A a; };
           """,
         ),

>From 575464d34aa83af8bbae5226e28c0ef8d2db6493 Mon Sep 17 00:00:00 2001
From: Caslyn Tonelli <caslyn at google.com>
Date: Tue, 3 Oct 2023 19:07:44 +0000
Subject: [PATCH 3/3] replace feature with clang vers check

---
 .../range.lazy.split/no_unique_address.compile.pass.cpp  | 2 +-
 .../range.split/no_unique_address.compile.pass.cpp       | 2 +-
 .../no_unique_address.compile.pass.cpp                   | 2 +-
 libcxx/utils/libcxx/test/features.py                     | 9 ---------
 4 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
index 844a4c628fbf0b2..b411ce198e253f9 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.lazy.split/no_unique_address.compile.pass.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-// XFAIL: msvc && !msvc-no-unique-address
+// XFAIL: msvc && (clang-16 || clang-17)
 
 // class lazy_split_view {
 //   _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
index b73cf417d29215c..0d8bfbc0316dace 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.split/no_unique_address.compile.pass.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-// XFAIL: msvc && !msvc-no-unique-address
+// XFAIL: msvc && (clang-16 || clang-17)
 
 // class split_view {
 //   _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
diff --git a/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
index 4a279558c6216df..8359d267245fea8 100644
--- a/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.factories/range.istream.view/no_unique_address.compile.pass.cpp
@@ -8,7 +8,7 @@
 
 // UNSUPPORTED: no-localization
 // UNSUPPORTED: c++03, c++11, c++14, c++17
-// XFAIL: msvc && !msvc-no-unique-address
+// XFAIL: msvc && (clang-16 || clang-17)
 
 // Test the libc++ extension that the value stored in `std::ranges::istream_view` has been marked
 // as _LIBCPP_NO_UNIQUE_ADDRESS
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 883b43499882c6f..3779af1094d5d0f 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -279,15 +279,6 @@ def _getSuitableClangTidy(cfg):
     Feature(name="msvc", when=_isMSVC),
     Feature(name=lambda cfg: "msvc-{}".format(*_msvcVersion(cfg)), when=_isMSVC),
     Feature(name=lambda cfg: "msvc-{}.{}".format(*_msvcVersion(cfg)), when=_isMSVC),
-    Feature(
-        name="msvc-no-unique-address",
-        when=lambda cfg: sourceBuilds(
-            cfg,
-            """
-          struct A { [[msvc::no_unique_address]] A a; };
-          """,
-        ),
-    ),
 ]
 
 # Deduce and add the test features that that are implied by the #defines in



More information about the libcxx-commits mailing list