diff options
author | Richard Smith <richard@metafoo.co.uk> | 2020-01-31 17:05:27 -0800 |
---|---|---|
committer | Richard Smith <richard@metafoo.co.uk> | 2020-01-31 17:07:04 -0800 |
commit | f85d63a558364dcf57efe7b37b3e99b7fd91fd5c (patch) | |
tree | c18ce926d17af5253eeea4d95e1f2bde1adf277e /clang/lib/AST/CXXInheritance.cpp | |
parent | fdedf39c46f526afb1c07b0ca91a7c5bc1e43b8f (diff) | |
download | bcm5719-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.cpp | 2 |
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()); |