aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-14 18:35:13 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-14 18:35:13 +0000
commitf00fe233c7c9270c7c380bfa3aca293a62a1268d (patch)
tree4782fa9dc6a960dc812e3a468de39a95c1071b33 /gcc
parent28f82a8d7a06bee4d731f131b902902fd0f4af17 (diff)
PR c++/40740
* semantics.c (perform_koenig_lookup): Handle empty template args. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@149640 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/semantics.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/koenig8.C20
4 files changed, 35 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index dc19c006475..3e9343fe478 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/40740
+ * semantics.c (perform_koenig_lookup): Handle empty template args.
+
2009-07-12 Jason Merrill <jason@redhat.com>
PR c++/36628
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 4455f861734..be815fe6510 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1801,9 +1801,12 @@ perform_koenig_lookup (tree fn, tree args)
tree identifier = NULL_TREE;
tree functions = NULL_TREE;
tree tmpl_args = NULL_TREE;
+ bool template_id = false;
if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
{
+ /* Use a separate flag to handle null args. */
+ template_id = true;
tmpl_args = TREE_OPERAND (fn, 1);
fn = TREE_OPERAND (fn, 0);
}
@@ -1835,8 +1838,8 @@ perform_koenig_lookup (tree fn, tree args)
fn = unqualified_fn_lookup_error (identifier);
}
- if (fn && tmpl_args)
- fn = build_nt (TEMPLATE_ID_EXPR, fn, tmpl_args);
+ if (fn && template_id)
+ fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
return fn;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f40fb039dfd..20ae729caff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/40740
+ * g++.dg/template/koenig8.C: New.
+
2009-07-14 Jack Howarth <howarth@bromo.med.uc.edu>
* testsuite/gcc.c-torture/compile/20000804-1.c: skip for ilp32 on
diff --git a/gcc/testsuite/g++.dg/template/koenig8.C b/gcc/testsuite/g++.dg/template/koenig8.C
new file mode 100644
index 00000000000..5a49a7066da
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/koenig8.C
@@ -0,0 +1,20 @@
+// PR c++/40740
+
+template<class T>
+T addsome(T v) {
+ return v+1;
+}
+
+int addsome(int v) {
+ return v+2;
+}
+
+int main() {
+ int i = 0;
+ if (addsome(i) != 2)
+ return 1;
+ if (addsome<>(i) != 1)
+ return 2;
+ return 0;
+}
+