aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaTemplateDeduction.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-05 23:25:18 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-05 23:25:18 +0000
commit2c4792c731690dbbcbe69dd0625977adffc2961a (patch)
tree7b1dba8b2b9359aed0adf946c8d9cdf4d789f5ac /lib/Sema/SemaTemplateDeduction.cpp
parenta43064c7b721a51ab2c0d0ccdc4f84064aa7cecc (diff)
When determining which template partial specialization is more specialized,
make sure to setup the instantiation stack. Fixes rdar://8620775 & http://llvm.org/PR8234 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118314 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateDeduction.cpp')
-rw-r--r--lib/Sema/SemaTemplateDeduction.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp
index 905e17e9c1..9b117b6813 100644
--- a/lib/Sema/SemaTemplateDeduction.cpp
+++ b/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;