re PR c++/18064 (gcc accepts different pointer types as covariant return types)
authorNathan Sidwell <nathan@codesourcery.com>
Mon, 1 Nov 2004 18:24:33 +0000 (18:24 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Mon, 1 Nov 2004 18:24:33 +0000 (18:24 +0000)
cp:
PR c++/18064
* search.c (check_final_overrider): Deprecate gnu covariant extension.
doc:
PR c++/18064
* doc/extend.texi (Deprecated Features): Deprecate G++ covariant
extension.
testsuite:
PR c++/18064
* g++.old-deja/g++.mike/p811.C: Avoid covariant extension.

From-SVN: r89946

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/search.c
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.mike/p811.C

index bfae47a04d3aab1417f9c39b62668920114d64b1..067be2934f880f3484afae93c6829487c6adc33a 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-01  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/18064
+       * doc/extend.texi (Deprecated Features): Deprecate G++ covariant
+       extension.
+
 2004-10-16  Daniel Berlin  <dberlin@dberlin.org>
 
        Fix PR tree-optimization/17672
index bea717b65fe806e4cb27285dd3195a59a9a5532f..022148e916565bb430447c9359a58b8fd1755975 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-01  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/18064
+       * search.c (check_final_overrider): Deprecate gnu covariant extension.
+
 2004-10-31  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
        Convert diagnostics to use quoting flag q 9/n
index 68a42f2630fb0cd35fd0b727abc4e2773b11905b..9e6178ea2868d7a5a17ffa92d52de71994507703 100644 (file)
@@ -1830,6 +1830,12 @@ check_final_overrider (tree overrider, tree basefn)
          over_return = non_reference (TREE_TYPE (over_type));
          if (CLASS_TYPE_P (over_return))
            fail = 2;
+         else
+           {
+             cp_warning_at ("deprecated covariant return type for %q#D",
+                            overrider);
+             cp_warning_at ("  overriding %q#D", basefn);
+           }
        }
       else
        fail = 2;
index 45653b122772214fcd03ced277dd4f60c6a4b820..a4cbb2f69c0a8d18493fd5f1360b7c1756793157 100644 (file)
@@ -9711,6 +9711,11 @@ parameters, as C++ demands.  This feature has been removed, except where
 it is required for backwards compatibility @xref{Backwards Compatibility}.
 @end table
 
+G++ allows a virtual function returning @samp{void *} to be overridden
+by one returning a different pointer type.  This extension to the
+covariant return type rules is now deprecated and will be removed from a
+future version.
+
 The named return value extension has been deprecated, and is now
 removed from G++.
 
index 994723eb5c42eb8bda1ae051b5c0e12522bf97b4..3b08af5d0471bbdf1b46d583ffea018733e22065 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-01  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/18064
+       * g++.old-deja/g++.mike/p811.C: Avoid covariant extension.
+
 2004-10-31  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/15172
index 7d15e9ed8aaf0c4a6ea2e3027aa9fb4d3037181c..260c6459cb870794444caf2380d566ebe62eab6c 100644 (file)
@@ -511,14 +511,14 @@ inline istream& WS(istream& str) { return ws(str); }
 class Y {
 public:
     Y() {}
-    virtual const char *stringify() = 0;
+  virtual const char *stringify() = 0;
     virtual char *stringify2() const = 0; // { dg-error "overriding" } 
 };
 
 class X: public Y {
 public:
     X(): Y() {}
-    char *stringify();         // { dg-error "candidate" }
+    const char *stringify();           // { dg-error "candidate" }
     const char *stringify2() const;  // { dg-error "candidate|conflicting return type" }
 };