comparison gen/structs.cpp @ 656:a15ccbf7451d

Support structs that are merely a forward reference. See mini/forwdecl1.d
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Mon, 06 Oct 2008 14:06:55 +0200
parents 26fce59fe80a
children 5a2983f97498
comparison
equal deleted inserted replaced
655:93433f4b6963 656:a15ccbf7451d
129 sd->ir.resolved = true; 129 sd->ir.resolved = true;
130 130
131 Logger::println("DtoResolveStruct(%s): %s", sd->toChars(), sd->loc.toChars()); 131 Logger::println("DtoResolveStruct(%s): %s", sd->toChars(), sd->loc.toChars());
132 LOG_SCOPE; 132 LOG_SCOPE;
133 133
134 if (sd->prot() == PROTprivate && sd->getModule() != gIR->dmodule)
135 Logger::println("using a private struct from outside its module");
136
137 TypeStruct* ts = (TypeStruct*)sd->type->toBasetype(); 134 TypeStruct* ts = (TypeStruct*)sd->type->toBasetype();
135
136 // this struct is a forward declaration
137 // didn't even know had those ...
138 if (sd->sizeok != 1)
139 {
140 sd->ir.irStruct = new IrStruct(ts);
141 ts->ir.type = new llvm::PATypeHolder(llvm::OpaqueType::get());
142 return;
143 }
138 144
139 bool ispacked = (ts->alignsize() == 1); 145 bool ispacked = (ts->alignsize() == 1);
140 146
141 IrStruct* irstruct = new IrStruct(ts); 147 IrStruct* irstruct = new IrStruct(ts);
142 sd->ir.irStruct = irstruct; 148 sd->ir.irStruct = irstruct;