summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-09-17 19:51:30 +0000
committerDouglas Gregor <dgregor@apple.com>2009-09-17 19:51:30 +0000
commit4f15f4dec158f6552808b11b1be522a7e24b07fa (patch)
tree518f4c41df3d82834cad99e0e43833b5e51435ca /clang/lib/Sema/SemaDeclCXX.cpp
parenta6ebba270d1309e7c3d9fbdf58d8ac018138201f (diff)
downloadbcm5719-llvm-4f15f4dec158f6552808b11b1be522a7e24b07fa.tar.gz
bcm5719-llvm-4f15f4dec158f6552808b11b1be522a7e24b07fa.zip
Merge uninstantiated default arguments more carefully, and try not to
complain about specializations of member functions that are not definitions. Fixes PR4995. llvm-svn: 82159
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 61353680399..75718ddec9e 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -280,9 +280,13 @@ bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
Diag(OldParam->getLocation(), diag::note_previous_definition)
<< OldParam->getDefaultArgRange();
Invalid = true;
- } else if (OldParam->getDefaultArg()) {
+ } else if (OldParam->hasDefaultArg()) {
// Merge the old default argument into the new parameter
- NewParam->setDefaultArg(OldParam->getDefaultArg());
+ if (OldParam->hasUninstantiatedDefaultArg())
+ NewParam->setUninstantiatedDefaultArg(
+ OldParam->getUninstantiatedDefaultArg());
+ else
+ NewParam->setDefaultArg(OldParam->getDefaultArg());
} else if (NewParam->hasDefaultArg()) {
if (New->getDescribedFunctionTemplate()) {
// Paragraph 4, quoted above, only applies to non-template functions.
OpenPOWER on IntegriCloud