diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-11-05 23:25:18 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-11-05 23:25:18 +0000 |
commit | 7d391557ccfb3edfc3036057099a8885f35ea1d5 (patch) | |
tree | a9cf66eed57021dee0a4c22c4cb92d6fdd9c159b /clang/lib | |
parent | 25edf4302f07a59a49324731e153977806ecb131 (diff) | |
download | bcm5719-llvm-7d391557ccfb3edfc3036057099a8885f35ea1d5.tar.gz bcm5719-llvm-7d391557ccfb3edfc3036057099a8885f35ea1d5.zip |
When determining which template partial specialization is more specialized,
make sure to setup the instantiation stack. Fixes rdar://8620775 & http://llvm.org/PR8234
llvm-svn: 118314
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaTemplateDeduction.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index 905e17e9c14..9b117b68132 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -2485,10 +2485,13 @@ Sema::getMoreSpecializedPartialSpecialization( Info, Deduced, 0); - if (Better1) + if (Better1) { + InstantiatingTemplate Inst(*this, PS2->getLocation(), PS2, + Deduced.data(), Deduced.size(), Info); Better1 = !::FinishTemplateArgumentDeduction(*this, PS2, PS1->getTemplateArgs(), Deduced, Info); + } // Determine whether PS2 is at least as specialized as PS1 Deduced.clear(); @@ -2500,10 +2503,13 @@ Sema::getMoreSpecializedPartialSpecialization( Info, Deduced, 0); - if (Better2) + if (Better2) { + InstantiatingTemplate Inst(*this, PS1->getLocation(), PS1, + Deduced.data(), Deduced.size(), Info); Better2 = !::FinishTemplateArgumentDeduction(*this, PS1, PS2->getTemplateArgs(), Deduced, Info); + } if (Better1 == Better2) return 0; |