extend.texi (Deprecated Features): New node.
authorMartin v. Löwis <loewis@informatik.hu-berlin.de>
Wed, 14 Apr 1999 05:34:55 +0000 (05:34 +0000)
committerMartin v. Löwis <loewis@gcc.gnu.org>
Wed, 14 Apr 1999 05:34:55 +0000 (05:34 +0000)
* extend.texi (Deprecated Features): New node.
* invoke.texi (-Wdeprecated): Document.
* cp/lang-options.h (-Wdeprecated): New flag.
* cp/decl2.c (warn_deprecated): New flag.
(lang_decode_option): Deprecated this-is-variable,
external-templates, alt-external-templates.
Support -Wdeprecated.
* cp/errfn.c (cp_deprecated): New function.

From-SVN: r26438

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl2.c
gcc/cp/errfn.c
gcc/cp/lang-options.h
gcc/extend.texi
gcc/invoke.texi

index aa61163fd154aecdcf3c6881e8360681ccaf21b0..55c15dd3896ad084a44c869e751b7e9b46f4a6ea 100644 (file)
@@ -1,3 +1,8 @@
+Wed Apr 14 13:59:27 1999  Martin von Loewis  <loewis@informatik.hu-berlin.de>
+
+       * extend.texi (Deprecated Features): New node.
+       * invoke.texi (-Wdeprecated): Document.
+
 Wed Apr 14 00:18:22 1999  Jan Hubicka <hubicka@freesoft.cz>
 
        * i386.md (SImode logical compare): Avoid outputing non-pariable testw
index b320d5d725aec2cff31efd128a5c8b326ed9e05a..2f00fdd980388b879f2ec86e72dcfe33dcbeb80a 100644 (file)
@@ -1,3 +1,12 @@
+1999-04-13  Martin von Loewis  <loewis@informatik.hu-berlin.de>
+
+       * lang-options.h (-Wdeprecated): New flag.
+       * decl2.c (warn_deprecated): New flag.
+       (lang_decode_option): Deprecated this-is-variable,
+       external-templates, alt-external-templates.
+       Support -Wdeprecated.
+       * errfn.c (cp_deprecated): New function.
+
 1999-04-13  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (setup_initp): Compare DECL_ASSEMBLER_NAME instead
index 240e2b02b4d80779eb4c76cb99d104ab393c9237..acb94d5e91c6168ecbd233ec5c5fd885ffdd2b45 100644 (file)
@@ -2959,6 +2959,7 @@ extern void cp_pedwarn                            PVPROTO((const char *, ...));
 extern void cp_pedwarn_at                      PVPROTO((const char *, ...));
 extern void cp_compiler_error                  PVPROTO((const char *, ...));
 extern void cp_sprintf                         PVPROTO((const char *, ...));
+extern void cp_deprecated                       PROTO((const char*));
 
 /* in error.c */
 extern void init_error                         PROTO((void));
index 4ea3035099c9afe643a7fbef0d5e342950b2b65b..8f0375b82d43cb33846b3af141c7571ca4766fb5 100644 (file)
@@ -315,6 +315,10 @@ int warn_multichar = 1;
 
 int warn_nontemplate_friend = 1;
 
+/* Nonzero means complain about deprecated features.  */
+
+int warn_deprecated = 1;
+
 /* Nonzero means `$' can be in an identifier.  */
 
 #ifndef DOLLARS_IN_IDENTIFIERS
@@ -566,6 +570,7 @@ lang_decode_option (argc, argv)
          flag_external_templates = 1;
          flag_alt_external_templates = 1;
          found = 1;
+          cp_deprecated ("-falt-external-templates");
        }
       else if (! strcmp (p, "no-alt-external-templates"))
        {
@@ -589,6 +594,18 @@ lang_decode_option (argc, argv)
          flag_guiding_decls = 0;
          found = 1;
        }
+      else if (!strcmp (p, "this-is-variable"))
+        {
+          flag_this_is_variable = 1;
+          found = 1;
+          cp_deprecated ("-fthis-is-variable");
+        }
+      else if (!strcmp (p, "external-templates"))
+        {
+          flag_external_templates = 1;
+          found = 1;
+          cp_deprecated ("-fexternal-templates");
+        }
       else if (!strcmp (p, "new-abi"))
        {
          flag_new_abi = 1;
@@ -698,6 +715,8 @@ lang_decode_option (argc, argv)
        warn_unknown_pragmas = setting * 2;
       else if (!strcmp (p, "non-template-friend"))
        warn_nontemplate_friend = setting;
+      else if (!strcmp (p, "deprecated"))
+        warn_deprecated = setting;
       else if (!strcmp (p, "comment"))
        ;                       /* cpp handles this one.  */
       else if (!strcmp (p, "comments"))
index 58a46af4bad63744c26acc55ab81fc33cdec5075..b5d3eeccd5a9fa283323a2d70e850c103fe44c8c 100644 (file)
@@ -265,6 +265,17 @@ cp_compiler_error VPROTO((const char *format, ...))
   va_end (ap);
 }
 
+void
+cp_deprecated (msg)
+  const char *msg;
+{
+  extern int warn_deprecated;
+  if (!warn_deprecated)
+    return;
+  cp_warning ("%s is deprecated.", msg);
+  cp_warning ("Please see the documentation for details.");
+}
+
 void
 cp_sprintf VPROTO((const char *format, ...))
 {
index f9cfa8c85d500531043193038f8c38db31300d85..cfc64564028f965eb822801e436f7546f6e52699 100644 (file)
@@ -130,4 +130,5 @@ DEFINE_LANG_NAME ("C++")
   { "-Wno-old-style-cast", "" },
   { "-Wnon-template-friend", "" }, 
   { "-Wno-non-template-friend", "Don't warn when non-templatized friend functions are declared within a template" },
-
+  { "-Wdeprecated", "" },
+  { "-Wno-deprecated", "Don't announce deprecation of compiler features" },
index 7b6a6bfa4cd3e23adffdf8257910ae18cc5e773a..f969f65b1892f64cd45b6d5078eb9ae39a03588f 100644 (file)
@@ -65,6 +65,7 @@ C++ Language}, for extensions that apply @emph{only} to C++.
                         function.
 * Return Address::      Getting the return or frame address of a function.
 * Other Builtins::      Other built-in functions.
+* Deprecated Features:: Things might disappear from g++.
 @end menu
 @end ifset
 @ifclear INTERNALS
@@ -112,6 +113,7 @@ C++ Language}, for extensions that apply @emph{only} to C++.
 * Function Names::     Printable strings which are the name of the current
                         function.
 * Return Address::      Getting the return or frame address of a function.
+* Deprecated Features:: Things might disappear from g++.
 @end menu
 @end ifclear
 
@@ -3090,6 +3092,36 @@ or constructor expression (@pxref{Constructors}) and will not return 1
 when you pass a constant numeric value to the inline function unless you
 specify the @samp{-O} option.
 
+@node Deprecated Features
+@section Deprecated Features
+
+In the past, the GNU C++ compiler was extended to experiment with new
+features, at a time when the C++ language was still evolving. Now that
+the C++ standard is complete, some of those features are superceded by
+superior alternatives. Using the old features might cause a warning in
+some cases that the feature will be dropped in the future. In other
+cases, the feature might be gone already.
+
+While the list below is not exhaustive, it documents some of the options
+that are now deprecated:
+
+@table @code
+@item -fthis-is-variable
+In early versions of C++, assignment to this could be used to implement
+application-defined memory allocation. Now, allocation functions
+(@samp{operator new}) are the standard-conforming way to achieve the
+same effect.
+
+@item -fexternal-templates
+@itemx -falt-external-templates
+These are two of the many ways for g++ to implement template
+instantiation. @xref{Template Instantiation}. The C++ standard clearly
+defines how template definitions have to be organized across
+implementation units. g++ has an implicit instantiation mechanism that
+should work just fine for standard-conforming code.
+
+@end table
+
 @node C++ Extensions
 @chapter Extensions to the C++ Language
 @cindex extensions, C++ language
index cd0769776cf22ad632dd618d4d4ac355fa1f7f0a..a8eb92369dcc4b248a2159f58484fe48729f0a84 100644 (file)
@@ -109,7 +109,8 @@ in the following sections.
 -fno-implement-inlines -fname-mangling-version-@var{n}  -fno-default-inline  
 -foperator-names  -fno-optional-diags  -frepo  -fstrict-prototype
 -fsquangle  -ftemplate-depth-@var{n}  -fthis-is-variable  -fvtable-thunks
--nostdinc++  -Wctor-dtor-privacy  -Weffc++  -Wno-non-template-friend 
+-nostdinc++  -Wctor-dtor-privacy -Wno-deprecated -Weffc++  
+-Wno-non-template-friend 
 -Wnon-virtual-dtor  -Wold-style-cast  -Woverloaded-virtual  
 -Wno-pmf-conversions  -Wreorder  -Wsign-promo  -Wsynth
 @end smallexample
@@ -1218,6 +1219,9 @@ Warn about violations of various style guidelines from Scott Meyers'
 that the standard library headers do not obey all of these guidelines;
 you can use @samp{grep -v} to filter out those warnings.
 
+@item -Wno-deprecated (C++ only)
+Do not warn about usage of deprecated features. @xref{Deprecated Features}.
+
 @item -Wno-non-template-friend (C++ only)
 Disable warnings when non-templatized friend functions are declared
 within a template. With the advent of explicit template specification