]> granicus.if.org Git - clang/commitdiff
StmtProfiler: Add a null check for child statements.
authorPeter Collingbourne <peter@pcc.me.uk>
Thu, 1 Mar 2012 16:34:31 +0000 (16:34 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Thu, 1 Mar 2012 16:34:31 +0000 (16:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151812 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/StmtProfile.cpp
test/SemaCXX/warn-memset-bad-sizeof.cpp

index 643bca817c43ceea3c5e15e6559822b29d6bf073..d996925906283ca071d2bf4c3db1ccc0c98ba1c9 100644 (file)
@@ -69,8 +69,12 @@ namespace {
 
 void StmtProfiler::VisitStmt(const Stmt *S) {
   ID.AddInteger(S->getStmtClass());
-  for (Stmt::const_child_range C = S->children(); C; ++C)
-    Visit(*C);
+  for (Stmt::const_child_range C = S->children(); C; ++C) {
+    if (*C)
+      Visit(*C);
+    else
+      ID.AddInteger(0);
+  }
 }
 
 void StmtProfiler::VisitDeclStmt(const DeclStmt *S) {
index 388e36276850111988b6c1213fd1a41160a49fbf..e0d28da3d5895f85446650455d1708140fcae88e 100644 (file)
@@ -104,6 +104,14 @@ void f(Mat m, const Foo& const_foo, char *buffer) {
   // Copy to raw buffer shouldn't warn either
   memcpy(&foo, &arr, sizeof(Foo));
   memcpy(&arr, &foo, sizeof(Foo));
+
+  // Shouldn't warn, and shouldn't crash either.
+  memset(({
+    if (0) {}
+    while (0) {}
+    for (;;) {}
+    &s;
+  }), 0, sizeof(s));
 }
 
 namespace ns {