From a7be2f4c745120d6ee5adfd19ef259919bdc3f7f Mon Sep 17 00:00:00 2001 From: Matt Beaumont-Gay Date: Mon, 9 Sep 2013 21:07:58 +0000 Subject: [PATCH] Fix a crash introduced in r189828. The predicates in CXXRecordDecl which test various properties of special members can't be called on incomplete decls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190353 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/CFG.cpp | 2 +- test/Analysis/dtor.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Analysis/CFG.cpp b/lib/Analysis/CFG.cpp index 191c324b3c..c7fe9f3a88 100644 --- a/lib/Analysis/CFG.cpp +++ b/lib/Analysis/CFG.cpp @@ -3133,7 +3133,7 @@ CFGBlock *CFGBuilder::VisitCXXDeleteExpr(CXXDeleteExpr *DE, DTy = DTy.getNonReferenceType(); CXXRecordDecl *RD = Context->getBaseElementType(DTy)->getAsCXXRecordDecl(); if (RD) { - if (!RD->hasTrivialDestructor()) + if (RD->isCompleteDefinition() && !RD->hasTrivialDestructor()) appendDeleteDtor(Block, RD, DE); } diff --git a/test/Analysis/dtor.cpp b/test/Analysis/dtor.cpp index 436da2ed9f..11ce0d57ef 100644 --- a/test/Analysis/dtor.cpp +++ b/test/Analysis/dtor.cpp @@ -431,3 +431,8 @@ namespace PseudoDtor { clang_analyzer_eval(true); // expected-warning{{TRUE}} } } + +namespace Incomplete { + class Foo; // expected-note{{forward declaration}} + void f(Foo *foo) { delete foo; } // expected-warning{{deleting pointer to incomplete type}} +} -- 2.40.0