[PATCH] D28297: [StaticAnalyzer] Fix crash in CastToStructChecker

Daniel Marjamäki via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 7 11:32:53 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL297187: [analyzer] Fix crashes in CastToStruct checker for undefined structs (authored by danielmarjamaki).

Changed prior to commit:
  https://reviews.llvm.org/D28297?vs=89507&id=90900#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28297

Files:
  cfe/trunk/lib/StaticAnalyzer/Checkers/CastToStructChecker.cpp
  cfe/trunk/test/Analysis/cast-to-struct.cpp


Index: cfe/trunk/test/Analysis/cast-to-struct.cpp
===================================================================
--- cfe/trunk/test/Analysis/cast-to-struct.cpp
+++ cfe/trunk/test/Analysis/cast-to-struct.cpp
@@ -65,3 +65,17 @@
   void *VP = P;
   Abc = (struct ABC *)VP;
 }
+
+// https://llvm.org/bugs/show_bug.cgi?id=31173
+void dontCrash1(struct AB X) {
+  struct UndefS *S = (struct UndefS *)&X;
+}
+
+struct S;
+struct T {
+  struct S *P;
+};
+extern struct S Var1, Var2;
+void dontCrash2() {
+  ((struct T *) &Var1)->P = &Var2;
+}
Index: cfe/trunk/lib/StaticAnalyzer/Checkers/CastToStructChecker.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CastToStructChecker.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CastToStructChecker.cpp
@@ -84,6 +84,10 @@
     if (!VD || VD->getType()->isReferenceType())
       return true;
 
+    if (ToPointeeTy->isIncompleteType() ||
+        OrigPointeeTy->isIncompleteType())
+      return true;
+
     // Warn when there is widening cast.
     unsigned ToWidth = Ctx.getTypeInfo(ToPointeeTy).Width;
     unsigned OrigWidth = Ctx.getTypeInfo(OrigPointeeTy).Width;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28297.90900.patch
Type: text/x-patch
Size: 1176 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170307/497cc52a/attachment.bin>


More information about the cfe-commits mailing list