[clang] [Clang] Correct the DeclRefExpr's Type after the initializer gets instantiated (PR #133212)

via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 27 01:47:42 PDT 2025


================
@@ -19849,11 +19849,14 @@ static void DoMarkVarDeclReferenced(
           SemaRef.InstantiateVariableDefinition(PointOfInstantiation, Var);
         });
 
-        // Re-set the member to trigger a recomputation of the dependence bits
-        // for the expression.
-        if (auto *DRE = dyn_cast_or_null<DeclRefExpr>(E))
+        if (auto *DRE = dyn_cast_or_null<DeclRefExpr>(E)) {
+          // Re-set the member to trigger a recomputation of the dependence bits
+          // for the expression.
           DRE->setDecl(DRE->getDecl());
-        else if (auto *ME = dyn_cast_or_null<MemberExpr>(E))
+          if (SemaRef.Context.getAsIncompleteArrayType(DRE->getType()) &&
+              !SemaRef.Context.getAsIncompleteArrayType(Var->getType()))
+            DRE->setType(Var->getType());
+        } else if (auto *ME = dyn_cast_or_null<MemberExpr>(E))
----------------
cor3ntin wrote:

So, I was looking at where `InstantiateVariableDefinition` is used.
And I found out we have a `completeExprArrayBound` function - I suspect we might want to use that. Can you look into it?

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


More information about the cfe-commits mailing list