Fix PR1645 by resolving forward alias references.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41815 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-09-10 23:23:53 +00:00
parent 0c82b9de77
commit e543424d9a
2 changed files with 30 additions and 0 deletions

View File

@ -2129,6 +2129,27 @@ Definition
CurModule.CurrentModule);
GA->setVisibility($2);
InsertValue(GA, CurModule.Values);
// If there was a forward reference of this alias, resolve it now.
ValID ID;
if (!Name.empty())
ID = ValID::createGlobalName(Name);
else
ID = ValID::createGlobalID(CurModule.Values.size()-1);
if (GlobalValue *FWGV =
CurModule.GetForwardRefForGlobal(GA->getType(), ID)) {
// Replace uses of the fwdref with the actual alias.
FWGV->replaceAllUsesWith(GA);
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(FWGV))
GV->eraseFromParent();
else
cast<Function>(FWGV)->eraseFromParent();
}
ID.destroy();
CHECK_FOR_ERROR
}
| TARGET TargetDefinition {

View File

@ -0,0 +1,9 @@
; RUN: llvm-as < %s | llvm-dis
; PR1645
@__gthread_active_ptr.5335 = internal constant i8* bitcast (i32 (i32)* @__gthrw_pthread_cancel to i8*)
@__gthrw_pthread_cancel = alias weak i32 (i32)* @pthread_cancel
declare extern_weak i32 @pthread_cancel(i32)