]> granicus.if.org Git - clang/commit
Implement computation of the final overriders for each virtual
authorDouglas Gregor <dgregor@apple.com>
Tue, 23 Mar 2010 23:47:56 +0000 (23:47 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 23 Mar 2010 23:47:56 +0000 (23:47 +0000)
commit7b2fc9d3c97f2526528a8b686af1589054025ca0
tree6e0e299b0b07e827b71869ae29c233ebb1c458ff
parenta2a87c975aee2bd2df56334cb8efed275a886b87
Implement computation of the final overriders for each virtual
function within a class hierarchy (C++ [class.virtual]p2).

We use the final-overrider computation to determine when a particular
class is ill-formed because it has multiple final overriders for a
given virtual function (e.g., because two virtual functions override
the same virtual function in the same virtual base class). Fixes
PR5973.

We also use the final-overrider computation to determine which virtual
member functions are pure when determining whether a class is
abstract or diagnosing the improper use of an abstract class. The
prior approach to determining whether there were any pure virtual
functions in a class didn't cope with virtual base class subobjects
properly, and could not easily be fixed to deal with the oddities of
subobject hiding. Fixes PR6631.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99351 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/CXXInheritance.h
include/clang/AST/DeclCXX.h
include/clang/Basic/DiagnosticSemaKinds.td
lib/AST/CXXInheritance.cpp
lib/Sema/SemaDeclCXX.cpp
test/CXX/class.derived/class.abstract/p4.cpp [new file with mode: 0644]
test/CXX/class.derived/class.abstract/p5.cpp [new file with mode: 0644]
test/CXX/class.derived/class.virtual/p2.cpp [new file with mode: 0644]