File tree Expand file tree Collapse file tree 2 files changed +40
-0
lines changed Expand file tree Collapse file tree 2 files changed +40
-0
lines changed Original file line number Diff line number Diff line change @@ -1965,9 +1965,15 @@ bool Sema::buildCoroutineParameterMoves(SourceLocation Loc) {
1965
1965
if (PD->getType ()->isDependentType ())
1966
1966
continue ;
1967
1967
1968
+ // Preserve the referenced state for unused parameter diagnostics.
1969
+ bool DeclReferenced = PD->isReferenced ();
1970
+
1968
1971
ExprResult PDRefExpr =
1969
1972
BuildDeclRefExpr (PD, PD->getType ().getNonReferenceType (),
1970
1973
ExprValueKind::VK_LValue, Loc); // FIXME: scope?
1974
+
1975
+ PD->setReferenced (DeclReferenced);
1976
+
1971
1977
if (PDRefExpr.isInvalid ())
1972
1978
return false ;
1973
1979
Original file line number Diff line number Diff line change
1
+ // RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -verify -std=c++20 %s
2
+
3
+ #include " Inputs/std-coroutine.h"
4
+
5
+ struct awaitable {
6
+ bool await_ready () noexcept ;
7
+ void await_resume () noexcept ;
8
+ void await_suspend (std::coroutine_handle<>) noexcept ;
9
+ };
10
+
11
+ struct task : awaitable {
12
+ struct promise_type {
13
+ task get_return_object () noexcept ;
14
+ awaitable initial_suspend () noexcept ;
15
+ awaitable final_suspend () noexcept ;
16
+ void unhandled_exception () noexcept ;
17
+ void return_void () noexcept ;
18
+ };
19
+ };
20
+
21
+ task foo (int a) { // expected-warning{{unused parameter 'a'}}
22
+ co_return ;
23
+ }
24
+
25
+ task bar (int a, int b) { // expected-warning{{unused parameter 'b'}}
26
+ a = a + 1 ;
27
+ co_return ;
28
+ }
29
+
30
+ void create_closure () {
31
+ auto closure = [](int c) -> task { // expected-warning{{unused parameter 'c'}}
32
+ co_return ;
33
+ };
34
+ }
You can’t perform that action at this time.
0 commit comments