Mercurial > projects > ldc
comparison gen/toobj.cpp @ 117:56a21f3e5d3e trunk
[svn r121] Finished ModuleInfo implementation.
Static ctors/dtors now work according to spec.
Changed class vtable types slightly in some cases. Overridden functions now always take the the type of the first class declaring the method as this parameter. This helps when using headers (w. implementation somewhere else)
author | lindquist |
---|---|
date | Mon, 26 Nov 2007 04:49:23 +0100 |
parents | fd7ad91fd713 |
children | 9c79b61fb638 |
comparison
equal
deleted
inserted
replaced
116:fd7ad91fd713 | 117:56a21f3e5d3e |
---|---|
121 | 121 |
122 // verify the llvm | 122 // verify the llvm |
123 if (!global.params.novalidate) { | 123 if (!global.params.novalidate) { |
124 std::string verifyErr; | 124 std::string verifyErr; |
125 Logger::println("Verifying module..."); | 125 Logger::println("Verifying module..."); |
126 LOG_SCOPE; | |
126 if (llvm::verifyModule(*ir.module,llvm::ReturnStatusAction,&verifyErr)) | 127 if (llvm::verifyModule(*ir.module,llvm::ReturnStatusAction,&verifyErr)) |
127 { | 128 { |
128 error("%s", verifyErr.c_str()); | 129 error("%s", verifyErr.c_str()); |
129 fatal(); | 130 fatal(); |
130 } | 131 } |
362 MIname.append("8__ModuleZ"); | 363 MIname.append("8__ModuleZ"); |
363 | 364 |
364 // declare | 365 // declare |
365 // flags will be modified at runtime so can't make it constant | 366 // flags will be modified at runtime so can't make it constant |
366 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, constMI, MIname, gIR->module); | 367 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, constMI, MIname, gIR->module); |
368 | |
369 // declare the appending array | |
370 const llvm::ArrayType* appendArrTy = llvm::ArrayType::get(llvm::PointerType::get(llvm::Type::Int8Ty), 1); | |
371 std::vector<llvm::Constant*> appendInits; | |
372 appendInits.push_back(llvm::ConstantExpr::getBitCast(gvar, llvm::PointerType::get(llvm::Type::Int8Ty))); | |
373 llvm::Constant* appendInit = llvm::ConstantArray::get(appendArrTy, appendInits); | |
374 std::string appendName("_d_moduleinfo_array"); | |
375 llvm::GlobalVariable* appendVar = new llvm::GlobalVariable(appendArrTy, true, llvm::GlobalValue::AppendingLinkage, appendInit, appendName, gIR->module); | |
367 } | 376 } |
368 | 377 |
369 /* ================================================================== */ | 378 /* ================================================================== */ |
370 | 379 |
371 void Dsymbol::toObjFile() | 380 void Dsymbol::toObjFile() |