diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2006-09-17 13:06:18 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2006-09-17 13:06:18 +0000 |
commit | 93c2b373409661798b7e191427a33791616a8ef6 (patch) | |
tree | ce692f147bc0e57484b55d0fbcad74df353bf821 /lib/AsmParser/llvmAsmParser.y.cvs | |
parent | 7ed96abc09afbcb8a2ce1116c029908326cb412a (diff) | |
download | external_llvm-93c2b373409661798b7e191427a33791616a8ef6.zip external_llvm-93c2b373409661798b7e191427a33791616a8ef6.tar.gz external_llvm-93c2b373409661798b7e191427a33791616a8ef6.tar.bz2 |
Small fixes for supporting dll* linkage types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30441 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/llvmAsmParser.y.cvs')
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y.cvs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs index af3a39d..bdfa07a 100644 --- a/lib/AsmParser/llvmAsmParser.y.cvs +++ b/lib/AsmParser/llvmAsmParser.y.cvs @@ -1917,22 +1917,21 @@ FunctionHeaderH : OptCallingConv TypesV Name '(' ArgList ')' for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end(); AI != AE; ++AI) AI->setName(""); - - if (CurFun.isDeclare) { - Fn->setLinkage(CurFun.Linkage); - } } else { // Not already defined? Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName, CurModule.CurrentModule); - if (CurFun.isDeclare) { - Fn->setLinkage(CurFun.Linkage); - } - InsertValue(Fn, CurModule.Values); } CurFun.FunctionStart(Fn); + + if (CurFun.isDeclare) { + // If we have declaration, always overwrite linkage. This will allow us to + // correctly handle cases, when pointer to function is passed as argument to + // another function. + Fn->setLinkage(CurFun.Linkage); + } Fn->setCallingConv($1); Fn->setAlignment($8); if ($7) { |