re PR c++/17821 (Poor diagnostic for using . instead of ->)
cp: PR c++/17821 * class.c (add_method): Do not push conversion operators into a binding level. * cp-tree.h (CLASSTYPE_PRIMARY_TEMPLATE_TYPE): Reformat. * error.c (dump_decl): <TYPE_DECL case> Remove extraneous braces. testsuite: PR c++/17821 * g++.dg/lookup/conv-5.C: New. From-SVN: r92316
This commit is contained in:
parent
64d200483a
commit
b54a07e8d2
|
@ -1,3 +1,12 @@
|
|||
2004-12-17 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/17821
|
||||
* class.c (add_method): Do not push conversion operators into a
|
||||
binding level.
|
||||
|
||||
* cp-tree.h (CLASSTYPE_PRIMARY_TEMPLATE_TYPE): Reformat.
|
||||
* error.c (dump_decl): <TYPE_DECL case> Remove extraneous braces.
|
||||
|
||||
2004-12-16 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/18905
|
||||
|
|
|
@ -857,7 +857,8 @@ add_method (tree type, tree method)
|
|||
int using;
|
||||
unsigned slot;
|
||||
tree overload;
|
||||
int template_conv_p;
|
||||
bool template_conv_p = false;
|
||||
bool conv_p;
|
||||
VEC(tree) *method_vec;
|
||||
bool complete_p;
|
||||
bool insert_p = false;
|
||||
|
@ -868,6 +869,8 @@ add_method (tree type, tree method)
|
|||
|
||||
complete_p = COMPLETE_TYPE_P (type);
|
||||
using = (DECL_CONTEXT (method) != type);
|
||||
conv_p = DECL_CONV_FN_P (method);
|
||||
if (conv_p)
|
||||
template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
|
||||
&& DECL_TEMPLATE_CONV_FN_P (method));
|
||||
|
||||
|
@ -901,7 +904,6 @@ add_method (tree type, tree method)
|
|||
}
|
||||
else
|
||||
{
|
||||
bool conv_p = DECL_CONV_FN_P (method);
|
||||
tree m;
|
||||
|
||||
insert_p = true;
|
||||
|
@ -1012,7 +1014,7 @@ add_method (tree type, tree method)
|
|||
/* Add the new binding. */
|
||||
overload = build_overload (method, current_fns);
|
||||
|
||||
if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
|
||||
if (!conv_p && slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
|
||||
push_class_level_binding (DECL_NAME (method), overload);
|
||||
|
||||
if (insert_p)
|
||||
|
|
|
@ -2193,7 +2193,8 @@ struct lang_decl GTY(())
|
|||
/* For a template instantiation TYPE, returns the TYPE corresponding
|
||||
to the primary template. Otherwise returns TYPE itself. */
|
||||
#define CLASSTYPE_PRIMARY_TEMPLATE_TYPE(TYPE) \
|
||||
((CLASSTYPE_USE_TEMPLATE ((TYPE)) && !CLASSTYPE_TEMPLATE_SPECIALIZATION ((TYPE))) \
|
||||
((CLASSTYPE_USE_TEMPLATE ((TYPE)) \
|
||||
&& !CLASSTYPE_TEMPLATE_SPECIALIZATION ((TYPE))) \
|
||||
? TREE_TYPE (DECL_TEMPLATE_RESULT (DECL_PRIMARY_TEMPLATE \
|
||||
(CLASSTYPE_TI_TEMPLATE ((TYPE))))) \
|
||||
: (TYPE))
|
||||
|
|
|
@ -713,7 +713,6 @@ dump_decl (tree t, int flags)
|
|||
switch (TREE_CODE (t))
|
||||
{
|
||||
case TYPE_DECL:
|
||||
{
|
||||
/* Don't say 'typedef class A' */
|
||||
if (DECL_ARTIFICIAL (t))
|
||||
{
|
||||
|
@ -725,7 +724,6 @@ dump_decl (tree t, int flags)
|
|||
dump_type (TREE_TYPE (t), flags);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (flags & TFF_DECL_SPECIFIERS)
|
||||
pp_cxx_identifier (cxx_pp, "typedef");
|
||||
dump_simple_decl (t, DECL_ORIGINAL_TYPE (t)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2004-12-17 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/17821
|
||||
* g++.dg/lookup/conv-5.C: New.
|
||||
|
||||
2004-12-16 Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
* objc.dg/stabs-1.m: New test.
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 17 Dec 2004 <nathan@codesourcery.com>
|
||||
|
||||
// PR 17821. bogus error
|
||||
// Origin: Mikael Kilpel?inen <belz@kolumbus.fi>
|
||||
|
||||
struct A {
|
||||
template<typename T>
|
||||
operator T() const;
|
||||
|
||||
operator float() const;
|
||||
};
|
||||
|
Loading…
Reference in New Issue