* 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
+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
+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
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));
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
flag_external_templates = 1;
flag_alt_external_templates = 1;
found = 1;
+ cp_deprecated ("-falt-external-templates");
}
else if (! strcmp (p, "no-alt-external-templates"))
{
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;
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"))
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, ...))
{
{ "-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" },
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
* 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
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
-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
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