https://github.com/GS-GOAT created 
https://github.com/llvm/llvm-project/pull/127211

… #126113

-Transforming Indices: For array designators, transform the index expression 
and update ExprChanged if it's modified.
-Correct Initializer Check: Compare the transformed initializer against the 
original to accurately track changes.
-Single Initializer Transformation: The initializer is processed once, not per 
designator, as each DesignatedInitExpr has one initializer.

Fixes #126113

>From ba3bcf29c041487e8f23189bffd04b2d2fed9f41 Mon Sep 17 00:00:00 2001
From: GS-GOAT <86884129+gs-g...@users.noreply.github.com>
Date: Fri, 14 Feb 2025 13:46:23 +0530
Subject: [PATCH] Fixing the logic issue in
 TransformTypos::TransformDesignatedInitExpr #126113

-Transforming Indices: For array designators, transform the index expression
and update ExprChanged if it's modified.
-Correct Initializer Check: Compare the transformed initializer against the
original to accurately track changes.
-Single Initializer Transformation: The initializer is processed once, not
per designator, as each DesignatedInitExpr has one initializer.

Fixes #126113
---
 clang/lib/Sema/TreeTransform.h | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index fc1e3f7d58f4d..81388b2783fad 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -13634,12 +13634,12 @@ ExprResult
 TreeTransform<Derived>::TransformDesignatedInitExpr(DesignatedInitExpr *E) {
   Designation Desig;
 
-  // transform the initializer value
+  // Transform the initializer value once.
   ExprResult Init = getDerived().TransformExpr(E->getInit());
   if (Init.isInvalid())
     return ExprError();
 
-  // transform the designators.
+  // Transform the designators.
   SmallVector<Expr*, 4> ArrayExprs;
   bool ExprChanged = false;
   for (const DesignatedInitExpr::Designator &D : E->designators()) {
@@ -13649,7 +13649,7 @@ 
TreeTransform<Derived>::TransformDesignatedInitExpr(DesignatedInitExpr *E) {
             getDerived().TransformDecl(D.getFieldLoc(), D.getFieldDecl()));
         if (Field != D.getFieldDecl())
           // Rebuild the expression when the transformed FieldDecl is
-          // different to the already assigned FieldDecl.
+          // different from the already assigned FieldDecl.
           ExprChanged = true;
         if (Field->isAnonymousStructOrUnion())
           continue;
@@ -13665,21 +13665,22 @@ 
TreeTransform<Derived>::TransformDesignatedInitExpr(DesignatedInitExpr *E) {
     }
 
     if (D.isArrayDesignator()) {
-      ExprResult Index = getDerived().TransformExpr(E->getArrayIndex(D));
-      if (Index.isInvalid())
+      // Transform the array index expression.
+      ExprResult NewIndex = getDerived().TransformExpr(E->getArrayIndex(D));
+      if (NewIndex.isInvalid())
         return ExprError();
 
-      Desig.AddDesignator(
-          Designator::CreateArrayDesignator(Index.get(), D.getLBracketLoc()));
+      Desig.AddDesignator(Designator::CreateArrayDesignator(
+          NewIndex.get(), D.getLBracketLoc()));
 
-      ExprChanged = ExprChanged || Init.get() != E->getArrayIndex(D);
-      ArrayExprs.push_back(Index.get());
+      // Check if the transformed index is different from the original.
+      ExprChanged = ExprChanged || NewIndex.get() != E->getArrayIndex(D);
+      ArrayExprs.push_back(NewIndex.get());
       continue;
     }
 
     assert(D.isArrayRangeDesignator() && "New kind of designator?");
-    ExprResult Start
-      = getDerived().TransformExpr(E->getArrayRangeStart(D));
+    ExprResult Start = getDerived().TransformExpr(E->getArrayRangeStart(D));
     if (Start.isInvalid())
       return ExprError();
 
@@ -13697,6 +13698,7 @@ 
TreeTransform<Derived>::TransformDesignatedInitExpr(DesignatedInitExpr *E) {
     ArrayExprs.push_back(End.get());
   }
 
+  // Compare the transformed initializer against the original.
   if (!getDerived().AlwaysRebuild() &&
       Init.get() == E->getInit() &&
       !ExprChanged)

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to