aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c7
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist34.C2
4 files changed, 12 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6a7a824..f6515f7 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2010-05-17 Jason Merrill <jason@redhat.com>
+ * call.c (struct z_candidate): Add explicit_targs field.
+ (add_template_candidate_real): Set it.
+ (build_over_call): Use it to control init-list warning.
+
PR c++/44157
* call.c (build_over_call): Limit init-list deduction warning to
cases where the argument is actually an init-list.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 46779fa..97a196b 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -447,6 +447,7 @@ struct z_candidate {
indicated by the CONVERSION_PATH. */
tree conversion_path;
tree template_decl;
+ tree explicit_targs;
candidate_warning *warnings;
z_candidate *next;
};
@@ -2573,6 +2574,7 @@ add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
cand->template_decl = build_template_info (tmpl, targs);
else
cand->template_decl = DECL_TEMPLATE_INFO (fn);
+ cand->explicit_targs = explicit_targs;
return cand;
fail:
@@ -5692,7 +5694,10 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
pattype = PACK_EXPANSION_PATTERN (pattype);
pattype = non_reference (pattype);
- if (!is_std_init_list (pattype))
+ if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
+ && (cand->explicit_targs == NULL_TREE
+ || (TREE_VEC_LENGTH (cand->explicit_targs)
+ <= TEMPLATE_TYPE_IDX (pattype))))
{
pedwarn (input_location, 0, "deducing %qT as %qT",
non_reference (TREE_TYPE (patparm)),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aff8d1c..dfd3823 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -3,8 +3,6 @@
PR c++/44157
* g++.dg/cpp0x/initlist34.C: New.
-2010-05-17 Jason Merrill <jason@redhat.com>
-
PR c++/44158
* g++.dg/cpp0x/rv-trivial-bug.C: Test copy-init too.
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist34.C b/gcc/testsuite/g++.dg/cpp0x/initlist34.C
index 45cba56..92f5a3a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist34.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist34.C
@@ -9,4 +9,6 @@ void f(T) { }
int main() {
std::initializer_list<int> a = { 0 };
f(a);
+
+ f<std::initializer_list<int> >({ 0 });
}