Skip to content

Commit

Permalink
[clang] Adjust coroutine namespace diagnostics
Browse files Browse the repository at this point in the history
The diagnostics concerning mixing std::experimental and std are
somewhat wordy and have some typographical errors.  Diagnostics do not
start with a capital letter nor end with a fullstop.  Usually we try
and link clauses with a semicolon, rather than start a new sentence.
So that's what this patch does.  Along with avoiding repetition about
std::experimental going away.

Differential Revision: https://reviews.llvm.org/D116026
  • Loading branch information
urnathan committed Dec 20, 2021
1 parent 23b2045 commit 565c175
Show file tree
Hide file tree
Showing 14 changed files with 22 additions and 20 deletions.
12 changes: 5 additions & 7 deletions clang/include/clang/Basic/DiagnosticSemaKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -11040,14 +11040,12 @@ def err_implied_coroutine_type_not_found : Error<
"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.">,
"support for std::experimental::%0 will be removed in LLVM 15; "
"use std::%0 instead">,
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 "
"std::experimental namespace is deprecated. Please use coroutine components "
"under std namespace.">;
def err_mixed_use_std_and_experimental_namespace_for_coroutine : Error<
"mixed use of std and std::experimental namespaces for "
"coroutine components">;
def err_implicit_coroutine_std_nothrow_type_not_found : Error<
"std::nothrow was not found; include <new> before defining a coroutine which "
"uses get_return_object_on_allocation_failure()">;
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/Sema/SemaCoroutine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1687,6 +1687,8 @@ ClassTemplateDecl *Sema::lookupCoroutineTraits(SourceLocation KwLoc,
if (ExpNamespace && LookupQualifiedName(ExpResult, ExpNamespace)) {
Diag(KwLoc,
diag::err_mixed_use_std_and_experimental_namespace_for_coroutine);
Diag(KwLoc, diag::warn_deprecated_coroutine_namespace)
<< "coroutine_traits";
return nullptr;
}
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/co_await-range-for-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ struct MyForLoopArrayAwaiter {
};
MyForLoopArrayAwaiter g() {
int arr[10] = {0};
for co_await (auto i : arr) {} // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
for co_await (auto i : arr) {} // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
// expected-error@-1 {{call to deleted member function 'await_transform'}}
// expected-note@-2 {{'await_transform' implicitly required by 'co_await' here}}
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/coreturn-eh-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ struct std::experimental::coroutine_traits<void, T1> { using promise_type = prom
VoidTagReturnValue test() {
object x = {};
try {
co_return {}; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_return {}; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
} catch (...) {
throw;
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/coreturn-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ struct std::experimental::coroutine_traits<float, T...> { using promise_type = p
template <typename... T>
struct std::experimental::coroutine_traits<int, T...> { using promise_type = promise_int; };

void test0() { co_await a; } // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
void test0() { co_await a; } // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
float test1() { co_await a; }

int test2() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ struct coro_t {

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; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_await a; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
}

template <typename T>
Expand Down
5 changes: 3 additions & 2 deletions clang/test/SemaCXX/coroutine-mixed-exp-namespace.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file is to test the mixed use of `std::experimental::coroutine*` and `std::coroutine*`
// wouldn't make the compliler to crash and emit the diagnostic message correctly.
// wouldn't make the compiler to crash and emit the diagnostic message correctly.
// RUN: %clang_cc1 -verify -std=c++20 -fsyntax-only %s

#include "Inputs/std-coroutine-exp-namespace.h"
Expand All @@ -23,5 +23,6 @@ template <>
struct std::coroutine_traits<void> { using promise_type = promise_void; };

void test() {
co_return; // expected-error {{Found mixed use of std namespace and std::experimental namespace for coroutine, which is disallowed. The coroutine components in std::experimental namespace is deprecated. Please use coroutine components under std namespace.}}
co_return; // expected-error {{mixed use of std and std::experimental namespaces for coroutine components}}
// expected-warning@-1{{support for std::experimental::coroutine_traits will be removed}}
}
3 changes: 2 additions & 1 deletion clang/test/SemaCXX/coroutine-mixed2-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ template <>
struct std::coroutine_traits<void> { using promise_type = promise_void; };

void test() {
co_return; // expected-error {{Found mixed use of std namespace and std::experimental namespace for coroutine, which is disallowed. The coroutine components in std::experimental namespace is deprecated. Please use coroutine components under std namespace.}}
co_return; // expected-error {{mixed use of std and std::experimental namespaces for coroutine components}}
// expected-warning@-1{{support for std::experimental::coroutine_traits will be removed}}
}
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/coroutine-rvo-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ struct task {

task<NoCopyNoMove> local2val() {
NoCopyNoMove value;
co_return value; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_return value; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
}

task<NoCopyNoMove &> local2ref() {
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/coroutine-seh-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ template <> struct std::experimental::coroutine_traits<void> {
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}}
// expected-warning@-1 {{support for std::experimental::coroutine_traits will be removed}}
} __except (0) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ template <> struct coroutine_traits<void>; // expected-note {{forward declaratio

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}}
// expected-warning@-1 {{support for std::experimental::coroutine_traits will be removed}}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ struct std::experimental::coroutine_traits<void, T...> { using promise_type = pr

#ifndef DISABLE_WARNING
void test0() { // expected-warning {{'promise_void' is required to declare the member 'unhandled_exception()' when exceptions are enabled}}
co_return; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_return; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
}
#else
void test0() { // expected-no-diagnostics
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ struct awaitable {
} a;

task f() {
co_await a; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_await a; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
}

int main() {
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/coroutines-exp-namespace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ struct auto_await_suspend {

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; // expected-warning {{Please move from std::experimental::coroutine_traits to std::coroutine_traits}}
co_await a; // expected-warning {{support for std::experimental::coroutine_traits will be removed}}
}

template <typename... T>
Expand Down

0 comments on commit 565c175

Please sign in to comment.