diff 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
line wrap: on
line diff
--- a/gen/structs.cpp	Mon Oct 06 12:46:57 2008 +0200
+++ b/gen/structs.cpp	Mon Oct 06 14:06:55 2008 +0200
@@ -131,10 +131,16 @@
     Logger::println("DtoResolveStruct(%s): %s", sd->toChars(), sd->loc.toChars());
     LOG_SCOPE;
 
-    if (sd->prot() == PROTprivate && sd->getModule() != gIR->dmodule)
-        Logger::println("using a private struct from outside its module");
+    TypeStruct* ts = (TypeStruct*)sd->type->toBasetype();
 
-    TypeStruct* ts = (TypeStruct*)sd->type->toBasetype();
+    // this struct is a forward declaration
+    // didn't even know had those ...
+    if (sd->sizeok != 1)
+    {
+        sd->ir.irStruct = new IrStruct(ts);
+        ts->ir.type = new llvm::PATypeHolder(llvm::OpaqueType::get());
+        return;
+    }
 
     bool ispacked = (ts->alignsize() == 1);