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() { }
+ };
}