diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-01-09 16:34:58 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-01-09 16:34:58 +0000 |
| commit | 3bd836a58e4c515aadd278f73f5dfc42782f3bd9 (patch) | |
| tree | d1ac926de16002624b30c87339b219d3fcf5b4a2 /clang | |
| parent | 9f64604e74a46ea1c8a8bd258b4a4195f79ec6cb (diff) | |
| download | bcm5719-llvm-3bd836a58e4c515aadd278f73f5dfc42782f3bd9.tar.gz bcm5719-llvm-3bd836a58e4c515aadd278f73f5dfc42782f3bd9.zip | |
Handle static functions being redeclared in function scope.
Fixes pr14861.
llvm-svn: 171978
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/AST/Decl.cpp | 4 | ||||
| -rw-r--r-- | clang/test/SemaCXX/linkage2.cpp | 8 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 35e61b57754..bf5bfaaef10 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -803,6 +803,10 @@ static LinkageInfo computeLVForDecl(const NamedDecl *D, bool OnlyTemplate) { !Function->getDeclContext()->isExternCContext()) return LinkageInfo::uniqueExternal(); + // This is a "void f();" which got merged with a file static. + if (Function->getStorageClass() == SC_Static) + return LinkageInfo::internal(); + LinkageInfo LV; if (!OnlyTemplate) { if (llvm::Optional<Visibility> Vis = Function->getExplicitVisibility()) diff --git a/clang/test/SemaCXX/linkage2.cpp b/clang/test/SemaCXX/linkage2.cpp index bab163db2ab..072dcd2413d 100644 --- a/clang/test/SemaCXX/linkage2.cpp +++ b/clang/test/SemaCXX/linkage2.cpp @@ -40,3 +40,11 @@ namespace test4 { }; } } + +namespace test5 { + static void g(); + void f() + { + void g(); + } +} |

