diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-12-01 01:28:21 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-12-01 01:28:21 +0000 |
commit | f8d34ed0d0933350323d9f7a8521011d73dc98d5 (patch) | |
tree | 3386d78a33bb00540c2afa24fd870ca2a5230d7f | |
parent | 26ced127b7d443fcf3472463c9f39c2376bd9d70 (diff) |
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
-rw-r--r-- | lib/AST/Decl.cpp | 2 | ||||
-rw-r--r-- | 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 |