[clang] [Clang][WIP] Normalize constraints before checking for satisfaction (PR #141776)

via cfe-commits cfe-commits at lists.llvm.org
Sun Jun 1 04:33:45 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff HEAD~1 HEAD --extensions cpp,h -- clang/include/clang/AST/ASTConcept.h clang/include/clang/AST/TemplateBase.h clang/include/clang/Sema/Sema.h clang/include/clang/Sema/SemaConcept.h clang/include/clang/Sema/Template.h clang/lib/AST/ASTConcept.cpp clang/lib/AST/ASTContext.cpp clang/lib/Sema/SemaConcept.cpp clang/lib/Sema/SemaDeclCXX.cpp clang/lib/Sema/SemaExprCXX.cpp clang/lib/Sema/SemaTemplate.cpp clang/lib/Sema/SemaTemplateDeduction.cpp clang/lib/Sema/SemaTemplateInstantiate.cpp clang/lib/Sema/SemaTemplateVariadic.cpp clang/lib/Sema/TreeTransform.h clang/lib/Serialization/ASTWriterStmt.cpp clang/test/CXX/drs/cwg25xx.cpp clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp clang/test/CXX/temp/temp.constr/temp.constr.atomic/constrant-satisfaction-conversions.cpp clang/test/CXX/temp/temp.constr/temp.constr.normal/p1.cpp clang/test/SemaCXX/cxx23-assume.cpp clang/test/SemaCXX/cxx2c-fold-exprs.cpp clang/test/SemaCXX/invalid-requirement-requires-expr.cpp clang/test/SemaCXX/overload-resolution-deferred-templates.cpp clang/test/SemaTemplate/concepts-recovery-expr.cpp clang/test/SemaTemplate/concepts.cpp clang/test/SemaTemplate/instantiate-abbreviated-template.cpp clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp
index 279d999a5..2de0eceff 100644
--- a/clang/lib/Sema/SemaConcept.cpp
+++ b/clang/lib/Sema/SemaConcept.cpp
@@ -534,12 +534,12 @@ static bool calculateConstraintSatisfaction(
   if (!NumExpansions)
     return false;
 
-  if(*NumExpansions == 0) {
+  if (*NumExpansions == 0) {
     Satisfaction.IsSatisfied = Conjunction;
     return true;
   }
 
-  //bool HasAnyFailed = false;
+  // bool HasAnyFailed = false;
   for (unsigned I = 0; I < *NumExpansions; I++) {
     Sema::ArgPackSubstIndexRAII SubstIndex(S, I);
     Satisfaction.IsSatisfied = false;
@@ -550,7 +550,8 @@ static bool calculateConstraintSatisfaction(
     if (!Success)
       return false;
     if (!Conjunction && Satisfaction.IsSatisfied) {
-      Satisfaction.Details.erase(Satisfaction.Details.begin() + EffectiveDetailEndIndex,
+      Satisfaction.Details.erase(Satisfaction.Details.begin() +
+                                     EffectiveDetailEndIndex,
                                  Satisfaction.Details.end());
       break;
     }
@@ -655,10 +656,11 @@ static bool calculateConstraintSatisfaction(
   Satisfaction.IsSatisfied = false;
 
   Ok = calculateConstraintSatisfaction(S, Constraint.getRHS(), Template,
-                                         TemplateNameLoc, MLTAL, Satisfaction,
-                                         PackSubstitutionIndex);
-  if(Ok && Satisfaction.IsSatisfied && !Satisfaction.ContainsErrors)
-    Satisfaction.Details.erase(Satisfaction.Details.begin() + EffectiveDetailEndIndex,
+                                       TemplateNameLoc, MLTAL, Satisfaction,
+                                       PackSubstitutionIndex);
+  if (Ok && Satisfaction.IsSatisfied && !Satisfaction.ContainsErrors)
+    Satisfaction.Details.erase(Satisfaction.Details.begin() +
+                                   EffectiveDetailEndIndex,
                                Satisfaction.Details.end());
   return Ok;
 }
@@ -1314,9 +1316,10 @@ static void diagnoseUnsatisfiedRequirement(Sema &S,
                                            concepts::NestedRequirement *Req,
                                            bool First) {
   DiagnoseUnsatisfiedConstraint(S, Req->getConstraintSatisfaction().records(),
-                                Req->hasInvalidConstraint() ? SourceLocation() :
-                                Req->getConstraintExpr()->getExprLoc(), First,
-                                Req);
+                                Req->hasInvalidConstraint()
+                                    ? SourceLocation()
+                                    : Req->getConstraintExpr()->getExprLoc(),
+                                First, Req);
 }
 
 static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S,

``````````

</details>


https://github.com/llvm/llvm-project/pull/141776


More information about the cfe-commits mailing list