diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1998-02-14 15:49:20 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1998-02-14 10:49:20 -0500 |
commit | 798eed5ebb0cf04e983c0b5dbace09523201db35 (patch) | |
tree | 20a10ba1ffee0769871ed7e3309aa40cf5afe5da /gcc | |
parent | d757d1410f8de5908bbd669a097fcd898cef5a85 (diff) | |
download | gcc-798eed5ebb0cf04e983c0b5dbace09523201db35.zip gcc-798eed5ebb0cf04e983c0b5dbace09523201db35.tar.gz gcc-798eed5ebb0cf04e983c0b5dbace09523201db35.tar.bz2 |
* call.c (standard_conversion): Fix multi-level ptr conversions.
From-SVN: r17999
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 22 | ||||
-rw-r--r-- | gcc/cp/pt.c | 16 |
3 files changed, 16 insertions, 26 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bf10132..bd3003f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,6 @@ -Fri Feb 13 14:30:35 1998 Jason Merrill <jason@yorick.cygnus.com> +Fri Feb 13 14:55:37 1998 Jason Merrill <jason@yorick.cygnus.com> - * pt.c (determine_specialization): Give better errors. + * call.c (standard_conversion): Fix multi-level ptr conversions. Fri Feb 13 14:06:22 1998 Mike Stump <mrs@wrs.com> diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 424bfd5..8853ba3 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3107,19 +3107,15 @@ standard_conversion (to, from, expr) { enum tree_code ufcode = TREE_CODE (TREE_TYPE (from)); enum tree_code utcode = TREE_CODE (TREE_TYPE (to)); - tree nconv = NULL_TREE; - if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (from)), - TYPE_MAIN_VARIANT (TREE_TYPE (to)), 1)) - nconv = conv; - else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE - && ufcode != FUNCTION_TYPE) + if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE + && ufcode != FUNCTION_TYPE) { from = build_pointer_type (cp_build_type_variant (void_type_node, TYPE_READONLY (TREE_TYPE (from)), TYPE_VOLATILE (TREE_TYPE (from)))); - nconv = build_conv (PTR_CONV, from, conv); + conv = build_conv (PTR_CONV, from, conv); } else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE) { @@ -3133,7 +3129,7 @@ standard_conversion (to, from, expr) { from = build_offset_type (tbase, TREE_TYPE (TREE_TYPE (from))); from = build_pointer_type (from); - nconv = build_conv (PMEM_CONV, from, conv); + conv = build_conv (PMEM_CONV, from, conv); } } else if (IS_AGGR_TYPE (TREE_TYPE (from)) @@ -3145,14 +3141,14 @@ standard_conversion (to, from, expr) TYPE_READONLY (TREE_TYPE (from)), TYPE_VOLATILE (TREE_TYPE (from))); from = build_pointer_type (from); - nconv = build_conv (PTR_CONV, from, conv); + conv = build_conv (PTR_CONV, from, conv); } } - if (nconv && comptypes (from, to, 1)) - conv = nconv; - else if (nconv && comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from))) - conv = build_conv (QUAL_CONV, to, nconv); + if (comptypes (from, to, 1)) + /* OK */; + else if (comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from))) + conv = build_conv (QUAL_CONV, to, conv); else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from))) { conv = build_conv (PTR_CONV, to, conv); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index a96b534..e4fa8bb 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -519,15 +519,7 @@ determine_specialization (template_id, decl, targs_out, tmpl = DECL_TI_TEMPLATE (fn); else if (TREE_CODE (fn) != TEMPLATE_DECL || (need_member_template && !is_member_template (fn))) - { - if (decls_match (decl, fn) && 0) - { - cp_error ("`template <>' applied to non-specialization `%D'", - fn); - return NULL_TREE; - } - continue; - } + continue; else tmpl = fn; @@ -572,7 +564,8 @@ determine_specialization (template_id, decl, targs_out, { no_match: if (complain) - cp_error ("`%D' does not match any template declaration", decl); + cp_error ("`%D' does not match any template declaration", + template_id); return NULL_TREE; } @@ -581,7 +574,8 @@ determine_specialization (template_id, decl, targs_out, ambiguous: if (complain) { - cp_error ("ambiguous template specialization `%D'", decl); + cp_error ("ambiguous template specialization `%D'", + template_id); print_candidates (templates); } return NULL_TREE; |