1 //===--- CodeGenModule.cpp - Emit LLVM Code from ASTs for a Module --------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This coordinates the per-module state used while generating code. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CGDebugInfo.h" 15 #include "CodeGenModule.h" 16 #include "CodeGenFunction.h" 17 #include "CGCall.h" 18 #include "CGObjCRuntime.h" 19 #include "Mangle.h" 20 #include "clang/AST/ASTContext.h" 21 #include "clang/AST/DeclObjC.h" 22 #include "clang/AST/DeclCXX.h" 23 #include "clang/Basic/Diagnostic.h" 24 #include "clang/Basic/SourceManager.h" 25 #include "clang/Basic/TargetInfo.h" 26 #include "llvm/CallingConv.h" 27 #include "llvm/Module.h" 28 #include "llvm/Intrinsics.h" 29 #include "llvm/Target/TargetData.h" 30 using namespace clang; 31 using namespace CodeGen; 32 33 34 CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO, 35 llvm::Module &M, const llvm::TargetData &TD, 36 Diagnostic &diags, bool GenerateDebugInfo) 37 : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags), 38 Types(C, M, TD), Runtime(0), MemCpyFn(0), MemMoveFn(0), MemSetFn(0), 39 CFConstantStringClassRef(0), NSConcreteGlobalBlock(0), 40 BlockDescriptorType(0), GenericBlockLiteralType(0) { 41 42 if (Features.ObjC1) { 43 if (Features.NeXTRuntime) { 44 Runtime = Features.ObjCNonFragileABI ? CreateMacNonFragileABIObjCRuntime(*this) 45 : CreateMacObjCRuntime(*this); 46 } else { 47 Runtime = CreateGNUObjCRuntime(*this); 48 } 49 } 50 51 // If debug info generation is enabled, create the CGDebugInfo object. 52 DebugInfo = GenerateDebugInfo ? new CGDebugInfo(this) : 0; 53 54 Block.GlobalUniqueCount = 0; 55 } 56 57 CodeGenModule::~CodeGenModule() { 58 delete Runtime; 59 delete DebugInfo; 60 } 61 62 void CodeGenModule::Release() { 63 EmitStatics(); 64 EmitAliases(); 65 if (Runtime) 66 if (llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction()) 67 AddGlobalCtor(ObjCInitFunction); 68 EmitCtorList(GlobalCtors, "llvm.global_ctors"); 69 EmitCtorList(GlobalDtors, "llvm.global_dtors"); 70 EmitAnnotations(); 71 BindRuntimeFunctions(); 72 } 73 74 void CodeGenModule::BindRuntimeFunctions() { 75 // Deal with protecting runtime function names. 76 for (unsigned i = 0, e = RuntimeFunctions.size(); i < e; ++i) { 77 llvm::Function *Fn = RuntimeFunctions[i].first; 78 const std::string &Name = RuntimeFunctions[i].second; 79 80 // Discard unused runtime functions. 81 if (Fn->use_empty()) { 82 Fn->eraseFromParent(); 83 continue; 84 } 85 86 // See if there is a conflict against a function. 87 llvm::Function *Conflict = TheModule.getFunction(Name); 88 if (Conflict) { 89 // Decide which version to take. If the conflict is a definition 90 // we are forced to take that, otherwise assume the runtime 91 // knows best. 92 if (!Conflict->isDeclaration()) { 93 llvm::Value *Casted = 94 llvm::ConstantExpr::getBitCast(Conflict, Fn->getType()); 95 Fn->replaceAllUsesWith(Casted); 96 Fn->eraseFromParent(); 97 } else { 98 Fn->takeName(Conflict); 99 llvm::Value *Casted = 100 llvm::ConstantExpr::getBitCast(Fn, Conflict->getType()); 101 Conflict->replaceAllUsesWith(Casted); 102 Conflict->eraseFromParent(); 103 } 104 } else { 105 // FIXME: There still may be conflicts with aliases and 106 // variables. 107 Fn->setName(Name); 108 } 109 } 110 } 111 112 /// ErrorUnsupported - Print out an error that codegen doesn't support the 113 /// specified stmt yet. 114 void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type, 115 bool OmitOnError) { 116 if (OmitOnError && getDiags().hasErrorOccurred()) 117 return; 118 unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error, 119 "cannot compile this %0 yet"); 120 std::string Msg = Type; 121 getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID) 122 << Msg << S->getSourceRange(); 123 } 124 125 /// ErrorUnsupported - Print out an error that codegen doesn't support the 126 /// specified decl yet. 127 void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type, 128 bool OmitOnError) { 129 if (OmitOnError && getDiags().hasErrorOccurred()) 130 return; 131 unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error, 132 "cannot compile this %0 yet"); 133 std::string Msg = Type; 134 getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg; 135 } 136 137 /// setGlobalVisibility - Set the visibility for the given LLVM 138 /// GlobalValue according to the given clang AST visibility value. 139 static void setGlobalVisibility(llvm::GlobalValue *GV, 140 VisibilityAttr::VisibilityTypes Vis) { 141 switch (Vis) { 142 default: assert(0 && "Unknown visibility!"); 143 case VisibilityAttr::DefaultVisibility: 144 GV->setVisibility(llvm::GlobalValue::DefaultVisibility); 145 break; 146 case VisibilityAttr::HiddenVisibility: 147 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); 148 break; 149 case VisibilityAttr::ProtectedVisibility: 150 GV->setVisibility(llvm::GlobalValue::ProtectedVisibility); 151 break; 152 } 153 } 154 155 /// \brief Retrieves the mangled name for the given declaration. 156 /// 157 /// If the given declaration requires a mangled name, returns an 158 /// IdentifierInfo* containing the mangled name. Otherwise, returns 159 /// the name of the declaration as an identifier. 160 /// 161 /// FIXME: Returning an IdentifierInfo* here is a total hack. We 162 /// really need some kind of string abstraction that either stores a 163 /// mangled name or stores an IdentifierInfo*. This will require 164 /// changes to the GlobalDeclMap, too. 165 /// 166 /// FIXME: Performance here is going to be terribly until we start 167 /// caching mangled names. However, we should fix the problem above 168 /// first. 169 IdentifierInfo *CodeGenModule::getMangledName(const NamedDecl *ND) const { 170 std::string Name; 171 llvm::raw_string_ostream Out(Name); 172 if (!mangleName(ND, Context, Out)) 173 return ND->getIdentifier(); 174 175 return &Context.Idents.get(Out.str()); 176 } 177 178 /// AddGlobalCtor - Add a function to the list that will be called before 179 /// main() runs. 180 void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) { 181 // FIXME: Type coercion of void()* types. 182 GlobalCtors.push_back(std::make_pair(Ctor, Priority)); 183 } 184 185 /// AddGlobalDtor - Add a function to the list that will be called 186 /// when the module is unloaded. 187 void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) { 188 // FIXME: Type coercion of void()* types. 189 GlobalDtors.push_back(std::make_pair(Dtor, Priority)); 190 } 191 192 void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) { 193 // Ctor function type is void()*. 194 llvm::FunctionType* CtorFTy = 195 llvm::FunctionType::get(llvm::Type::VoidTy, 196 std::vector<const llvm::Type*>(), 197 false); 198 llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy); 199 200 // Get the type of a ctor entry, { i32, void ()* }. 201 llvm::StructType* CtorStructTy = 202 llvm::StructType::get(llvm::Type::Int32Ty, 203 llvm::PointerType::getUnqual(CtorFTy), NULL); 204 205 // Construct the constructor and destructor arrays. 206 std::vector<llvm::Constant*> Ctors; 207 for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) { 208 std::vector<llvm::Constant*> S; 209 S.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, I->second, false)); 210 S.push_back(llvm::ConstantExpr::getBitCast(I->first, CtorPFTy)); 211 Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S)); 212 } 213 214 if (!Ctors.empty()) { 215 llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size()); 216 new llvm::GlobalVariable(AT, false, 217 llvm::GlobalValue::AppendingLinkage, 218 llvm::ConstantArray::get(AT, Ctors), 219 GlobalName, 220 &TheModule); 221 } 222 } 223 224 void CodeGenModule::EmitAnnotations() { 225 if (Annotations.empty()) 226 return; 227 228 // Create a new global variable for the ConstantStruct in the Module. 229 llvm::Constant *Array = 230 llvm::ConstantArray::get(llvm::ArrayType::get(Annotations[0]->getType(), 231 Annotations.size()), 232 Annotations); 233 llvm::GlobalValue *gv = 234 new llvm::GlobalVariable(Array->getType(), false, 235 llvm::GlobalValue::AppendingLinkage, Array, 236 "llvm.global.annotations", &TheModule); 237 gv->setSection("llvm.metadata"); 238 } 239 240 static void SetGlobalValueAttributes(const Decl *D, 241 bool IsInternal, 242 bool IsInline, 243 llvm::GlobalValue *GV, 244 bool ForDefinition) { 245 // FIXME: Set up linkage and many other things. Note, this is a simple 246 // approximation of what we really want. 247 if (!ForDefinition) { 248 // Only a few attributes are set on declarations. 249 if (D->getAttr<DLLImportAttr>()) { 250 // The dllimport attribute is overridden by a subsequent declaration as 251 // dllexport. 252 if (!D->getAttr<DLLExportAttr>()) { 253 // dllimport attribute can be applied only to function decls, not to 254 // definitions. 255 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 256 if (!FD->getBody()) 257 GV->setLinkage(llvm::Function::DLLImportLinkage); 258 } else 259 GV->setLinkage(llvm::Function::DLLImportLinkage); 260 } 261 } 262 } else { 263 if (IsInternal) { 264 GV->setLinkage(llvm::Function::InternalLinkage); 265 } else { 266 if (D->getAttr<DLLExportAttr>()) { 267 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 268 // The dllexport attribute is ignored for undefined symbols. 269 if (FD->getBody()) 270 GV->setLinkage(llvm::Function::DLLExportLinkage); 271 } else 272 GV->setLinkage(llvm::Function::DLLExportLinkage); 273 } else if (D->getAttr<WeakAttr>() || IsInline) 274 GV->setLinkage(llvm::Function::WeakLinkage); 275 } 276 } 277 278 // FIXME: Figure out the relative priority of the attribute, 279 // -fvisibility, and private_extern. 280 if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) 281 setGlobalVisibility(GV, attr->getVisibility()); 282 // FIXME: else handle -fvisibility 283 284 if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) { 285 // Prefaced with special LLVM marker to indicate that the name 286 // should not be munged. 287 GV->setName("\01" + ALA->getLabel()); 288 } 289 290 if (const SectionAttr *SA = D->getAttr<SectionAttr>()) 291 GV->setSection(SA->getName()); 292 } 293 294 void CodeGenModule::SetFunctionAttributes(const Decl *D, 295 const CGFunctionInfo &Info, 296 llvm::Function *F) { 297 AttributeListType AttributeList; 298 ConstructAttributeList(Info, D, AttributeList); 299 300 F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(), 301 AttributeList.size())); 302 303 // Set the appropriate calling convention for the Function. 304 if (D->getAttr<FastCallAttr>()) 305 F->setCallingConv(llvm::CallingConv::X86_FastCall); 306 307 if (D->getAttr<StdCallAttr>()) 308 F->setCallingConv(llvm::CallingConv::X86_StdCall); 309 } 310 311 /// SetFunctionAttributesForDefinition - Set function attributes 312 /// specific to a function definition. 313 void CodeGenModule::SetFunctionAttributesForDefinition(const Decl *D, 314 llvm::Function *F) { 315 if (isa<ObjCMethodDecl>(D)) { 316 SetGlobalValueAttributes(D, true, false, F, true); 317 } else { 318 const FunctionDecl *FD = cast<FunctionDecl>(D); 319 SetGlobalValueAttributes(FD, FD->getStorageClass() == FunctionDecl::Static, 320 FD->isInline(), F, true); 321 } 322 323 if (!Features.Exceptions) 324 F->addFnAttr(llvm::Attribute::NoUnwind); 325 326 if (D->getAttr<AlwaysInlineAttr>()) 327 F->addFnAttr(llvm::Attribute::AlwaysInline); 328 } 329 330 void CodeGenModule::SetMethodAttributes(const ObjCMethodDecl *MD, 331 llvm::Function *F) { 332 SetFunctionAttributes(MD, getTypes().getFunctionInfo(MD), F); 333 334 SetFunctionAttributesForDefinition(MD, F); 335 } 336 337 void CodeGenModule::SetFunctionAttributes(const FunctionDecl *FD, 338 llvm::Function *F) { 339 SetFunctionAttributes(FD, getTypes().getFunctionInfo(FD), F); 340 341 SetGlobalValueAttributes(FD, FD->getStorageClass() == FunctionDecl::Static, 342 FD->isInline(), F, false); 343 } 344 345 346 void CodeGenModule::EmitAliases() { 347 for (unsigned i = 0, e = Aliases.size(); i != e; ++i) { 348 const FunctionDecl *D = Aliases[i]; 349 const AliasAttr *AA = D->getAttr<AliasAttr>(); 350 351 // This is something of a hack, if the FunctionDecl got overridden 352 // then its attributes will be moved to the new declaration. In 353 // this case the current decl has no alias attribute, but we will 354 // eventually see it. 355 if (!AA) 356 continue; 357 358 const std::string& aliaseeName = AA->getAliasee(); 359 llvm::Function *aliasee = getModule().getFunction(aliaseeName); 360 if (!aliasee) { 361 // FIXME: This isn't unsupported, this is just an error, which 362 // sema should catch, but... 363 ErrorUnsupported(D, "alias referencing a missing function"); 364 continue; 365 } 366 367 llvm::GlobalValue *GA = 368 new llvm::GlobalAlias(aliasee->getType(), 369 llvm::Function::ExternalLinkage, 370 getMangledName(D)->getName(), aliasee, 371 &getModule()); 372 373 llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)]; 374 if (Entry) { 375 // If we created a dummy function for this then replace it. 376 GA->takeName(Entry); 377 378 llvm::Value *Casted = 379 llvm::ConstantExpr::getBitCast(GA, Entry->getType()); 380 Entry->replaceAllUsesWith(Casted); 381 Entry->eraseFromParent(); 382 383 Entry = GA; 384 } 385 386 // Alias should never be internal or inline. 387 SetGlobalValueAttributes(D, false, false, GA, true); 388 } 389 } 390 391 void CodeGenModule::EmitStatics() { 392 // Emit code for each used static decl encountered. Since a previously unused 393 // static decl may become used during the generation of code for a static 394 // function, iterate until no changes are made. 395 bool Changed; 396 do { 397 Changed = false; 398 399 for (std::list<const ValueDecl*>::iterator i = StaticDecls.begin(), 400 e = StaticDecls.end(); i != e; ) { 401 const ValueDecl *D = *i; 402 403 // Check if we have used a decl with the same name 404 // FIXME: The AST should have some sort of aggregate decls or 405 // global symbol map. 406 // FIXME: This is missing some important cases. For example, we 407 // need to check for uses in an alias and in a constructor. 408 if (!GlobalDeclMap.count(getMangledName(D))) { 409 i++; 410 continue; 411 } 412 413 // Emit the definition. 414 EmitGlobalDefinition(D); 415 416 // Erase the used decl from the list. 417 i = StaticDecls.erase(i); 418 419 // Remember that we made a change. 420 Changed = true; 421 } 422 } while (Changed); 423 } 424 425 /// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the 426 /// annotation information for a given GlobalValue. The annotation struct is 427 /// {i8 *, i8 *, i8 *, i32}. The first field is a constant expression, the 428 /// GlobalValue being annotated. The second field is the constant string 429 /// created from the AnnotateAttr's annotation. The third field is a constant 430 /// string containing the name of the translation unit. The fourth field is 431 /// the line number in the file of the annotated value declaration. 432 /// 433 /// FIXME: this does not unique the annotation string constants, as llvm-gcc 434 /// appears to. 435 /// 436 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV, 437 const AnnotateAttr *AA, 438 unsigned LineNo) { 439 llvm::Module *M = &getModule(); 440 441 // get [N x i8] constants for the annotation string, and the filename string 442 // which are the 2nd and 3rd elements of the global annotation structure. 443 const llvm::Type *SBP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty); 444 llvm::Constant *anno = llvm::ConstantArray::get(AA->getAnnotation(), true); 445 llvm::Constant *unit = llvm::ConstantArray::get(M->getModuleIdentifier(), 446 true); 447 448 // Get the two global values corresponding to the ConstantArrays we just 449 // created to hold the bytes of the strings. 450 llvm::GlobalValue *annoGV = 451 new llvm::GlobalVariable(anno->getType(), false, 452 llvm::GlobalValue::InternalLinkage, anno, 453 GV->getName() + ".str", M); 454 // translation unit name string, emitted into the llvm.metadata section. 455 llvm::GlobalValue *unitGV = 456 new llvm::GlobalVariable(unit->getType(), false, 457 llvm::GlobalValue::InternalLinkage, unit, ".str", M); 458 459 // Create the ConstantStruct that is the global annotion. 460 llvm::Constant *Fields[4] = { 461 llvm::ConstantExpr::getBitCast(GV, SBP), 462 llvm::ConstantExpr::getBitCast(annoGV, SBP), 463 llvm::ConstantExpr::getBitCast(unitGV, SBP), 464 llvm::ConstantInt::get(llvm::Type::Int32Ty, LineNo) 465 }; 466 return llvm::ConstantStruct::get(Fields, 4, false); 467 } 468 469 void CodeGenModule::EmitGlobal(const ValueDecl *Global) { 470 bool isDef, isStatic; 471 472 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) { 473 // Aliases are deferred until code for everything else has been 474 // emitted. 475 if (FD->getAttr<AliasAttr>()) { 476 assert(!FD->isThisDeclarationADefinition() && 477 "Function alias cannot have a definition!"); 478 Aliases.push_back(FD); 479 return; 480 } 481 482 isDef = FD->isThisDeclarationADefinition(); 483 isStatic = FD->getStorageClass() == FunctionDecl::Static; 484 } else if (const VarDecl *VD = cast<VarDecl>(Global)) { 485 assert(VD->isFileVarDecl() && "Cannot emit local var decl as global."); 486 487 isDef = !((VD->getStorageClass() == VarDecl::Extern || 488 VD->getStorageClass() == VarDecl::PrivateExtern) && 489 VD->getInit() == 0); 490 isStatic = VD->getStorageClass() == VarDecl::Static; 491 } else { 492 assert(0 && "Invalid argument to EmitGlobal"); 493 return; 494 } 495 496 // Forward declarations are emitted lazily on first use. 497 if (!isDef) 498 return; 499 500 // If the global is a static, defer code generation until later so 501 // we can easily omit unused statics. 502 if (isStatic && !Features.EmitAllDecls) { 503 StaticDecls.push_back(Global); 504 return; 505 } 506 507 // Otherwise emit the definition. 508 EmitGlobalDefinition(Global); 509 } 510 511 void CodeGenModule::EmitGlobalDefinition(const ValueDecl *D) { 512 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 513 EmitGlobalFunctionDefinition(FD); 514 } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 515 EmitGlobalVarDefinition(VD); 516 } else { 517 assert(0 && "Invalid argument to EmitGlobalDefinition()"); 518 } 519 } 520 521 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D) { 522 assert(D->hasGlobalStorage() && "Not a global variable"); 523 524 QualType ASTTy = D->getType(); 525 const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy); 526 const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace()); 527 528 // Lookup the entry, lazily creating it if necessary. 529 llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)]; 530 if (!Entry) { 531 llvm::GlobalVariable *GV = 532 new llvm::GlobalVariable(Ty, false, 533 llvm::GlobalValue::ExternalLinkage, 534 0, getMangledName(D)->getName(), &getModule(), 535 0, ASTTy.getAddressSpace()); 536 Entry = GV; 537 538 // Handle things which are present even on external declarations. 539 540 // FIXME: This code is overly simple and should be merged with 541 // other global handling. 542 543 GV->setConstant(D->getType().isConstant(Context)); 544 545 if (D->getStorageClass() == VarDecl::PrivateExtern) 546 setGlobalVisibility(GV, VisibilityAttr::HiddenVisibility); 547 } 548 549 // Make sure the result is of the correct type. 550 return llvm::ConstantExpr::getBitCast(Entry, PTy); 551 } 552 553 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { 554 llvm::Constant *Init = 0; 555 QualType ASTTy = D->getType(); 556 const llvm::Type *VarTy = getTypes().ConvertTypeForMem(ASTTy); 557 558 if (D->getInit() == 0) { 559 // This is a tentative definition; tentative definitions are 560 // implicitly initialized with { 0 } 561 const llvm::Type* InitTy; 562 if (ASTTy->isIncompleteArrayType()) { 563 // An incomplete array is normally [ TYPE x 0 ], but we need 564 // to fix it to [ TYPE x 1 ]. 565 const llvm::ArrayType* ATy = cast<llvm::ArrayType>(VarTy); 566 InitTy = llvm::ArrayType::get(ATy->getElementType(), 1); 567 } else { 568 InitTy = VarTy; 569 } 570 Init = llvm::Constant::getNullValue(InitTy); 571 } else { 572 Init = EmitConstantExpr(D->getInit()); 573 } 574 const llvm::Type* InitType = Init->getType(); 575 576 llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)]; 577 llvm::GlobalVariable *GV = cast_or_null<llvm::GlobalVariable>(Entry); 578 579 if (!GV) { 580 GV = new llvm::GlobalVariable(InitType, false, 581 llvm::GlobalValue::ExternalLinkage, 582 0, getMangledName(D)->getName(), 583 &getModule(), 0, ASTTy.getAddressSpace()); 584 } else if (GV->getType() != 585 llvm::PointerType::get(InitType, ASTTy.getAddressSpace())) { 586 // We have a definition after a prototype with the wrong type. 587 // We must make a new GlobalVariable* and update everything that used OldGV 588 // (a declaration or tentative definition) with the new GlobalVariable* 589 // (which will be a definition). 590 // 591 // This happens if there is a prototype for a global (e.g. "extern int x[];") 592 // and then a definition of a different type (e.g. "int x[10];"). This also 593 // happens when an initializer has a different type from the type of the 594 // global (this happens with unions). 595 // 596 // FIXME: This also ends up happening if there's a definition followed by 597 // a tentative definition! (Although Sema rejects that construct 598 // at the moment.) 599 600 // Save the old global 601 llvm::GlobalVariable *OldGV = GV; 602 603 // Make a new global with the correct type 604 GV = new llvm::GlobalVariable(InitType, false, 605 llvm::GlobalValue::ExternalLinkage, 606 0, getMangledName(D)->getName(), 607 &getModule(), 0, ASTTy.getAddressSpace()); 608 // Steal the name of the old global 609 GV->takeName(OldGV); 610 611 // Replace all uses of the old global with the new global 612 llvm::Constant *NewPtrForOldDecl = 613 llvm::ConstantExpr::getBitCast(GV, OldGV->getType()); 614 OldGV->replaceAllUsesWith(NewPtrForOldDecl); 615 616 // Erase the old global, since it is no longer used. 617 OldGV->eraseFromParent(); 618 } 619 620 Entry = GV; 621 622 if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) { 623 SourceManager &SM = Context.getSourceManager(); 624 AddAnnotation(EmitAnnotateAttr(GV, AA, 625 SM.getInstantiationLineNumber(D->getLocation()))); 626 } 627 628 GV->setInitializer(Init); 629 GV->setConstant(D->getType().isConstant(Context)); 630 631 // FIXME: This is silly; getTypeAlign should just work for incomplete arrays 632 unsigned Align; 633 if (const IncompleteArrayType* IAT = 634 Context.getAsIncompleteArrayType(D->getType())) 635 Align = Context.getTypeAlign(IAT->getElementType()); 636 else 637 Align = Context.getTypeAlign(D->getType()); 638 if (const AlignedAttr* AA = D->getAttr<AlignedAttr>()) { 639 Align = std::max(Align, AA->getAlignment()); 640 } 641 GV->setAlignment(Align / 8); 642 643 if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) 644 setGlobalVisibility(GV, attr->getVisibility()); 645 // FIXME: else handle -fvisibility 646 647 if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) { 648 // Prefaced with special LLVM marker to indicate that the name 649 // should not be munged. 650 GV->setName("\01" + ALA->getLabel()); 651 } 652 653 // Set the llvm linkage type as appropriate. 654 if (D->getStorageClass() == VarDecl::Static) 655 GV->setLinkage(llvm::Function::InternalLinkage); 656 else if (D->getAttr<DLLImportAttr>()) 657 GV->setLinkage(llvm::Function::DLLImportLinkage); 658 else if (D->getAttr<DLLExportAttr>()) 659 GV->setLinkage(llvm::Function::DLLExportLinkage); 660 else if (D->getAttr<WeakAttr>()) 661 GV->setLinkage(llvm::GlobalVariable::WeakLinkage); 662 else { 663 // FIXME: This isn't right. This should handle common linkage and other 664 // stuff. 665 switch (D->getStorageClass()) { 666 case VarDecl::Static: assert(0 && "This case handled above"); 667 case VarDecl::Auto: 668 case VarDecl::Register: 669 assert(0 && "Can't have auto or register globals"); 670 case VarDecl::None: 671 if (!D->getInit()) 672 GV->setLinkage(llvm::GlobalVariable::CommonLinkage); 673 else 674 GV->setLinkage(llvm::GlobalVariable::ExternalLinkage); 675 break; 676 case VarDecl::Extern: 677 // FIXME: common 678 break; 679 680 case VarDecl::PrivateExtern: 681 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); 682 // FIXME: common 683 break; 684 } 685 } 686 687 if (const SectionAttr *SA = D->getAttr<SectionAttr>()) 688 GV->setSection(SA->getName()); 689 690 // Emit global variable debug information. 691 CGDebugInfo *DI = getDebugInfo(); 692 if(DI) { 693 DI->setLocation(D->getLocation()); 694 DI->EmitGlobalVariable(GV, D); 695 } 696 } 697 698 llvm::GlobalValue * 699 CodeGenModule::EmitForwardFunctionDefinition(const FunctionDecl *D) { 700 const llvm::Type *Ty = getTypes().ConvertType(D->getType()); 701 llvm::Function *F = llvm::Function::Create(cast<llvm::FunctionType>(Ty), 702 llvm::Function::ExternalLinkage, 703 getMangledName(D)->getName(), 704 &getModule()); 705 SetFunctionAttributes(D, F); 706 return F; 707 } 708 709 llvm::Constant *CodeGenModule::GetAddrOfFunction(const FunctionDecl *D) { 710 QualType ASTTy = D->getType(); 711 const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy); 712 const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace()); 713 714 // Lookup the entry, lazily creating it if necessary. 715 llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)]; 716 if (!Entry) 717 Entry = EmitForwardFunctionDefinition(D); 718 719 return llvm::ConstantExpr::getBitCast(Entry, PTy); 720 } 721 722 void CodeGenModule::EmitGlobalFunctionDefinition(const FunctionDecl *D) { 723 llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)]; 724 if (!Entry) { 725 Entry = EmitForwardFunctionDefinition(D); 726 } else { 727 // If the types mismatch then we have to rewrite the definition. 728 const llvm::Type *Ty = getTypes().ConvertType(D->getType()); 729 if (Entry->getType() != llvm::PointerType::getUnqual(Ty)) { 730 // Otherwise, we have a definition after a prototype with the wrong type. 731 // F is the Function* for the one with the wrong type, we must make a new 732 // Function* and update everything that used F (a declaration) with the new 733 // Function* (which will be a definition). 734 // 735 // This happens if there is a prototype for a function (e.g. "int f()") and 736 // then a definition of a different type (e.g. "int f(int x)"). Start by 737 // making a new function of the correct type, RAUW, then steal the name. 738 llvm::GlobalValue *NewFn = EmitForwardFunctionDefinition(D); 739 NewFn->takeName(Entry); 740 741 // Replace uses of F with the Function we will endow with a body. 742 llvm::Constant *NewPtrForOldDecl = 743 llvm::ConstantExpr::getBitCast(NewFn, Entry->getType()); 744 Entry->replaceAllUsesWith(NewPtrForOldDecl); 745 746 // Ok, delete the old function now, which is dead. 747 assert(Entry->isDeclaration() && "Shouldn't replace non-declaration"); 748 Entry->eraseFromParent(); 749 750 Entry = NewFn; 751 } 752 } 753 754 llvm::Function *Fn = cast<llvm::Function>(Entry); 755 CodeGenFunction(*this).GenerateCode(D, Fn); 756 757 SetFunctionAttributesForDefinition(D, Fn); 758 759 if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>()) { 760 AddGlobalCtor(Fn, CA->getPriority()); 761 } else if (const DestructorAttr *DA = D->getAttr<DestructorAttr>()) { 762 AddGlobalDtor(Fn, DA->getPriority()); 763 } 764 } 765 766 llvm::Function * 767 CodeGenModule::CreateRuntimeFunction(const llvm::FunctionType *FTy, 768 const std::string &Name) { 769 llvm::Function *Fn = llvm::Function::Create(FTy, 770 llvm::Function::ExternalLinkage, 771 "", &TheModule); 772 RuntimeFunctions.push_back(std::make_pair(Fn, Name)); 773 return Fn; 774 } 775 776 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) { 777 // Make sure that this type is translated. 778 Types.UpdateCompletedType(TD); 779 } 780 781 782 /// getBuiltinLibFunction 783 llvm::Function *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) { 784 if (BuiltinID > BuiltinFunctions.size()) 785 BuiltinFunctions.resize(BuiltinID); 786 787 // Cache looked up functions. Since builtin id #0 is invalid we don't reserve 788 // a slot for it. 789 assert(BuiltinID && "Invalid Builtin ID"); 790 llvm::Function *&FunctionSlot = BuiltinFunctions[BuiltinID-1]; 791 if (FunctionSlot) 792 return FunctionSlot; 793 794 assert(Context.BuiltinInfo.isLibFunction(BuiltinID) && "isn't a lib fn"); 795 796 // Get the name, skip over the __builtin_ prefix. 797 const char *Name = Context.BuiltinInfo.GetName(BuiltinID)+10; 798 799 // Get the type for the builtin. 800 QualType Type = Context.BuiltinInfo.GetBuiltinType(BuiltinID, Context); 801 const llvm::FunctionType *Ty = 802 cast<llvm::FunctionType>(getTypes().ConvertType(Type)); 803 804 // FIXME: This has a serious problem with code like this: 805 // void abs() {} 806 // ... __builtin_abs(x); 807 // The two versions of abs will collide. The fix is for the builtin to win, 808 // and for the existing one to be turned into a constantexpr cast of the 809 // builtin. In the case where the existing one is a static function, it 810 // should just be renamed. 811 if (llvm::Function *Existing = getModule().getFunction(Name)) { 812 if (Existing->getFunctionType() == Ty && Existing->hasExternalLinkage()) 813 return FunctionSlot = Existing; 814 assert(Existing == 0 && "FIXME: Name collision"); 815 } 816 817 // FIXME: param attributes for sext/zext etc. 818 return FunctionSlot = 819 llvm::Function::Create(Ty, llvm::Function::ExternalLinkage, Name, 820 &getModule()); 821 } 822 823 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys, 824 unsigned NumTys) { 825 return llvm::Intrinsic::getDeclaration(&getModule(), 826 (llvm::Intrinsic::ID)IID, Tys, NumTys); 827 } 828 829 llvm::Function *CodeGenModule::getMemCpyFn() { 830 if (MemCpyFn) return MemCpyFn; 831 const llvm::Type *IntPtr = TheTargetData.getIntPtrType(); 832 return MemCpyFn = getIntrinsic(llvm::Intrinsic::memcpy, &IntPtr, 1); 833 } 834 835 llvm::Function *CodeGenModule::getMemMoveFn() { 836 if (MemMoveFn) return MemMoveFn; 837 const llvm::Type *IntPtr = TheTargetData.getIntPtrType(); 838 return MemMoveFn = getIntrinsic(llvm::Intrinsic::memmove, &IntPtr, 1); 839 } 840 841 llvm::Function *CodeGenModule::getMemSetFn() { 842 if (MemSetFn) return MemSetFn; 843 const llvm::Type *IntPtr = TheTargetData.getIntPtrType(); 844 return MemSetFn = getIntrinsic(llvm::Intrinsic::memset, &IntPtr, 1); 845 } 846 847 static void appendFieldAndPadding(CodeGenModule &CGM, 848 std::vector<llvm::Constant*>& Fields, 849 FieldDecl *FieldD, FieldDecl *NextFieldD, 850 llvm::Constant* Field, 851 RecordDecl* RD, const llvm::StructType *STy) 852 { 853 // Append the field. 854 Fields.push_back(Field); 855 856 int StructFieldNo = CGM.getTypes().getLLVMFieldNo(FieldD); 857 858 int NextStructFieldNo; 859 if (!NextFieldD) { 860 NextStructFieldNo = STy->getNumElements(); 861 } else { 862 NextStructFieldNo = CGM.getTypes().getLLVMFieldNo(NextFieldD); 863 } 864 865 // Append padding 866 for (int i = StructFieldNo + 1; i < NextStructFieldNo; i++) { 867 llvm::Constant *C = 868 llvm::Constant::getNullValue(STy->getElementType(StructFieldNo + 1)); 869 870 Fields.push_back(C); 871 } 872 } 873 874 // We still need to work out the details of handling UTF-16. 875 // See: <rdr://2996215> 876 llvm::Constant *CodeGenModule:: 877 GetAddrOfConstantCFString(const std::string &str) { 878 llvm::StringMapEntry<llvm::Constant *> &Entry = 879 CFConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]); 880 881 if (Entry.getValue()) 882 return Entry.getValue(); 883 884 llvm::Constant *Zero = llvm::Constant::getNullValue(llvm::Type::Int32Ty); 885 llvm::Constant *Zeros[] = { Zero, Zero }; 886 887 if (!CFConstantStringClassRef) { 888 const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy); 889 Ty = llvm::ArrayType::get(Ty, 0); 890 891 // FIXME: This is fairly broken if 892 // __CFConstantStringClassReference is already defined, in that it 893 // will get renamed and the user will most likely see an opaque 894 // error message. This is a general issue with relying on 895 // particular names. 896 llvm::GlobalVariable *GV = 897 new llvm::GlobalVariable(Ty, false, 898 llvm::GlobalVariable::ExternalLinkage, 0, 899 "__CFConstantStringClassReference", 900 &getModule()); 901 902 // Decay array -> ptr 903 CFConstantStringClassRef = 904 llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2); 905 } 906 907 QualType CFTy = getContext().getCFConstantStringType(); 908 RecordDecl *CFRD = CFTy->getAsRecordType()->getDecl(); 909 910 const llvm::StructType *STy = 911 cast<llvm::StructType>(getTypes().ConvertType(CFTy)); 912 913 std::vector<llvm::Constant*> Fields; 914 RecordDecl::field_iterator Field = CFRD->field_begin(); 915 916 // Class pointer. 917 FieldDecl *CurField = *Field++; 918 FieldDecl *NextField = *Field++; 919 appendFieldAndPadding(*this, Fields, CurField, NextField, 920 CFConstantStringClassRef, CFRD, STy); 921 922 // Flags. 923 CurField = NextField; 924 NextField = *Field++; 925 const llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy); 926 appendFieldAndPadding(*this, Fields, CurField, NextField, 927 llvm::ConstantInt::get(Ty, 0x07C8), CFRD, STy); 928 929 // String pointer. 930 CurField = NextField; 931 NextField = *Field++; 932 llvm::Constant *C = llvm::ConstantArray::get(str); 933 C = new llvm::GlobalVariable(C->getType(), true, 934 llvm::GlobalValue::InternalLinkage, 935 C, ".str", &getModule()); 936 appendFieldAndPadding(*this, Fields, CurField, NextField, 937 llvm::ConstantExpr::getGetElementPtr(C, Zeros, 2), 938 CFRD, STy); 939 940 // String length. 941 CurField = NextField; 942 NextField = 0; 943 Ty = getTypes().ConvertType(getContext().LongTy); 944 appendFieldAndPadding(*this, Fields, CurField, NextField, 945 llvm::ConstantInt::get(Ty, str.length()), CFRD, STy); 946 947 // The struct. 948 C = llvm::ConstantStruct::get(STy, Fields); 949 llvm::GlobalVariable *GV = 950 new llvm::GlobalVariable(C->getType(), true, 951 llvm::GlobalVariable::InternalLinkage, 952 C, "", &getModule()); 953 954 GV->setSection("__DATA,__cfstring"); 955 Entry.setValue(GV); 956 957 return GV; 958 } 959 960 /// GetStringForStringLiteral - Return the appropriate bytes for a 961 /// string literal, properly padded to match the literal type. 962 std::string CodeGenModule::GetStringForStringLiteral(const StringLiteral *E) { 963 if (E->isWide()) { 964 ErrorUnsupported(E, "wide string"); 965 return "FIXME"; 966 } 967 968 const char *StrData = E->getStrData(); 969 unsigned Len = E->getByteLength(); 970 971 const ConstantArrayType *CAT = 972 getContext().getAsConstantArrayType(E->getType()); 973 assert(CAT && "String isn't pointer or array!"); 974 975 // Resize the string to the right size 976 // FIXME: What about wchar_t strings? 977 std::string Str(StrData, StrData+Len); 978 uint64_t RealLen = CAT->getSize().getZExtValue(); 979 Str.resize(RealLen, '\0'); 980 981 return Str; 982 } 983 984 /// GetAddrOfConstantStringFromLiteral - Return a pointer to a 985 /// constant array for the given string literal. 986 llvm::Constant * 987 CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) { 988 // FIXME: This can be more efficient. 989 return GetAddrOfConstantString(GetStringForStringLiteral(S)); 990 } 991 992 /// GenerateWritableString -- Creates storage for a string literal. 993 static llvm::Constant *GenerateStringLiteral(const std::string &str, 994 bool constant, 995 CodeGenModule &CGM, 996 const char *GlobalName) { 997 // Create Constant for this string literal. Don't add a '\0'. 998 llvm::Constant *C = llvm::ConstantArray::get(str, false); 999 1000 // Create a global variable for this string 1001 C = new llvm::GlobalVariable(C->getType(), constant, 1002 llvm::GlobalValue::InternalLinkage, 1003 C, 1004 GlobalName ? GlobalName : ".str", 1005 &CGM.getModule()); 1006 1007 return C; 1008 } 1009 1010 /// GetAddrOfConstantString - Returns a pointer to a character array 1011 /// containing the literal. This contents are exactly that of the 1012 /// given string, i.e. it will not be null terminated automatically; 1013 /// see GetAddrOfConstantCString. Note that whether the result is 1014 /// actually a pointer to an LLVM constant depends on 1015 /// Feature.WriteableStrings. 1016 /// 1017 /// The result has pointer to array type. 1018 llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str, 1019 const char *GlobalName) { 1020 // Don't share any string literals if writable-strings is turned on. 1021 if (Features.WritableStrings) 1022 return GenerateStringLiteral(str, false, *this, GlobalName); 1023 1024 llvm::StringMapEntry<llvm::Constant *> &Entry = 1025 ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]); 1026 1027 if (Entry.getValue()) 1028 return Entry.getValue(); 1029 1030 // Create a global variable for this. 1031 llvm::Constant *C = GenerateStringLiteral(str, true, *this, GlobalName); 1032 Entry.setValue(C); 1033 return C; 1034 } 1035 1036 /// GetAddrOfConstantCString - Returns a pointer to a character 1037 /// array containing the literal and a terminating '\-' 1038 /// character. The result has pointer to array type. 1039 llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str, 1040 const char *GlobalName){ 1041 return GetAddrOfConstantString(str + '\0', GlobalName); 1042 } 1043 1044 /// EmitObjCPropertyImplementations - Emit information for synthesized 1045 /// properties for an implementation. 1046 void CodeGenModule::EmitObjCPropertyImplementations(const 1047 ObjCImplementationDecl *D) { 1048 for (ObjCImplementationDecl::propimpl_iterator i = D->propimpl_begin(), 1049 e = D->propimpl_end(); i != e; ++i) { 1050 ObjCPropertyImplDecl *PID = *i; 1051 1052 // Dynamic is just for type-checking. 1053 if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) { 1054 ObjCPropertyDecl *PD = PID->getPropertyDecl(); 1055 1056 // Determine which methods need to be implemented, some may have 1057 // been overridden. Note that ::isSynthesized is not the method 1058 // we want, that just indicates if the decl came from a 1059 // property. What we want to know is if the method is defined in 1060 // this implementation. 1061 if (!D->getInstanceMethod(PD->getGetterName())) 1062 CodeGenFunction(*this).GenerateObjCGetter( 1063 const_cast<ObjCImplementationDecl *>(D), PID); 1064 if (!PD->isReadOnly() && 1065 !D->getInstanceMethod(PD->getSetterName())) 1066 CodeGenFunction(*this).GenerateObjCSetter( 1067 const_cast<ObjCImplementationDecl *>(D), PID); 1068 } 1069 } 1070 } 1071 1072 /// EmitTopLevelDecl - Emit code for a single top level declaration. 1073 void CodeGenModule::EmitTopLevelDecl(Decl *D) { 1074 // If an error has occurred, stop code generation, but continue 1075 // parsing and semantic analysis (to ensure all warnings and errors 1076 // are emitted). 1077 if (Diags.hasErrorOccurred()) 1078 return; 1079 1080 switch (D->getKind()) { 1081 case Decl::Function: 1082 case Decl::Var: 1083 EmitGlobal(cast<ValueDecl>(D)); 1084 break; 1085 1086 case Decl::Namespace: 1087 ErrorUnsupported(D, "namespace"); 1088 break; 1089 1090 // Objective-C Decls 1091 1092 // Forward declarations, no (immediate) code generation. 1093 case Decl::ObjCClass: 1094 case Decl::ObjCCategory: 1095 case Decl::ObjCForwardProtocol: 1096 case Decl::ObjCInterface: 1097 break; 1098 1099 case Decl::ObjCProtocol: 1100 Runtime->GenerateProtocol(cast<ObjCProtocolDecl>(D)); 1101 break; 1102 1103 case Decl::ObjCCategoryImpl: 1104 // Categories have properties but don't support synthesize so we 1105 // can ignore them here. 1106 1107 Runtime->GenerateCategory(cast<ObjCCategoryImplDecl>(D)); 1108 break; 1109 1110 case Decl::ObjCImplementation: { 1111 ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D); 1112 EmitObjCPropertyImplementations(OMD); 1113 Runtime->GenerateClass(OMD); 1114 break; 1115 } 1116 case Decl::ObjCMethod: { 1117 ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D); 1118 // If this is not a prototype, emit the body. 1119 if (OMD->getBody()) 1120 CodeGenFunction(*this).GenerateObjCMethod(OMD); 1121 break; 1122 } 1123 case Decl::ObjCCompatibleAlias: 1124 // compatibility-alias is a directive and has no code gen. 1125 break; 1126 1127 case Decl::LinkageSpec: { 1128 LinkageSpecDecl *LSD = cast<LinkageSpecDecl>(D); 1129 if (LSD->getLanguage() == LinkageSpecDecl::lang_cxx) 1130 ErrorUnsupported(LSD, "linkage spec"); 1131 // FIXME: implement C++ linkage, C linkage works mostly by C 1132 // language reuse already. 1133 break; 1134 } 1135 1136 case Decl::FileScopeAsm: { 1137 FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D); 1138 std::string AsmString(AD->getAsmString()->getStrData(), 1139 AD->getAsmString()->getByteLength()); 1140 1141 const std::string &S = getModule().getModuleInlineAsm(); 1142 if (S.empty()) 1143 getModule().setModuleInlineAsm(AsmString); 1144 else 1145 getModule().setModuleInlineAsm(S + '\n' + AsmString); 1146 break; 1147 } 1148 1149 default: 1150 // Make sure we handled everything we should, every other kind is 1151 // a non-top-level decl. FIXME: Would be nice to have an 1152 // isTopLevelDeclKind function. Need to recode Decl::Kind to do 1153 // that easily. 1154 assert(isa<TypeDecl>(D) && "Unsupported decl kind"); 1155 } 1156 } 1157