aboutsummaryrefslogtreecommitdiff
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:06:48 -0800
commitaade5fbbfef3e8555df202082bea905deebc2ca5 (patch)
tree09129207ef4be5179bc2d4502088b4fbe5fdb781 /clang/lib/AST/CXXInheritance.cpp
parentb074acb82f7e75a189fa7933b09627241b166121 (diff)
downloadllvm-aade5fbbfef3e8555df202082bea905deebc2ca5.zip
llvm-aade5fbbfef3e8555df202082bea905deebc2ca5.tar.gz
llvm-aade5fbbfef3e8555df202082bea905deebc2ca5.tar.bz2
Fix wrong devirtualization when the final overrider in one base class
overrides the final overrider in a different base class.
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 a3a3794..0377bd32 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());