aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2002-01-02 15:17:07 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2002-01-02 15:17:07 +0000
commit40e593d781817dc1ff364cc91ab346916038a5a7 (patch)
tree66cc57209a57c508a21aba25ad2125e617002484 /gcc
parent0beb74f25cbae369354bf7007db6b038a1064180 (diff)
downloadgcc-40e593d781817dc1ff364cc91ab346916038a5a7.zip
gcc-40e593d781817dc1ff364cc91ab346916038a5a7.tar.gz
gcc-40e593d781817dc1ff364cc91ab346916038a5a7.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c10
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/template/friend2.C60
4 files changed, 8 insertions, 70 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e74dc15..a5f99e6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
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
* decl2.c (reparse_absdcl_as_casts): Don't warn about casts to void.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 6672119..190ddac 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7e2fa43..d225074 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/g++.dg/template/friend2.C b/gcc/testsuite/g++.dg/template/friend2.C
deleted file mode 100644
index de07518..0000000
--- a/gcc/testsuite/g++.dg/template/friend2.C
+++ /dev/null
@@ -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;
-}