-static void convertAliasToDeclaration(GlobalAlias &GA, Module &M) {
- GlobalValue *GVal = GA.getBaseObject();
- GlobalValue *NewGV;
- if (auto *GVar = dyn_cast<GlobalVariable>(GVal)) {
- GlobalVariable *NewGVar = new GlobalVariable(
- M, GVar->getType()->getElementType(), GVar->isConstant(),
- GVar->getLinkage(), /*init*/ nullptr, GA.getName(), GVar,
- GVar->getThreadLocalMode(), GVar->getType()->getAddressSpace());
- NewGV = NewGVar;
- NewGV->copyAttributesFrom(GVar);
- } else {
- auto *F = dyn_cast<Function>(GVal);
- assert(F);
- Function *NewF = Function::Create(F->getFunctionType(), F->getLinkage(),
- GA.getName(), &M);
- NewGV = NewF;
- NewGV->copyAttributesFrom(F);
- }
- GA.replaceAllUsesWith(ConstantExpr::getBitCast(NewGV, GA.getType()));
- GA.eraseFromParent();
-}
-