summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-02 17:15:43 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-02 17:15:43 +0000
commitf98849eb8aa991668e5c47eeb7b2899772af3810 (patch)
tree11966ec08d59ff029272b1a82e0237c433a1589d /clang/lib/Sema/SemaDecl.cpp
parentfffbc0c5d92deee5304a4e0b560e15f36f07b944 (diff)
downloadbcm5719-llvm-f98849eb8aa991668e5c47eeb7b2899772af3810.tar.gz
bcm5719-llvm-f98849eb8aa991668e5c47eeb7b2899772af3810.zip
In Sema, whenever we think that a function is going to cause a vtable to be generated, we mark any virtual implicit member functions as referenced.
llvm-svn: 90327
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 76b726fe339..5a7d0060433 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -4085,12 +4085,14 @@ Sema::DeclPtrTy Sema::ActOnFinishFunctionBody(DeclPtrTy D, StmtArg BodyArg,
if (!FD->isInvalidDecl())
DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
- // C++ [basic.def.odr]p2:
- // [...] A virtual member function is used if it is not pure. [...]
- if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD))
+ if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD)) {
+ // C++ [basic.def.odr]p2:
+ // [...] A virtual member function is used if it is not pure. [...]
if (Method->isVirtual() && !Method->isPure())
MarkDeclarationReferenced(Method->getLocation(), Method);
+ MaybeMarkVirtualImplicitMembersReferenced(Method->getLocation(), Method);
+ }
assert(FD == getCurFunctionDecl() && "Function parsing confused");
} else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
assert(MD == getCurMethodDecl() && "Method parsing confused");
OpenPOWER on IntegriCloud