Mercurial > projects > ldc
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; |