diff options
author | John McCall <rjmccall@apple.com> | 2011-04-12 00:42:48 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-04-12 00:42:48 +0000 |
commit | 2979fe01da2c6bfc116192c865ae89da713e9f63 (patch) | |
tree | dd30f95158a9fce830cb0b01973e342fa2b55b14 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 11168326f8efe9a7af670045ca5d278b3a284121 (diff) | |
download | llvm-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.cpp | 48 |
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 * |