<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Thanks Zhongxing.<div><br><div><div>On Dec 22, 2010, at 7:53 PM, Xu Zhongxing wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">This is surely not complete. But I prefer a test case before inserting the code.<br><br><div class="gmail_quote">On Wed, Dec 22, 2010 at 8:50 PM, Jim Goodnow II <span dir="ltr"><<a href="mailto:jim@thegoodnows.net">jim@thegoodnows.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I was looking at the same situation, but you beat me to it. There is an addition that does need to be made:<br>
<br>
  if (!isa<loc::MemRegionVal>(derived))<br>
    return derived;<br>
<br>
needs to be inserted before the cast<> for UnknownVals and UndefinedVals to prevent an Assert in the cast<> call.<br>
<br>
 - jim<div><div></div><div class="h5"><br>
<br>
At 12:12 AM 12/22/2010, Zhongxing Xu wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
Author: zhongxingxu<br>
Date: Wed Dec 22 02:12:57 2010<br>
New Revision: 122393<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=122393&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=122393&view=rev</a><br>
Log:<br>
The base type is not always pointer type. We may cast to a base reference.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Checker/RegionStore.cpp<br>
<br>
Modified: cfe/trunk/lib/Checker/RegionStore.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Checker/RegionStore.cpp?rev=122393&r1=122392&r2=122393&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Checker/RegionStore.cpp?rev=122393&r1=122392&r2=122393&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Checker/RegionStore.cpp (original)<br>
+++ cfe/trunk/lib/Checker/RegionStore.cpp Wed Dec 22 02:12:57 2010<br>
@@ -807,9 +807,15 @@<br>
   return loc::MemRegionVal(MRMgr.getElementRegion(T, ZeroIdx, ArrayR, Ctx));<br>
 }<br>
<br>
-SVal RegionStoreManager::evalDerivedToBase(SVal derived, QualType basePtrType) {<br>
-  const CXXRecordDecl *baseDecl = basePtrType->getCXXRecordDeclForPointerType();<br>
+SVal RegionStoreManager::evalDerivedToBase(SVal derived, QualType baseType) {<br>
+  const CXXRecordDecl *baseDecl;<br>
+  if (baseType->isPointerType())<br>
+    baseDecl = baseType->getCXXRecordDeclForPointerType();<br>
+  else<br>
+    baseDecl = baseType->getAsCXXRecordDecl();<br>
+<br>
   assert(baseDecl && "not a CXXRecordDecl?");<br>
+<br>
   loc::MemRegionVal &derivedRegVal = cast<loc::MemRegionVal>(derived);<br>
   const MemRegion *baseReg =<br>
     MRMgr.getCXXBaseObjectRegion(baseDecl, derivedRegVal.getRegion());<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br>
<br></div></div>
Internal Virus Database is out of date.<br>
Checked by AVG - <a href="http://www.avg.com/" target="_blank">www.avg.com</a><br>
Version: 9.0.869 / Virus Database: 271.1.1/3260 - Release Date: 11/15/10 23:34:00<br>
</blockquote>
<br>
</blockquote></div><br>
_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits<br></blockquote></div><br></div></body></html>