From 2de45c0679fc608353e9267941477769b3b18ecd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Wed, 14 Apr 1999 05:34:55 +0000 Subject: [PATCH] extend.texi (Deprecated Features): New node. * 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 | 5 +++++ gcc/cp/ChangeLog | 9 +++++++++ gcc/cp/cp-tree.h | 1 + gcc/cp/decl2.c | 19 +++++++++++++++++++ gcc/cp/errfn.c | 11 +++++++++++ gcc/cp/lang-options.h | 3 ++- gcc/extend.texi | 32 ++++++++++++++++++++++++++++++++ gcc/invoke.texi | 6 +++++- 8 files changed, 84 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa61163fd15..55c15dd3896 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Apr 14 13:59:27 1999 Martin von Loewis + + * extend.texi (Deprecated Features): New node. + * invoke.texi (-Wdeprecated): Document. + Wed Apr 14 00:18:22 1999 Jan Hubicka * i386.md (SImode logical compare): Avoid outputing non-pariable testw diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b320d5d725a..2f00fdd9803 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +1999-04-13 Martin von Loewis + + * 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 * decl2.c (setup_initp): Compare DECL_ASSEMBLER_NAME instead diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 240e2b02b4d..acb94d5e91c 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -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)); diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 4ea3035099c..8f0375b82d4 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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")) diff --git a/gcc/cp/errfn.c b/gcc/cp/errfn.c index 58a46af4bad..b5d3eeccd5a 100644 --- a/gcc/cp/errfn.c +++ b/gcc/cp/errfn.c @@ -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, ...)) { diff --git a/gcc/cp/lang-options.h b/gcc/cp/lang-options.h index f9cfa8c85d5..cfc64564028 100644 --- a/gcc/cp/lang-options.h +++ b/gcc/cp/lang-options.h @@ -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" }, diff --git a/gcc/extend.texi b/gcc/extend.texi index 7b6a6bfa4cd..f969f65b189 100644 --- a/gcc/extend.texi +++ b/gcc/extend.texi @@ -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 diff --git a/gcc/invoke.texi b/gcc/invoke.texi index cd0769776cf..a8eb92369dc 100644 --- a/gcc/invoke.texi +++ b/gcc/invoke.texi @@ -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 -- 2.30.2