aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-06-08 19:22:23 +0000
committerAnders Carlsson <andersca@mac.com>2009-06-08 19:22:23 +0000
commit994b6cb65c9daba2128366bc4c64be6dbf953528 (patch)
treed7aa79496062ce5ea6b882a8eb31c8dc3d6d3516
parent1fe067ab2168addd672c08b0b57bded3d155f073 (diff)
Address comments from Doug.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73077 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaTemplateDeduction.cpp13
-rw-r--r--test/SemaTemplate/temp_class_spec.cpp2
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp
index fe779ebd80..1789ba7856 100644
--- a/lib/Sema/SemaTemplateDeduction.cpp
+++ b/lib/Sema/SemaTemplateDeduction.cpp
@@ -276,7 +276,17 @@ static bool DeduceTemplateArguments(ASTContext &Context, QualType Param,
const FunctionProtoType *FunctionProtoParam =
cast<FunctionProtoType>(Param);
+
+ if (FunctionProtoParam->getTypeQuals() !=
+ FunctionProtoArg->getTypeQuals())
+ return false;
+
+ if (FunctionProtoParam->getNumArgs() != FunctionProtoArg->getNumArgs())
+ return false;
+ if (FunctionProtoParam->isVariadic() != FunctionProtoArg->isVariadic())
+ return false;
+
// Check return types.
if (!DeduceTemplateArguments(Context,
FunctionProtoParam->getResultType(),
@@ -284,9 +294,6 @@ static bool DeduceTemplateArguments(ASTContext &Context, QualType Param,
Deduced))
return false;
- if (FunctionProtoParam->getNumArgs() != FunctionProtoArg->getNumArgs())
- return false;
-
for (unsigned I = 0, N = FunctionProtoParam->getNumArgs(); I != N; ++I) {
// Check argument types.
if (!DeduceTemplateArguments(Context,
diff --git a/test/SemaTemplate/temp_class_spec.cpp b/test/SemaTemplate/temp_class_spec.cpp
index 8376ae3bd7..e17691cf62 100644
--- a/test/SemaTemplate/temp_class_spec.cpp
+++ b/test/SemaTemplate/temp_class_spec.cpp
@@ -134,6 +134,8 @@ int is_unary_function6[is_unary_function_with_same_return_type_as_argument_type<
int is_unary_function7[is_unary_function_with_same_return_type_as_argument_type<int (*)(int, bool)>::value ? -1 : 1];
int is_unary_function8[is_unary_function_with_same_return_type_as_argument_type<int (*)(bool)>::value ? -1 : 1];
int is_unary_function9[is_unary_function_with_same_return_type_as_argument_type<int (*)(int)>::value ? 1 : -1];
+int is_unary_function10[is_unary_function_with_same_return_type_as_argument_type<int (*)(int, ...)>::value ? -1 : 1];
+int is_unary_function11[is_unary_function_with_same_return_type_as_argument_type<int (* const)(int)>::value ? -1 : 1];
template<typename T>
struct is_binary_function {