Fix a regression from last night. Apparently the CFE is broken and outputs

functions multiple times, expecting them to be merged.  This should be fixed
in the CFE, then here.

llvm-svn: 14823
This commit is contained in:
Chris Lattner 2004-07-14 19:33:47 +00:00
parent 2661c50173
commit 91393ee84f
1 changed files with 16 additions and 6 deletions

View File

@ -1551,14 +1551,24 @@ FunctionHeaderH : TypesV Name '(' ArgList ')' {
const PointerType *PFT = PointerType::get(FT);
delete $1;
Function *Fn = 0;
// Is the function already in symtab?
if (CurModule.CurrentModule->getFunction(FunctionName, FT))
ThrowException("Redefinition of function '" + FunctionName + "'!");
if ((Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
// Yes it is. If this is the case, either we need to be a forward decl,
// or it needs to be.
if (!CurFun.isDeclare && !Fn->isExternal())
ThrowException("Redefinition of function '" + FunctionName + "'!");
// Make sure to strip off any argument names so we can't get conflicts...
for (Function::aiterator AI = Fn->abegin(), AE = Fn->aend(); AI != AE; ++AI)
AI->setName("");
Function *Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
CurModule.CurrentModule);
InsertValue(Fn, CurModule.Values);
CurModule.DeclareNewGlobalValue(Fn, ValID::create($2));
} else { // Not already defined?
Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
CurModule.CurrentModule);
InsertValue(Fn, CurModule.Values);
CurModule.DeclareNewGlobalValue(Fn, ValID::create($2));
}
free($2); // Free strdup'd memory!
CurFun.FunctionStart(Fn);