call.c (maybe_handle_ref_bind): Copy ICS_USER_FLAG and ICS_BAD_FLAG.

* call.c (maybe_handle_ref_bind): Copy ICS_USER_FLAG and
	ICS_BAD_FLAG.

	* g++.old-deja/g++.other/overload14.C: New test.

From-SVN: r41448
This commit is contained in:
Jakub Jelinek 2001-04-20 10:17:19 +02:00 committed by Jakub Jelinek
parent 881cae050a
commit 351a0f00dc
4 changed files with 44 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* call.c (maybe_handle_ref_bind): Copy ICS_USER_FLAG and
ICS_BAD_FLAG.
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* search.c (lookup_field_r): If looking for type and non-TYPE_DECL

View File

@ -4741,11 +4741,14 @@ maybe_handle_ref_bind (ics, target_type)
{
if (TREE_CODE (*ics) == REF_BIND)
{
tree old_ics = *ics;
*target_type = TREE_TYPE (TREE_TYPE (*ics));
*ics = TREE_OPERAND (*ics, 0);
ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
return 1;
}
return 0;
}

View File

@ -1,3 +1,7 @@
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* g++.old-deja/g++.other/overload14.C: New test.
2001-04-20 Jakub Jelinek <jakub@redhat.com>
* g++.old-deja/g++.other/lookup23.C: New test.

View File

@ -0,0 +1,31 @@
extern "C" void abort();
struct A {
typedef double (&B);
typedef const double (&C);
A() { }
operator C () const;
operator B ();
};
static const double d = 2.0;
static double e = 3.0;
A::operator A::C () const
{
abort ();
return d;
}
A::operator A::B ()
{
return e;
}
int main ()
{
(A::C) A (); // WARNING -
return 0;
}