aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AsmParser/llvmAsmParser.y.cvs
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2006-09-17 13:06:18 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2006-09-17 13:06:18 +0000
commit93c2b373409661798b7e191427a33791616a8ef6 (patch)
treece692f147bc0e57484b55d0fbcad74df353bf821 /lib/AsmParser/llvmAsmParser.y.cvs
parent7ed96abc09afbcb8a2ce1116c029908326cb412a (diff)
downloadexternal_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.cvs15
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) {