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