ChuanqiXu updated this revision to Diff 387811.
ChuanqiXu added a comment.

Address comments.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113977/new/

https://reviews.llvm.org/D113977

Files:
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/Sema/SemaCoroutine.cpp
  clang/test/SemaCXX/co_await-range-for-exp-namespace.cpp
  clang/test/SemaCXX/coreturn-eh-exp-namespace.cpp
  clang/test/SemaCXX/coreturn-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-final-suspend-noexcept-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-mixed2-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-rvo-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-seh-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-traits-undefined-template-exp-namespace.cpp
  clang/test/SemaCXX/coroutine-unhandled_exception-warning-exp-namespace.cpp
  clang/test/SemaCXX/coroutine_handle-address-return-type-exp-namespace.cpp
  clang/test/SemaCXX/coroutines-exp-namespace.cpp
  
libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.pass.cpp
  libcxx/test/std/experimental/language.support/support.coroutines/lit.local.cfg

Index: libcxx/test/std/experimental/language.support/support.coroutines/lit.local.cfg
===================================================================
--- libcxx/test/std/experimental/language.support/support.coroutines/lit.local.cfg
+++ libcxx/test/std/experimental/language.support/support.coroutines/lit.local.cfg
@@ -5,3 +5,4 @@
   config.unsupported = True
 else:
   config.test_format.addCompileFlags(config, '-fcoroutines-ts')
+  config.test_format.addCompileFlags(config, '-Wno-deprecated-experimental-coroutine')
Index: libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.pass.cpp
===================================================================
--- libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.pass.cpp
+++ libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.pass.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // REQUIRES: fcoroutines-ts
-// ADDITIONAL_COMPILE_FLAGS: -fcoroutines-ts
+// ADDITIONAL_COMPILE_FLAGS: -fcoroutines-ts -Wno-deprecated-experimental-coroutine
 
 // A simple "breathing" test that checks that <experimental/coroutine>
 // can be parsed and used in all dialects, including C++03 in order to match
Index: clang/test/SemaCXX/coroutines-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutines-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutines-exp-namespace.cpp
@@ -83,7 +83,7 @@
 
 struct DummyVoidTag {};
 DummyVoidTag no_specialization() { // expected-error {{this function cannot be a coroutine: 'std::experimental::coroutine_traits<DummyVoidTag>' has no member named 'promise_type'}}
-  co_await a;
+  co_await a;                      // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
 
 template <typename... T>
Index: clang/test/SemaCXX/coroutine_handle-address-return-type-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine_handle-address-return-type-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine_handle-address-return-type-exp-namespace.cpp
@@ -66,7 +66,7 @@
 } a;
 
 task f() {
-  co_await a;
+  co_await a; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
 
 int main() {
Index: clang/test/SemaCXX/coroutine-unhandled_exception-warning-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-unhandled_exception-warning-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-unhandled_exception-warning-exp-namespace.cpp
@@ -5,7 +5,7 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts \
 // RUN:    -fsyntax-only -Wignored-qualifiers -Wno-error=return-type -verify \
 // RUN:    -fblocks -Wno-unreachable-code -Wno-unused-value \
-// RUN:    -DDISABLE_WARNING -Wno-coroutine-missing-unhandled-exception
+// RUN:    -DDISABLE_WARNING -Wno-deprecated-experimental-coroutine -Wno-coroutine-missing-unhandled-exception
 
 #if __has_feature(cxx_exceptions)
 #error This test requires exceptions be disabled
@@ -32,7 +32,7 @@
 
 #ifndef DISABLE_WARNING
 void test0() { // expected-warning {{'promise_void' is required to declare the member 'unhandled_exception()' when exceptions are enabled}}
-  co_return;
+  co_return;   // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
 #else
 void test0() { // expected-no-diagnostics
Index: clang/test/SemaCXX/coroutine-traits-undefined-template-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-traits-undefined-template-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-traits-undefined-template-exp-namespace.cpp
@@ -16,4 +16,5 @@
 
 void uses_forward_declaration() {
   co_return; // expected-error {{this function cannot be a coroutine: missing definition of specialization 'coroutine_traits<void>'}}
+             // expected-warning@-1 {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
Index: clang/test/SemaCXX/coroutine-seh-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-seh-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-seh-exp-namespace.cpp
@@ -33,6 +33,7 @@
 void SEH_used() {
   __try {      // expected-error {{cannot use SEH '__try' in a coroutine when C++ exceptions are enabled}}
     co_return; // expected-note {{function is a coroutine due to use of 'co_return' here}}
+               // expected-warning@-1 {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
   } __except (0) {
   }
 }
Index: clang/test/SemaCXX/coroutine-rvo-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-rvo-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-rvo-exp-namespace.cpp
@@ -62,7 +62,7 @@
 
 task<NoCopyNoMove> local2val() {
   NoCopyNoMove value;
-  co_return value;
+  co_return value; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
 
 task<NoCopyNoMove &> local2ref() {
Index: clang/test/SemaCXX/coroutine-mixed2-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-mixed2-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-mixed2-exp-namespace.cpp
@@ -1,4 +1,4 @@
-// This file is to test the mixed use of `std::experimental::coroutine*` and `std::coroutine*`
+// This file is to test the mixed use of `std::experimental::coroutine_traits` and `std::coroutine_traits`
 // which is similar to coroutine-mixed-exp-namesapce. This file tests the relative order of
 // included header wouldn't affect the diagnostic messages.
 // RUN: %clang_cc1 -verify -std=c++20 -fsyntax-only %s
Index: clang/test/SemaCXX/coroutine-final-suspend-noexcept-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coroutine-final-suspend-noexcept-exp-namespace.cpp
+++ clang/test/SemaCXX/coroutine-final-suspend-noexcept-exp-namespace.cpp
@@ -56,7 +56,7 @@
 
 coro_t f(int n) { // expected-error {{the expression 'co_await __promise.final_suspend()' is required to be non-throwing}}
   A a{};
-  co_await a;
+  co_await a; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 }
 
 template <typename T>
Index: clang/test/SemaCXX/coreturn-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coreturn-exp-namespace.cpp
+++ clang/test/SemaCXX/coreturn-exp-namespace.cpp
@@ -83,7 +83,7 @@
 template <typename... T>
 struct std::experimental::coroutine_traits<int, T...> { using promise_type = promise_int; };
 
-void test0() { co_await a; }
+void test0() { co_await a; } // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
 float test1() { co_await a; }
 
 int test2() {
Index: clang/test/SemaCXX/coreturn-eh-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/coreturn-eh-exp-namespace.cpp
+++ clang/test/SemaCXX/coreturn-eh-exp-namespace.cpp
@@ -1,5 +1,4 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fcxx-exceptions -fsyntax-only -Wignored-qualifiers -Wno-error=return-type -verify -fblocks -Wall -Wextra -Wno-error=unreachable-code
-// expected-no-diagnostics
 
 #include "Inputs/std-coroutine-exp-namespace.h"
 
@@ -40,7 +39,7 @@
 VoidTagReturnValue test() {
   object x = {};
   try {
-    co_return {};
+    co_return {}; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
   } catch (...) {
     throw;
   }
Index: clang/test/SemaCXX/co_await-range-for-exp-namespace.cpp
===================================================================
--- clang/test/SemaCXX/co_await-range-for-exp-namespace.cpp
+++ clang/test/SemaCXX/co_await-range-for-exp-namespace.cpp
@@ -50,8 +50,7 @@
 };
 MyForLoopArrayAwaiter g() {
   int arr[10] = {0};
-  for
-    co_await(auto i : arr) {}
+  for co_await(auto i : arr) {} // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
   // expected-error@-1 {{call to deleted member function 'await_transform'}}
   // expected-note@-2 {{'await_transform' implicitly required by 'co_await' here}}
 }
@@ -73,16 +72,14 @@
 };
 ForLoopAwaiterBadBeginTransform bad_begin() {
   Range<int> R;
-  for
-    co_await(auto i : R) {}
+  for co_await(auto i : R) {}
   // expected-error@-1 {{call to deleted member function 'await_transform'}}
   // expected-note@-2 {{'await_transform' implicitly required by 'co_await' here}}
 }
 template <class Dummy>
 ForLoopAwaiterBadBeginTransform bad_begin_template(Dummy) {
   Range<Dummy> R;
-  for
-    co_await(auto i : R) {}
+  for co_await(auto i : R) {}
   // expected-error@-1 {{call to deleted member function 'await_transform'}}
   // expected-note@-2 {{'await_transform' implicitly required by 'co_await' here}}
 }
@@ -109,8 +106,7 @@
 };
 ForLoopAwaiterBadIncTransform bad_inc_transform() {
   Range<float> R;
-  for
-    co_await(auto i : R) {}
+  for co_await(auto i : R) {}
   // expected-error@-1 {{overload resolution selected deleted operator 'co_await'}}
   // expected-note@-2 {{in implicit call to 'operator++' for iterator of type 'Range<float>'}}
 }
@@ -118,8 +114,7 @@
 template <class Dummy>
 ForLoopAwaiterBadIncTransform bad_inc_transform_template(Dummy) {
   Range<Dummy> R;
-  for
-    co_await(auto i : R) {}
+  for co_await(auto i : R) {}
   // expected-error@-1 {{overload resolution selected deleted operator 'co_await'}}
   // expected-note@-2 {{in implicit call to 'operator++' for iterator of type 'Range<long>'}}
 }
@@ -130,8 +125,7 @@
 template <class T>
 constexpr void never_instant(T) {
   static_assert(sizeof(T) != sizeof(T), "function should not be instantiated");
-  for
-    co_await(auto i : foo(T{})) {}
+  for co_await(auto i : foo(T{})) {}
   // expected-error@-1 {{'co_await' cannot be used in a constexpr function}}
 }
 
@@ -155,8 +149,7 @@
 template <class T>
 ForLoopAwaiterCoawaitLookup test_coawait_lookup(T) {
   Range<T> R;
-  for
-    co_await(auto i : R) {}
+  for co_await(auto i : R) {}
   // expected-error@-1 {{no member named 'await_ready' in 'CoawaitTag<Iter<int>, false>'}}
 }
 template ForLoopAwaiterCoawaitLookup test_coawait_lookup(int); // expected-note {{requested here}}
Index: clang/lib/Sema/SemaCoroutine.cpp
===================================================================
--- clang/lib/Sema/SemaCoroutine.cpp
+++ clang/lib/Sema/SemaCoroutine.cpp
@@ -1675,8 +1675,8 @@
             << "std::coroutine_traits";
         return nullptr;
       }
-      /// TODO: Add a warning about not including <experimental/coroutine>
-      /// once we update libcxx.
+      Diag(KwLoc, diag::warn_deprecated_coroutine_namespace)
+          << "coroutine_traits";
     } else {
       /// When we found coroutine_traits in std namespace. Make sure there is no
       /// misleading definition in std::experimental namespace.
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -11011,6 +11011,10 @@
   "%0 type was not found; include <coroutine> before defining "
   "a coroutine; include <experimental/coroutine> if your version "
   "of libcxx is less than 14.0">;
+def warn_deprecated_coroutine_namespace : Warning <
+  "Please move from std::experimental::%0 to std::%0. "
+  "Support for std::experimental::%0 will be removed in LLVM 15.">,
+  InGroup<DeprecatedExperimentalCoroutine>;
 def err_mixed_use_std_and_experimental_namespace_for_coroutine : Error <
   "Found mixed use of std namespace and std::experimental namespace for "
   "coroutine, which is disallowed. The coroutine components in "
Index: clang/include/clang/Basic/DiagnosticGroups.td
===================================================================
--- clang/include/clang/Basic/DiagnosticGroups.td
+++ clang/include/clang/Basic/DiagnosticGroups.td
@@ -54,7 +54,9 @@
                                     CompoundTokenSplitBySpace]>;
 def CoroutineMissingUnhandledException :
   DiagGroup<"coroutine-missing-unhandled-exception">;
-def Coroutine : DiagGroup<"coroutine", [CoroutineMissingUnhandledException]>;
+def DeprecatedExperimentalCoroutine :
+  DiagGroup<"deprecated-experimental-coroutine">;
+def Coroutine : DiagGroup<"coroutine", [CoroutineMissingUnhandledException, DeprecatedExperimentalCoroutine]>;
 def ObjCBoolConstantConversion : DiagGroup<"objc-bool-constant-conversion">;
 def ConstantConversion : DiagGroup<"constant-conversion",
                                    [BitFieldConstantConversion,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to