summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-11 18:53:25 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-11 18:53:25 +0000
commit133bc74d7a98f0f0af70ca4e41e27fdccae0279c (patch)
tree64295afcbc0bef43a46b5272c16fe87dc4048011 /clang/lib/Sema/SemaDeclCXX.cpp
parent8992323bb9c16e8a5600cf78cd8a9fcbfed116b5 (diff)
downloadbcm5719-llvm-133bc74d7a98f0f0af70ca4e41e27fdccae0279c.tar.gz
bcm5719-llvm-133bc74d7a98f0f0af70ca4e41e27fdccae0279c.zip
Add support for out-of-line definitions of conversion function
templates. Previously, a little thinko in the code that replaced a conversion function template with its redeclaration was causing some very weird lookup behavior. llvm-svn: 93166
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 41f0886e764..fd2abf88cdc 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -2746,11 +2746,14 @@ Sema::DeclPtrTy Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
if (Conversion->getPrimaryTemplate()) {
// ignore specializations
} else if (Conversion->getPreviousDeclaration()) {
- const NamedDecl *ExpectedPrevDecl = Conversion->getPreviousDeclaration();
if (FunctionTemplateDecl *ConversionTemplate
- = Conversion->getDescribedFunctionTemplate())
- ExpectedPrevDecl = ConversionTemplate->getPreviousDeclaration();
- if (ClassDecl->replaceConversion(ExpectedPrevDecl, Conversion))
+ = Conversion->getDescribedFunctionTemplate()) {
+ if (ClassDecl->replaceConversion(
+ ConversionTemplate->getPreviousDeclaration(),
+ ConversionTemplate))
+ return DeclPtrTy::make(ConversionTemplate);
+ } else if (ClassDecl->replaceConversion(Conversion->getPreviousDeclaration(),
+ Conversion))
return DeclPtrTy::make(Conversion);
assert(Conversion->isInvalidDecl() && "Conversion should not get here.");
} else if (FunctionTemplateDecl *ConversionTemplate
OpenPOWER on IntegriCloud