[Sema] Mark a virtual CXXMethodDecl as used if a call to it can be
devirtualized. The code to detect devirtualized calls is already in IRGen, so move the code to lib/AST and make it a shared utility between Sema and IRGen. This commit fixes a linkage error I was seeing when compiling the following code: $ cat test1.cpp struct Base { virtual void operator()() {} }; template<class T> struct Derived final : Base { void operator()() override {} }; Derived<int> *d; int main() { if (d) (*d)(); return 0; } rdar://problem/33195657 Differential Revision: https://reviews.llvm.org/D34301 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@307883 91177308-0d34-0410-b5e6-96231b3b80d8
Showing
- include/clang/AST/DeclCXX.h 13 additions, 0 deletionsinclude/clang/AST/DeclCXX.h
- include/clang/Sema/Sema.h 1 addition, 1 deletioninclude/clang/Sema/Sema.h
- lib/AST/DeclCXX.cpp 78 additions, 0 deletionslib/AST/DeclCXX.cpp
- lib/CodeGen/CGClass.cpp 0 additions, 82 deletionslib/CodeGen/CGClass.cpp
- lib/CodeGen/CGExprCXX.cpp 2 additions, 1 deletionlib/CodeGen/CGExprCXX.cpp
- lib/CodeGen/CodeGenFunction.h 0 additions, 5 deletionslib/CodeGen/CodeGenFunction.h
- lib/Sema/SemaExpr.cpp 11 additions, 11 deletionslib/Sema/SemaExpr.cpp
- lib/Sema/SemaOverload.cpp 13 additions, 9 deletionslib/Sema/SemaOverload.cpp
- test/CodeGen/no-devirt.cpp 2 additions, 2 deletionstest/CodeGen/no-devirt.cpp
- test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp 50 additions, 0 deletions.../CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
- test/CodeGenCXX/vtable-available-externally.cpp 2 additions, 3 deletionstest/CodeGenCXX/vtable-available-externally.cpp
Loading
Please register or sign in to comment