[PATCH] D146140: [clang] Properly parse variable template requires clause in lambda

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 15 08:39:14 PDT 2023


erichkeane added inline comments.


================
Comment at: clang/lib/Parse/ParseExprCXX.cpp:1283
 
   ParseScope LambdaScope(this, Scope::LambdaScope | Scope::DeclScope |
                                    Scope::FunctionDeclarationScope |
----------------
Ok, last bit, I promise :)  I see that we set up the lambda scope here and push the lambda scope on 1287.  Instead of passing a bool, could we just figure out the `IsLambdaRequiresClause` based on that instead?  See definition of `PushLambdaScope` here: https://clang.llvm.org/doxygen/Sema_8cpp_source.html#l02141

A test to see if that would work would be the one you have below, PLUS an example of a requires clause INSIDE of a lambda that itself isn't a lambda that would reproduce the warning(though I'm not convinced ATM that is possible, I don't think we allow a template inside block scope, unless there is some trick I'm too uncreative enough to come up with).  If none exists, just checking the current scope would work and perhaps be more preferential.  

We do this rarely, but we do it at least in SemaStmt.cpp in ActOnCapScopeReturnStmt.  Just a `dyn_cast<LambdaScopeInfo>(getCurFunction())` might be able to replace the bool all over the place.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D146140



More information about the cfe-commits mailing list