mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-17 13:39:46 +08:00
PR c++/5116, c++/764 reversion
cp: PR c++/5116, c++/764 reversion * call.c (build_new_op): Revert the instantiations. They are incorrect. testsuite: * g++.dg/template/friend2.C: Remove as patch is reverted. From-SVN: r48474
This commit is contained in:
parent
0beb74f25c
commit
40e593d781
@ -1,3 +1,9 @@
|
||||
2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/5116, c++/764 reversion
|
||||
* call.c (build_new_op): Revert the instantiations. They are
|
||||
incorrect.
|
||||
|
||||
2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/5089
|
||||
|
@ -3247,10 +3247,6 @@ build_new_op (code, flags, arg1, arg2, arg3)
|
||||
if (TREE_CODE (arg1) == OFFSET_REF)
|
||||
arg1 = resolve_offset_ref (arg1);
|
||||
arg1 = convert_from_reference (arg1);
|
||||
if (CLASS_TYPE_P (TREE_TYPE (arg1))
|
||||
&& CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (arg1)))
|
||||
/* Make sure the template type is instantiated now. */
|
||||
instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)));
|
||||
|
||||
switch (code)
|
||||
{
|
||||
@ -3273,18 +3269,12 @@ build_new_op (code, flags, arg1, arg2, arg3)
|
||||
if (TREE_CODE (arg2) == OFFSET_REF)
|
||||
arg2 = resolve_offset_ref (arg2);
|
||||
arg2 = convert_from_reference (arg2);
|
||||
if (CLASS_TYPE_P (TREE_TYPE (arg2))
|
||||
&& CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (arg2)))
|
||||
instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (arg2)));
|
||||
}
|
||||
if (arg3)
|
||||
{
|
||||
if (TREE_CODE (arg3) == OFFSET_REF)
|
||||
arg3 = resolve_offset_ref (arg3);
|
||||
arg3 = convert_from_reference (arg3);
|
||||
if (CLASS_TYPE_P (TREE_TYPE (arg3))
|
||||
&& CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (arg3)))
|
||||
instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (arg3)));
|
||||
}
|
||||
|
||||
if (code == COND_EXPR)
|
||||
|
@ -1,5 +1,7 @@
|
||||
2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* g++.dg/template/friend2.C: Remove as patch is reverted.
|
||||
|
||||
* g++.dg/warn/oldcast1.C: New test.
|
||||
|
||||
* g++.dg/template/ptrmem1.C: New test.
|
||||
|
@ -1,60 +0,0 @@
|
||||
// { dg-do run }
|
||||
|
||||
// Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 31 Dec 2001 <nathan@codesourcery.com>
|
||||
|
||||
// PR 5116 Failed to find friend in overload resolution
|
||||
|
||||
int wrong;
|
||||
int right;
|
||||
|
||||
struct Printer
|
||||
{
|
||||
Printer &operator<< (bool a)
|
||||
{
|
||||
wrong++;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct Buggy {};
|
||||
|
||||
template <typename T> struct Handle
|
||||
{
|
||||
Handle(T* p) {}
|
||||
|
||||
operator bool() const { return true; }
|
||||
|
||||
friend Printer& operator<<(Printer& ostr, const Handle& r)
|
||||
{
|
||||
right++;
|
||||
|
||||
return ostr;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
typedef Handle<Buggy> Buggy_h;
|
||||
|
||||
Printer out;
|
||||
|
||||
bool cmp (const Buggy_h& b1, const Buggy_h& b2)
|
||||
{
|
||||
out << b1 << b2;
|
||||
return false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
Buggy o;
|
||||
|
||||
cmp (&o, &o);
|
||||
|
||||
if (wrong)
|
||||
return 1;
|
||||
if (right != 2)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user