diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-09-17 19:51:30 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-09-17 19:51:30 +0000 |
commit | 4f15f4dec158f6552808b11b1be522a7e24b07fa (patch) | |
tree | 518f4c41df3d82834cad99e0e43833b5e51435ca /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | a6ebba270d1309e7c3d9fbdf58d8ac018138201f (diff) | |
download | bcm5719-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.cpp | 8 |
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. |