[cfe-commits] r71583 - /cfe/trunk/lib/CodeGen/CodeGenModule.cpp
Chris Lattner
sabre at nondot.org
Tue May 12 13:21:41 PDT 2009
Author: lattner
Date: Tue May 12 15:21:39 2009
New Revision: 71583
URL: http://llvm.org/viewvc/llvm-project?rev=71583&view=rev
Log:
static methods don't get this pointers.
Modified:
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=71583&r1=71582&r2=71583&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue May 12 15:21:39 2009
@@ -245,7 +245,7 @@
if (FD->getStorageClass() == FunctionDecl::Static)
return CodeGenModule::GVA_Internal;
- if (!FD->isInline())
+ if (!FD->isInline() && !isa<CXXMethodDecl>(FD))
return CodeGenModule::GVA_StrongExternal;
// If the inline function explicitly has the GNU inline attribute on it, or if
@@ -600,12 +600,20 @@
// deferred decl with this name, remember that we need to emit it at the end
// of the file.
llvm::DenseMap<const char*, GlobalDecl>::iterator DDI =
- DeferredDecls.find(MangledName);
+ DeferredDecls.find(MangledName);
if (DDI != DeferredDecls.end()) {
// Move the potentially referenced deferred decl to the DeferredDeclsToEmit
// list, and remove it from DeferredDecls (since we don't need it anymore).
DeferredDeclsToEmit.push_back(DDI->second);
DeferredDecls.erase(DDI);
+ } else
+ if (MayDeferGeneration(D)) {
+ // If this the first reference to a C++ inline function in a class, queue up
+ // the deferred function body for emission. These are not seen as
+ // top-level declarations.
+ if (!isa<CXXConstructorDecl>(D) &&
+ !isa<CXXDestructorDecl>(D))
+ DeferredDeclsToEmit.push_back(GlobalDecl(D));
}
// This function doesn't have a complete type (for example, the return
More information about the cfe-commits
mailing list