[PATCH] D146178: [Clang][Sema] Fix comparison of constraint expressions
Erich Keane via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 22 11:22:23 PDT 2023
erichkeane added a comment.
Hmm... there is a lot going on here that I'm not sure is necessary? I was able to change the `AreConstraintExpressionsEqual` 'if' body to just:
+ MultiLevelTemplateArgumentList OldMLTAL =
+ getTemplateArgumentsForComparison(*this, Old);
+ MultiLevelTemplateArgumentList NewMLTAL =
+ getTemplateArgumentsForComparison(*this, New); // just does what you did to get the MLTAL, but in a separate function.
+
+ ExprResult OldConstrRes = SubstConstraintExpr(OldConstr, OldMLTAL);
+ ExprResult NewConstrRes = SubstConstraintExpr(NewConstr, NewMLTAL);
+
+ if (!OldConstrRes.isUsable() || !NewConstrRes.isUsable())
+ return false;
+
+ OldConstr = OldConstrRes.get();
+ NewConstr = NewConstrRes.get();
and the changes to SemaTemplateInstantiateDecl don't seem necessary? Though I see the SFINAE trap is perhaps a good idea.
With that all done, the it seemed the only problem was with how a requires clause was instantiated(which I suspect needs to just not check the constraint always). But I don't see the rest of this patch is relevant? I DO note that with the change above, your test all works.
================
Comment at: clang/lib/Sema/SemaConcept.cpp:744
namespace {
class AdjustConstraintDepth : public TreeTransform<AdjustConstraintDepth> {
unsigned TemplateDepth = 0;
----------------
This class here should probably go away now, since we're replacing it.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D146178/new/
https://reviews.llvm.org/D146178
More information about the llvm-commits
mailing list