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