Fix regression introduced by r279164: only pass definitions as the PatternDef
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 22 Aug 2016 22:25:03 +0000 (22:25 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 22 Aug 2016 22:25:03 +0000 (22:25 +0000)
commit2fbcbb7b38a770366a62dd5dba6c82267087ac65
tree8db3b7dae3b81f3f87b934bf1285ebb88d449f6b
parenta72972b985e4553a8e607687bfb7e32bff25aa85
Fix regression introduced by r279164: only pass definitions as the PatternDef
to DiagnoseUninstantiableTemplate, teach hasVisibleDefinition to correctly
determine whether a function definition is visible, and mark both the function
and the template as visible when merging function template definitions to
provide hasVisibleDefinition with the relevant information.

The change to always pass the right declaration as the PatternDef to
DiagnoseUninstantiableTemplate also caused those checks to happen before other
diagnostics in InstantiateFunctionDefinition, giving worse diagnostics for the
same situations, so I sunk the relevant diagnostics into
DiagnoseUninstantiableTemplate. Those parts of this patch are based on changes
in reviews.llvm.org/D23492 by Vassil Vassilev.

llvm-svn: 279486
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
clang/lib/Sema/SemaType.cpp
clang/test/Modules/Inputs/merge-template-pattern-visibility/a.h
clang/test/Modules/Inputs/merge-template-pattern-visibility/b.h
clang/test/Modules/merge-template-pattern-visibility.cpp