// Connect Modules via prototypes, each owned by module `M` static GlobalVariable *global_proto(GlobalVariable *G, Module *M = NULL) { // Copy the GlobalVariable, but without the initializer, so it becomes a declaration GlobalVariable *proto = new GlobalVariable(G->getType()->getElementType(), G->isConstant(), GlobalVariable::ExternalLinkage, NULL, G->getName(), G->getThreadLocalMode()); proto->copyAttributesFrom(G); #ifdef LLVM35 // DLLImport only needs to be set for the shadow module // it just gets annoying in the JIT proto->setDLLStorageClass(GlobalValue::DefaultStorageClass); #endif if (M) M->getGlobalList().push_back(proto); return proto; }