summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2013-01-31 03:23:57 +0000
committerNick Lewycky <nicholas@mxc.ca>2013-01-31 03:23:57 +0000
commitf0f5616457e34d9183db2bd74341a2d1641d3054 (patch)
treea4ec1dac6c32eb7728a725b6d1d687c8474fecce /clang/lib/Sema/SemaDecl.cpp
parent60bd4be17a08dae3f742b71a9e622408d4fecc1d (diff)
downloadbcm5719-llvm-f0f5616457e34d9183db2bd74341a2d1641d3054.tar.gz
bcm5719-llvm-f0f5616457e34d9183db2bd74341a2d1641d3054.zip
Remove elements from Sema.UndefinedInternals as functions are defined. Also
filter the elements before emitting them into a PCH. No user-visible functionality change, except that PCH files may be smaller? llvm-svn: 174034
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 80543fd532b..834041c65c0 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -8428,6 +8428,13 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
if (FD) {
FD->setBody(Body);
+ // The only way to be included in UndefinedInternals is if there is an
+ // ODR-use before the definition. Avoid the expensive map lookup if this
+ // is the first declaration.
+ if (FD->getPreviousDecl() != 0 && FD->getPreviousDecl()->isUsed() &&
+ FD->getLinkage() != ExternalLinkage)
+ UndefinedInternals.erase(FD);
+
// If the function implicitly returns zero (like 'main') or is naked,
// don't complain about missing return statements.
if (FD->hasImplicitReturnZero() || FD->hasAttr<NakedAttr>())
OpenPOWER on IntegriCloud