================
@@ -27,8 +27,10 @@ ExprDependence clang::computeDependence(FullExpr *E) {
 
 ExprDependence clang::computeDependence(OpaqueValueExpr *E) {
   auto D = toExprDependenceForImpliedType(E->getType()->getDependence());
+  // An OpaqueValueExpr has no syntactic children, so it does not contain an
+  // unexpanded pack even if its source does.
   if (auto *S = E->getSourceExpr())
-    D |= S->getDependence();
+    D |= S->getDependence() & ~ExprDependence::UnexpandedPack;
   assert(!(D & ExprDependence::UnexpandedPack));
----------------
xakep8 wrote:

Yes that makes sense but there is TransformBinaryConditionalOperator which 
transforms the common expression which OVE refers to like `values` in the case 
I mentioned, and then it will transform the false expression and then rebuild 
the `values ?: 0` expression and then the rebuild will also create a new OVE 
from the transformed pack.

But while we're talking about this there is one risk to what I did, if the 
source expression information is not retained for some case then this could 
cause an issue but what I'm thinking is if that would even be the case ever? 
also if some other case does not have a custom rebuild path for transformed 
situation then that could be another issue......

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

Reply via email to