Skip to content

Commit

Permalink
[clang] Don't emit redundant warnings for 'return;'
Browse files Browse the repository at this point in the history
when the function declaration's return type is already invalid for
some reason. This is relevant to #49188
because another way that the declaration's return type could become
invalid is that it might be `C auto` where `C<void>` is false.

Differential Revision: https://reviews.llvm.org/D119094
  • Loading branch information
Arthur O'Dwyer committed Feb 14, 2022
1 parent 528deed commit 3c8d2aa
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
4 changes: 3 additions & 1 deletion clang/lib/Sema/SemaStmt.cpp
Expand Up @@ -4098,7 +4098,9 @@ StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
} else if (!RetValExp && !HasDependentReturnType) {
FunctionDecl *FD = getCurFunctionDecl();

if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {
if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {
// The intended return type might have been "void", so don't warn.
} else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {
// C++11 [stmt.return]p2
Diag(ReturnLoc, diag::err_constexpr_return_missing_expr)
<< FD << FD->isConsteval();
Expand Down
23 changes: 23 additions & 0 deletions clang/test/SemaCXX/deduced-return-void.cpp
@@ -0,0 +1,23 @@
// RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify %s
// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s

// Check that we don't get any extra warning for "return" without an
// expression, in a function that might have been intended to return
// void all along.
auto f1() {
return 1;
return; // expected-error {{deduced as 'void' here but deduced as 'int' in earlier return statement}}
}

decltype(auto) f2() {
return 1;
return; // expected-error {{deduced as 'void' here but deduced as 'int' in earlier return statement}}
}

auto *g() {
return; // expected-error {{cannot deduce return type 'auto *' from omitted return expression}}
}

decltype(h1) h1() { // expected-error {{use of undeclared identifier 'h1'}}
return;
}

0 comments on commit 3c8d2aa

Please sign in to comment.