diff options
author | Chris Lattner <sabre@nondot.org> | 2007-12-18 08:16:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-12-18 08:16:44 +0000 |
commit | 2b9d2ca4ce53fffbe8a77c7db2fe4df5ccfb9fd4 (patch) | |
tree | cc70151907cd9fad63b5f8402a29f56629bf6252 /CodeGen/CodeGenModule.cpp | |
parent | 9bfa73c5ab7bf4b0e749d04f29da6884e8d5bd9f (diff) |
local static vars are globals also. This fixes a testcase
reported by Seo.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45156 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenModule.cpp')
-rw-r--r-- | CodeGen/CodeGenModule.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp index a09932e141..d6412a745e 100644 --- a/CodeGen/CodeGenModule.cpp +++ b/CodeGen/CodeGenModule.cpp @@ -113,8 +113,10 @@ llvm::Constant *CodeGenModule::GetAddrOfFunctionDecl(const FunctionDecl *D, return Entry = NewFn; } -llvm::Constant *CodeGenModule::GetAddrOfFileVarDecl(const FileVarDecl *D, - bool isDefinition) { +llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D, + bool isDefinition) { + assert(D->hasGlobalStorage() && "Not a global variable"); + // See if it is already in the map. llvm::Constant *&Entry = GlobalDeclMap[D]; if (Entry) return Entry; @@ -433,8 +435,8 @@ static llvm::Constant *GenerateConstantExpr(const Expr *Expression, // The only thing that can have array type like this is a // DeclRefExpr(FileVarDecl)? const DeclRefExpr *DRE = cast<DeclRefExpr>(ICExpr->getSubExpr()); - const FileVarDecl *FVD = cast<FileVarDecl>(DRE->getDecl()); - llvm::Constant *C = CGM.GetAddrOfFileVarDecl(FVD, false); + const VarDecl *VD = cast<VarDecl>(DRE->getDecl()); + llvm::Constant *C = CGM.GetAddrOfGlobalVar(VD, false); assert(isa<llvm::PointerType>(C->getType()) && isa<llvm::ArrayType>(cast<llvm::PointerType>(C->getType()) ->getElementType())); @@ -486,7 +488,7 @@ void CodeGenModule::EmitGlobalVar(const FileVarDecl *D) { // Get the global, forcing it to be a direct reference. llvm::GlobalVariable *GV = - cast<llvm::GlobalVariable>(GetAddrOfFileVarDecl(D, true)); + cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, true)); // Convert the initializer, or use zero if appropriate. llvm::Constant *Init = 0; |