shafik added inline comments.
================ Comment at: clang/lib/AST/ExprConstant.cpp:13547-13551 + if (auto ValD = Info.EvaluatingDecl.dyn_cast<const ValueDecl *>()) { + const VarDecl *VD = dyn_cast_or_null<VarDecl>(ValD); + if (VD && !VD->isConstexpr()) + NotConstexprVar = true; + } ---------------- shafik wrote: > aaron.ballman wrote: > > This seems to be equivalent unless I'm misunderstanding something about the > > member dyn_cast. > I think the problem is that `PointerUnion` requires that it be one of the > static types it was defined with and in this case that is `const ValueDecl *, > const Expr *` but maybe I am missing something. It looks like the big difference is that in `doCastIfPossible(...)` we end up calling `Self::isPossible(f)` which ends up in `PointerUnion::isPossible...)` which uses `FirstIndexOfType` and if the template arguments don't contain the type then it fail. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131874/new/ https://reviews.llvm.org/D131874 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits