From 52889bc8181bed43cc0dff3e285f57cff9b9d2ab Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 16 Jul 1998 11:46:44 +0000 Subject: [PATCH] semantics.c (finish_object_call_expr): Move test for the function called being a TYPE_DECL to ... 1998-07-16 Mark Mitchell * semantics.c (finish_object_call_expr): Move test for the function called being a TYPE_DECL to ... * call.c (build_new_method_call): Here. From-SVN: r21213 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/call.c | 6 ++++++ gcc/cp/semantics.c | 6 ------ gcc/testsuite/g++.old-deja/g++.pt/call1.C | 13 +++++++++++++ gcc/testsuite/g++.old-deja/g++.pt/call2.C | 14 ++++++++++++++ 5 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/call1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/call2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 37a85a73d27..08b57eb98fb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +1998-07-16 Mark Mitchell + + * semantics.c (finish_object_call_expr): Move test for the + function called being a TYPE_DECL to ... + * call.c (build_new_method_call): Here. + 1998-07-15 Jason Merrill * decl2.c (arg_assoc_class): Also look at template arguments, if any. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 3e11a741fa5..7a8719153cb 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3552,6 +3552,12 @@ build_new_method_call (instance, name, args, basetype_path, flags) template_only = 1; } + if (TREE_CODE (name) == TYPE_DECL) + { + cp_error ("calling type `%T' like a method", name); + return error_mark_node; + } + /* If there is an extra argument for controlling virtual bases, remove it for error reporting. */ if (flags & LOOKUP_HAS_IN_CHARGE) diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fe4709aee95..cae0b673466 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -922,12 +922,6 @@ finish_object_call_expr (fn, object, args) tree real_fn = build_component_ref (object, fn, NULL_TREE, 1); return finish_call_expr (real_fn, args); #else - if (TREE_CODE (fn) == TYPE_DECL) - { - cp_error ("calling type `%T' like a method", fn); - return error_mark_node; - } - return build_method_call (object, fn, args, NULL_TREE, LOOKUP_NORMAL); #endif } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/call1.C b/gcc/testsuite/g++.old-deja/g++.pt/call1.C new file mode 100644 index 00000000000..257d5473295 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/call1.C @@ -0,0 +1,13 @@ +// Build don't link: + +struct IsCompressed { }; +struct Field { + bool IsCompressed() const { return true; } +}; + +template +inline bool +for_each(const Field& p, IsCompressed, C) +{ + return p.IsCompressed(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/call2.C b/gcc/testsuite/g++.old-deja/g++.pt/call2.C new file mode 100644 index 00000000000..51b246948ed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/call2.C @@ -0,0 +1,14 @@ +// Build don't link: + +struct IsCompressed { }; +struct Field { +}; + +template +inline bool +for_each(const Field& p, IsCompressed, C) +{ + return p.IsCompressed(); // ERROR - calling type like a method +} + +template bool for_each(const Field& p, IsCompressed, int); // ERROR - instantiated from here -- 2.30.2