summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/CXXInheritance.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard@metafoo.co.uk>2020-01-31 17:05:27 -0800
committerRichard Smith <richard@metafoo.co.uk>2020-01-31 17:07:04 -0800
commitf85d63a558364dcf57efe7b37b3e99b7fd91fd5c (patch)
treec18ce926d17af5253eeea4d95e1f2bde1adf277e /clang/lib/AST/CXXInheritance.cpp
parentfdedf39c46f526afb1c07b0ca91a7c5bc1e43b8f (diff)
downloadbcm5719-llvm-f85d63a558364dcf57efe7b37b3e99b7fd91fd5c.tar.gz
bcm5719-llvm-f85d63a558364dcf57efe7b37b3e99b7fd91fd5c.zip
Fix wrong devirtualization when the final overrider in one base class
overrides the final overrider in a different base class. (cherry picked from commit aade5fbbfef3e8555df202082bea905deebc2ca5)
Diffstat (limited to 'clang/lib/AST/CXXInheritance.cpp')
-rw-r--r--clang/lib/AST/CXXInheritance.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/AST/CXXInheritance.cpp b/clang/lib/AST/CXXInheritance.cpp
index a3a3794b2ed..0377bd324cb 100644
--- a/clang/lib/AST/CXXInheritance.cpp
+++ b/clang/lib/AST/CXXInheritance.cpp
@@ -758,6 +758,8 @@ CXXRecordDecl::getFinalOverriders(CXXFinalOverriderMap &FinalOverriders) const {
return false;
};
+ // FIXME: IsHidden reads from Overriding from the middle of a remove_if
+ // over the same sequence! Is this guaranteed to work?
Overriding.erase(
std::remove_if(Overriding.begin(), Overriding.end(), IsHidden),
Overriding.end());
OpenPOWER on IntegriCloud