[PATCH] [Patch] Fix for crash in nsdmi-defer6.C (PR15721)

Karthik Bhat kv.bhat at samsung.com
Fri Sep 13 07:38:20 PDT 2013

Hi rsmith, jordan_rose,

Added a patch to fix crash in nsdmi-defer6.C mentioned in PR15721 (http://llvm.org/bugs/show_bug.cgi?id=15721).

The reason for the crash seems to be because we are not handling case were initialization expression can be null in VisitCXXDefaultInitExpr.

Not handling this case results in a crash when we try to dynamic_cast a null pointer in Visit function.

Added code to handle case were initialization expression is null.

To reproduce the crash we can compile nsdmi-defer6.C (gcc cpp0x testsuite) with -std=c++11 option.

Please let me know your inputs on the same.



Index: lib/AST/ExprConstant.cpp
--- lib/AST/ExprConstant.cpp
+++ lib/AST/ExprConstant.cpp
@@ -3742,8 +3742,13 @@
     { return StmtVisitorTy::Visit(E->getReplacement()); }
   RetTy VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *E)
     { return StmtVisitorTy::Visit(E->getExpr()); }
-  RetTy VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *E)
-    { return StmtVisitorTy::Visit(E->getExpr()); }
+  RetTy VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *E) {
+    // In case in-class initializer is not parsed and attached yet
+    // E->getExpr() will be null. Handle the same.
+    if (!E->getExpr())
+      return false;
+    return StmtVisitorTy::Visit(E->getExpr());
+  }
   // We cannot create any objects for which cleanups are required, so there is
   // nothing to do here; all cleanups must come from unevaluated subexpressions.
   RetTy VisitExprWithCleanups(const ExprWithCleanups *E)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1678.1.patch
Type: text/x-patch
Size: 968 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130913/4fd064a3/attachment.bin>

More information about the cfe-commits mailing list