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