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