diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-14 18:35:13 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-14 18:35:13 +0000 |
commit | f00fe233c7c9270c7c380bfa3aca293a62a1268d (patch) | |
tree | 4782fa9dc6a960dc812e3a468de39a95c1071b33 /gcc | |
parent | 28f82a8d7a06bee4d731f131b902902fd0f4af17 (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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/koenig8.C | 20 |
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; +} + |