erichkeane wrote:

> @Rajveer100 I think instead of looking at the context, we should check if the 
> expression (`Ex`) is instantiation dependent

I don't think we can just check the expression, the 'throw' itself could be 
completely fine.  Consider:

```
template<typename T> void foo() {
  throw 1;
```
The expression is NOT dependent, but we don't wanna diagnose anyway unless it 
is instantiated.


> @erichkeane As expected the following case is being accepted, which shouldn't 
> happen, let me know what you recommend to diagnose this:
> 
> ```c++
> template <typename T> void foo() {
>   try {
>   } catch (...) {
>   }
>   throw 1;
> }
> void bar2() { foo<int>(); }
> ```

What we will have to do likely is move the checking for this to some piece of 
common code that is used by TreeTransform for these two.  I haven't looked at a 
good place, but you'll probably see `TransformCXXThrowExpr` (and an equiv for 
`try`) that will call a rebuild/etc type function, which should then call the 
`build` (or some variety of a check function).

Also note, even in THOSE cases we have to properly check the decl context, 
since it could be a partial specialization/instantiation, so please make sure 
those are tested as well!

https://github.com/llvm/llvm-project/pull/139859
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to