lewissbaker added inline comments.

================
Comment at: lib/Sema/SemaCoroutine.cpp:675
+  // Second emphasis of [expr.await]p2: must be outside of an exception 
handler.
+  if (S.getCurScope()->getFlags() & Scope::CatchScope) {
+    S.Diag(Loc, diag::err_coroutine_within_handler) << Keyword;
----------------
modocache wrote:
> modocache wrote:
> > lewissbaker wrote:
> > > modocache wrote:
> > > > EricWF wrote:
> > > > > We can still build a valid AST after encountering this error, no?
> > > > > 
> > > > > 
> > > > I believe so. Just to be clear: you'd like me to continue building the 
> > > > AST even after emitting this error diagnostic? My understanding is that 
> > > > most of this file bails soon after any error is encountered (correct me 
> > > > if that's wrong). I'm happy to change that, but I wonder if it'd be 
> > > > better to do that in a separate diff...?
> > > Do the scope flags reset when a lambda occurs within a catch-block?
> > > 
> > > eg. The following should still be valid.
> > > ```
> > > try { ... }
> > > catch (...) {
> > >   []() -> task { co_await foo(); }();
> > > }
> > > ```
> > I believe they're reset, the example you posted compiles fine with this 
> > patch. I'll add a test case specifically for this and confirm exactly where 
> > the scope flags are reset or ignored in the lambda case.
> When the parser encounters a lambda, it takes the path 
> `Parser::ParseLambdaExpression -> 
> Parser::ParseLambdaExpressionAfterIntroducer -> 
> Parser::ParseCompoundStatementBody`, which creates an inner scope for the 
> body of the lambda. This inner scope does not have the `Scope::CatchScope` 
> flag, so it doesn't result in the error.
> 
> Although, your question did make me realize that this compiles just fine, 
> even with this patch:
> 
> ```
> void example() {
>   try {
>     throw;
>   } catch (...) {
>     try {
>       co_await a;
>     }
>   }
> }
> ```
> 
> But I believe this above case should also be treated as an error, right?
Yes, I believe that co_await within a try-block within a catch-block should not 
be allowed.


Repository:
  rC Clang

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

https://reviews.llvm.org/D59076



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to