]> granicus.if.org Git - clang/commitdiff
Teach CFGImplicitDtor::getDestructorDecl() about reference types.
authorTed Kremenek <kremenek@apple.com>
Thu, 3 Mar 2011 01:01:03 +0000 (01:01 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 3 Mar 2011 01:01:03 +0000 (01:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126909 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFG.cpp
test/SemaCXX/return-noreturn.cpp

index c433639ec1a7236885a2665694d3a0877c5a3347..fc50071a32c303ef34d3b2b8952fba364a9be4e1 100644 (file)
@@ -2782,9 +2782,10 @@ const CXXDestructorDecl *CFGImplicitDtor::getDestructorDecl() const {
     case CFGElement::AutomaticObjectDtor: {
       const VarDecl *var = cast<CFGAutomaticObjDtor>(this)->getVarDecl();
       QualType ty = var->getType();
+      ty = ty.getNonReferenceType();
       const RecordType *recordType = ty->getAs<RecordType>();
       const CXXRecordDecl *classDecl =
-        cast<CXXRecordDecl>(recordType->getDecl());
+      cast<CXXRecordDecl>(recordType->getDecl());
       return classDecl->getDestructor();      
     }
     case CFGElement::TemporaryDtor: {
@@ -2799,7 +2800,7 @@ const CXXDestructorDecl *CFGImplicitDtor::getDestructorDecl() const {
       // Not yet supported.
       return 0;
   }
-  assert(0 && "getKind() returned bogus value");
+  llvm_unreachable("getKind() returned bogus value");
   return 0;
 }
 
index 890fb9017ca662ffa72230b44f85efcb6eeea555..4fb3732201c7519ff218852cd40ef30c9b01b1f2 100644 (file)
@@ -27,3 +27,15 @@ int pr6884_h(int x) {
     }
   }
 }
+
+// PR9380
+struct PR9380 {
+  ~PR9380();
+};
+struct PR9380_B : public PR9380 {
+  PR9380_B( const PR9380& str );
+};
+void test_PR9380(const PR9380& aKey) {
+  const PR9380& flatKey = PR9380_B(aKey);
+}
+