aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2011-04-12 00:42:48 +0000
committerJohn McCall <rjmccall@apple.com>2011-04-12 00:42:48 +0000
commit2979fe01da2c6bfc116192c865ae89da713e9f63 (patch)
treedd30f95158a9fce830cb0b01973e342fa2b55b14 /clang/lib/CodeGen/CodeGenModule.cpp
parent11168326f8efe9a7af670045ca5d278b3a284121 (diff)
downloadllvm-2979fe01da2c6bfc116192c865ae89da713e9f63.zip
llvm-2979fe01da2c6bfc116192c865ae89da713e9f63.tar.gz
llvm-2979fe01da2c6bfc116192c865ae89da713e9f63.tar.bz2
After some discussion with Doug, we decided that it made a lot more sense
for __unknown_anytype resolution to destructively modify the AST. So that's what it does now, which significantly simplifies some of the implementation. Normal member calls work pretty cleanly now, and I added support for propagating unknown-ness through &. llvm-svn: 129331
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp48
1 files changed, 0 insertions, 48 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 8f304ff..944b24cb 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1072,54 +1072,6 @@ llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
return GetOrCreateLLVMGlobal(MangledName, PTy, D);
}
-/// getAddrOfUnknownAnyDecl - Return an llvm::Constant for the address
-/// of a global which was declared with unknown type. It is possible
-/// for a VarDecl to end up getting resolved to have function type,
-/// which complicates this substantially; on the other hand, these are
-/// always external references, which does simplify the logic a lot.
-llvm::Constant *
-CodeGenModule::getAddrOfUnknownAnyDecl(const NamedDecl *decl, QualType type) {
- GlobalDecl global;
-
- // FunctionDecls will always end up with function types, but
- // VarDecls can end up with them too.
- if (isa<FunctionDecl>(decl))
- global = GlobalDecl(cast<FunctionDecl>(decl));
- else
- global = GlobalDecl(cast<VarDecl>(decl));
- llvm::StringRef mangledName = getMangledName(global);
-
- const llvm::Type *ty = getTypes().ConvertTypeForMem(type);
- const llvm::PointerType *pty =
- llvm::PointerType::get(ty, getContext().getTargetAddressSpace(type));
-
-
- // Check for an existing global value with this name.
- llvm::GlobalValue *entry = GetGlobalValue(mangledName);
- if (entry)
- return llvm::ConstantExpr::getBitCast(entry, pty);
-
- // If we're creating something with function type, go ahead and
- // create a function.
- if (const llvm::FunctionType *fnty = dyn_cast<llvm::FunctionType>(ty)) {
- llvm::Function *fn = llvm::Function::Create(fnty,
- llvm::Function::ExternalLinkage,
- mangledName, &getModule());
- return fn;
-
- // Otherwise, make a global variable.
- } else {
- llvm::GlobalVariable *var
- = new llvm::GlobalVariable(getModule(), ty, false,
- llvm::GlobalValue::ExternalLinkage,
- 0, mangledName, 0,
- false, pty->getAddressSpace());
- if (isa<VarDecl>(decl) && cast<VarDecl>(decl)->isThreadSpecified())
- var->setThreadLocal(true);
- return var;
- }
-}
-
/// CreateRuntimeVariable - Create a new runtime global variable with the
/// specified type and name.
llvm::Constant *