================
@@ -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:
I don't think we want the warning here (because it's not user actionable), so
I'd remove the fixme (but leave the test).
Other tests to consider
- ` ==`
- `<` on a class that defines <=>`
- `!=` on a class that defines `==`
(ie, operator rewrite tests - I suspect these will need fixme?)
https://github.com/llvm/llvm-project/pull/219177
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits