[clang] [Sema] Diagnose use of if/else-if condition variable inside else-if/else branch(s) (PR #156436)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 6 06:39:07 PDT 2025


================
@@ -2371,6 +2371,24 @@ NonOdrUseReason Sema::getNonOdrUseReasonInCurrentContext(ValueDecl *D) {
   return NOUR_None;
 }
 
+bool Sema::isConditionVarReference(const DeclRefExpr *DRE) {
+  if (!DRE)
+    return false;
+
+  const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl());
+
+  if (!VD)
+    return false;
+
+  for (Scope *S = getCurScope(); S; S = S->getParent()) {
+    if (VarDecl *CV = S->getConditionVar())
+      if (VD == CV)
----------------
erichkeane wrote:

hmm... those shouldn't be the same entity, but I see the ASTContext function is doing a lot of assuming for the purposes of deserialization, so that is probably why.  It just doesn't do what I think it should be doing.

I think we actually want  `Sema::DeclaresSameEntity` which'll handle it correctly.

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


More information about the cfe-commits mailing list