diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-16 11:46:44 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-16 11:46:44 +0000 |
commit | 36472de313caafba8955e95e5859fd1d0bd57264 (patch) | |
tree | a6e848c78d9073f720fbddc475ad6ab9b8ba81be | |
parent | 197586bd3f208eb9622b3988df85f3df5183384d (diff) | |
download | gcc-36472de313caafba8955e95e5859fd1d0bd57264.tar.gz |
1998-07-16 Mark Mitchell <mark@markmitchell.com>
* semantics.c (finish_object_call_expr): Move test for the
function called being a TYPE_DECL to ...
* call.c (build_new_method_call): Here.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21213 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/call1.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/call2.C | 14 |
5 files changed, 39 insertions, 6 deletions
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 <mark@markmitchell.com> + + * 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 <jason@yorick.cygnus.com> * 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<class C> +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<class C> +inline bool +for_each(const Field& p, IsCompressed, C) +{ + return p.IsCompressed(); // ERROR - calling type like a method +} + +template bool for_each<int>(const Field& p, IsCompressed, int); // ERROR - instantiated from here |