Changeset 656:a15ccbf7451d
- Timestamp:
- 10/06/08 08:06:55
(2 months ago)
- Author:
- Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
- branch:
- default
- Message:
Support structs that are merely a forward reference. See mini/forwdecl1.d
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r622 |
r656 |
|
| 132 | 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 | 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 | 145 | bool ispacked = (ts->alignsize() == 1); |
|---|
| r643 |
r656 |
|
| 130 | 130 | vd->toObjFile(0); // TODO: multiobj |
|---|
| 131 | 131 | } |
|---|
| 132 | | if (!vd->ir.isSet() || !vd->ir.getIrValue() || DtoType(vd->type)->isAbstract()) { |
|---|
| 133 | | error("global variable %s not resolved", vd->toChars()); |
|---|
| | 132 | if (!vd->ir.isSet() || !vd->ir.getIrValue()) { |
|---|
| | 133 | error("variable %s not resolved", vd->toChars()); |
|---|
| 134 | 134 | if (Logger::enabled()) |
|---|
| 135 | | Logger::cout() << "unresolved global had type: " << *DtoType(vd->type) << '\n'; |
|---|
| | 135 | Logger::cout() << "unresolved variable had type: " << *DtoType(vd->type) << '\n'; |
|---|
| 136 | 136 | fatal(); |
|---|
| 137 | 137 | } |
|---|