[PATCH] D92211: [clang] Improve diagnostics for auto-return-type function if the return expr contains expr.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 27 01:26:19 PST 2020


sammccall added a comment.

This approach isn't the most obvious one, to me.
In the test, the lambda is invalid with `auto` return type, where it seems that valid with `int` return type and a body that contains-errors would be better.

I'm guessing this comes down to what fits most naturally in the implementation? (If you skip return statements with broken types, you need to distinguish between void lambdas and broken ones somehow).
Anyway, this decision/motivation probably also deserves a comment.



================
Comment at: clang/lib/Sema/SemaStmt.cpp:3306
 StmtResult
 Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) {
   // If this is the first return we've seen, infer the return type.
----------------
This seems to only handle lambdas (and blocks).
Is there a corresponding fix needed for C++14 `auto x() { ... }` ?


================
Comment at: clang/lib/Sema/SemaStmt.cpp:3331
+    FunctionDecl *FD = CurLambda->CallOperator;
+    if (FD->isInvalidDecl())
+      return StmtError();
----------------
This deserves a comment, like:

```
// If we've already decided this lambda is invalid, e.g. because
// we saw a `return` whose expression had an error, don't keep
// trying to deduce its return type.
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92211



More information about the cfe-commits mailing list