================
@@ -13102,7 +13102,10 @@ StmtResult 
TreeTransform<Derived>::TransformUnresolvedSYCLKernelCallStmt(
 template <typename Derived>
 ExprResult TreeTransform<Derived>::TransformCXXReflectExpr(CXXReflectExpr *E) {
   // TODO(reflection): Implement its transform
-  assert(false && "not implemented yet");
+  if (!E->isTypeDependent())
+    return E;
----------------
changkhothuychung wrote:

@Sirraide ah I see, thanks for the review! 

The reason I added this is because there was this suggested test from the last 
PR.

```cpp
template <typename T = X, auto ptm = &X::a>
constexpr auto ptmOp = ((T)(^^int)).*ptm;
```

This test should fail. As far as I understand, the template instantiator of 
clang will treat the expression `((T)(^^int)).*ptm` as being dependent, and 
will perform a semantic tree transformation on each element inside the 
expression. Currently, the tree transform of reflection is doing nothing, so 
the output doesn't output the correct error message as `can't perform a cast 
from std::meta::info to the destination type`. 

So maybe we should leave this unchanged for now and will consider addressing 
the test above later?

https://github.com/llvm/llvm-project/pull/190356
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to