Handle base and member destructors in CheckFallThrough.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123667 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp
index 3ded735..4463d3f 100644
--- a/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/lib/Sema/AnalysisBasedWarnings.cpp
@@ -136,7 +136,16 @@
       HasPlainEdge = true;
       continue;
     }
-
+    if (CFGMemberDtor MD = CE.getAs<CFGMemberDtor>()) {
+      // A member destructor.
+      HasPlainEdge = true;
+      continue;
+    }
+    if (CFGBaseDtor BD = CE.getAs<CFGBaseDtor>()) {
+      // A base destructor.
+      HasPlainEdge = true;
+      continue;
+    }
     CFGStmt CS = CE.getAs<CFGStmt>();
     if (!CS.isValid())
       continue;
diff --git a/test/SemaCXX/warn-missing-noreturn.cpp b/test/SemaCXX/warn-missing-noreturn.cpp
index 251117f..54485fb 100644
--- a/test/SemaCXX/warn-missing-noreturn.cpp
+++ b/test/SemaCXX/warn-missing-noreturn.cpp
@@ -65,5 +65,20 @@
     A(char) : f(j()) { }
     A(bool b) : f(b ? h() : j()) { }
   };
+}
 
+namespace test3 {
+  struct A {
+    ~A();
+  };
+
+  struct B {
+    ~B() { }
+
+    A a;
+  };
+
+  struct C : A { 
+    ~C() { }
+  };
 }