From f8d34ed0d0933350323d9f7a8521011d73dc98d5 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Thu, 1 Dec 2011 01:28:21 +0000 Subject: [PATCH] ParmVarDecls have no linkage. Previously we would report that parameters in type signatures have external linkage. Fixes rdar://10058317. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145551 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Decl.cpp | 2 ++ test/Index/linkage.c | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 7be4d26f98..5c7c0694a0 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -721,6 +721,8 @@ static LinkageInfo getLVForDecl(const NamedDecl *D, LVFlags Flags) { switch (D->getKind()) { default: break; + case Decl::ParmVar: + return LinkageInfo::none(); case Decl::TemplateTemplateParm: // count these as external case Decl::NonTypeTemplateParm: case Decl::ObjCAtDefsField: diff --git a/test/Index/linkage.c b/test/Index/linkage.c index d1f1c5bca5..41a1fbdd71 100644 --- a/test/Index/linkage.c +++ b/test/Index/linkage.c @@ -11,6 +11,8 @@ void bar(int y) { extern int n; static int wibble(int); +void ena(int (*dio)(int tria)); + // CHECK: EnumDecl=Baz:3:6 (Definition)linkage=External // CHECK: EnumConstantDecl=Qux:3:12 (Definition)linkage=External // CHECK: VarDecl=x:4:5linkage=External @@ -22,5 +24,7 @@ static int wibble(int); // CHECK: VarDecl=k:9:7 (Definition)linkage=NoLinkage // CHECK: VarDecl=n:11:12linkage=External // CHECK: FunctionDecl=wibble:12:12linkage=Internal -// CHECL: ParmDecl=:12:22 (Definition)linkage=NoLinkage - +// CHECK: ParmDecl=:12:22 (Definition)linkage=NoLinkage +// CHECK: FunctionDecl=ena:14:6linkage=External +// CHECK: ParmDecl=dio:14:16 (Definition)linkage=NoLinkage +// CHECK: ParmDecl=tria:14:25 (Definition)linkage=NoLinkage -- 2.40.0