From 28c797d00c0f82c6fcea91d05274ef240195d613 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Nov 2008 18:06:11 -0500 Subject: [PATCH] re PR c++/38030 (name-lookup for non-dependent name in template function is wrong) PR c++/38030 * semantics.c (finish_call_expr): Don't repeat arg-dep lookup for a non-dependent call. From-SVN: r141872 --- gcc/cp/ChangeLog | 12 ++++++++++++ gcc/cp/semantics.c | 4 +++- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/template/lookup8.C | 19 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/lookup8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 96084a112427..36135eb6554e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,15 @@ +<<<<<<< .working +======= +2008-11-14 Jason Merrill + + PR c++/38030 + * semantics.c (finish_call_expr): Don't repeat arg-dep lookup + for a non-dependent call. + + PR c++/37740 + * call.c (build_aggr_conv): Increment i. + +>>>>>>> .merge-right.r141866 2008-11-13 Jason Merrill PR c++/37932 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 5886972f9fd3..d95d731e6fd6 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1886,7 +1886,9 @@ finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p) { result = build3 (CALL_EXPR, TREE_TYPE (result), orig_fn, orig_args, NULL_TREE); - KOENIG_LOOKUP_P (result) = koenig_p; + /* Don't repeat arg-dependent lookup at instantiation time if this call + is not type-dependent. */ + KOENIG_LOOKUP_P (result) = 0; } return result; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d61c2b1d74cc..c849d0a1a5b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,15 @@ 2008-11-13 Uros Bizjak +<<<<<<< .working Backport from mainline: 2008-06-06 Uros Bizjak +======= + PR c++/38030 + * g++.dg/template/lookup8.C: New test. + + PR c++/37740 + * g++.dg/cpp0x/initlist8.C: New test. +>>>>>>> .merge-right.r141866 PR rtl-optimization/36438 * gcc.target/i386/pr36438.c diff --git a/gcc/testsuite/g++.dg/template/lookup8.C b/gcc/testsuite/g++.dg/template/lookup8.C new file mode 100644 index 000000000000..981c283e4dd9 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/lookup8.C @@ -0,0 +1,19 @@ +// PR c++/38030 +// The call to f should be resolved at template definition time. +// { dg-do link } + +struct B { }; +struct D : public B { }; +D d; +void f (B &) { } +template < class T > +void g () +{ + return f (d); +} +void f (D &); +int main () +{ + g (); + return 0; +} -- 2.47.2