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()