From 2979fe01da2c6bfc116192c865ae89da713e9f63 Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 12 Apr 2011 00:42:48 +0000 Subject: 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 --- clang/lib/CodeGen/CodeGenModule.cpp | 48 ------------------------------------- 1 file changed, 48 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 8f304ff5804..944b24cbd38 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(decl)) - global = GlobalDecl(cast(decl)); - else - global = GlobalDecl(cast(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(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(decl) && cast(decl)->isThreadSpecified()) - var->setThreadLocal(true); - return var; - } -} - /// CreateRuntimeVariable - Create a new runtime global variable with the /// specified type and name. llvm::Constant * -- cgit v1.2.3