================
@@ -0,0 +1,57 @@
+// RUN: %clang_cc1 -std=c++20 -Wdeprecated-declarations -I%S/Inputs -verify %s
+
+#include "std-compare.h"
+
+namespace GH147293 {
+struct A {
+  [[deprecated("use something else")]] int x = 42; // expected-note {{marked 
deprecated here}}
+};
+
+A makeDefaultA() { return {}; }    // ctor is implicit -> no warn
+A copyA(const A &a) { return a; }  // copy-ctor implicit -> no warn
+
+void assignA() {
+  A a, b;
+  a = b;                           // copy-assign implicit -> no warn
+}
+
+void useA() {
+  A a;
+  (void)a.x;                       // expected-warning {{is deprecated}}
+}
+
+// Explicitly-defaulted ctor – now silent
+struct B {
+  [[deprecated]] int y;
+  B() = default;                   // no warning under new policy
+};
+
+}
+
+namespace GH147293_regression {
+
+struct A {
+  [[deprecated("use something else")]] int x = 42;
+
+  auto operator<=>(const A&) const = default;
+};
+
+void foo() {
+  A x, y;
+  // FIXME: We want the deprecation warnings because operator<=> uses A.x!
+  (void)(x == y);
+}
+
+}
----------------
cor3ntin wrote:

And reverse operators (ie == and !=) work slightly differently so it's worth 
testing

https://github.com/llvm/llvm-project/pull/219177
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to