]> granicus.if.org Git - clang/commitdiff
Revert r92318. Instead fix the analyzer: do not call
authorZhongxing Xu <xuzhongxing@gmail.com>
Tue, 5 Jan 2010 09:27:03 +0000 (09:27 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Tue, 5 Jan 2010 09:27:03 +0000 (09:27 +0000)
ASTContext::hasSameUnqualifiedType() when one of the type is VariableArrayType.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92723 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
lib/Analysis/SValuator.cpp

index ad10aa38edb2e2d4aad618c9a4f813d18ec63717..fe9628060917a91a978d8c03b103e99cc3f5fa2f 100644 (file)
@@ -2383,7 +2383,6 @@ QualType ASTContext::getUnqualifiedArrayType(QualType T,
   assert(!T.hasQualifiers() && "canonical array type has qualifiers!");
   const ArrayType *AT = cast<ArrayType>(T);
   QualType Elt = AT->getElementType();
-  assert(Elt.isCanonical());
   QualType UnqualElt = getUnqualifiedArrayType(Elt, Quals);
   if (Elt == UnqualElt)
     return T;
@@ -2397,12 +2396,6 @@ QualType ASTContext::getUnqualifiedArrayType(QualType T,
     return getIncompleteArrayType(UnqualElt, IAT->getSizeModifier(), 0);
   }
 
-  if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(T)) {
-    return getVariableArrayType(UnqualElt, VAT->getSizeExpr()->Retain(),
-                                VAT->getSizeModifier(), 0,
-                                SourceRange());
-  }
-
   const DependentSizedArrayType *DSAT = cast<DependentSizedArrayType>(T);
   return getDependentSizedArrayType(UnqualElt, DSAT->getSizeExpr()->Retain(),
                                     DSAT->getSizeModifier(), 0,
index 49bc0c4c59885f218974b1017cee0c993c395f58..0e56026bb4c873ef8e050a71a9b353205a619fa7 100644 (file)
@@ -62,8 +62,9 @@ SValuator::CastResult SValuator::EvalCast(SVal val, const GRState *state,
   ASTContext &C = ValMgr.getContext();
 
   // For const casts, just propagate the value.
-  if (C.hasSameUnqualifiedType(castTy, originalTy))
-    return CastResult(state, val);
+  if (!castTy->isVariableArrayType() && !originalTy->isVariableArrayType())
+    if (C.hasSameUnqualifiedType(castTy, originalTy))
+      return CastResult(state, val);
 
   // Check for casts from pointers to integers.
   if (castTy->isIntegerType() && Loc::IsLocType(originalTy))