aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>1997-09-29 15:05:04 -0400
committerJason Merrill <jason@gcc.gnu.org>1997-09-29 15:05:04 -0400
commit0c4b14c4d320e7cbf65fe4d11b6c8a3e58d710d1 (patch)
tree304c265c56c7614c75c0aa1c369245fcec038c4e
parent974c50f907d067cdaba43812aba6a87314685346 (diff)
downloadgcc-0c4b14c4d320e7cbf65fe4d11b6c8a3e58d710d1.zip
gcc-0c4b14c4d320e7cbf65fe4d11b6c8a3e58d710d1.tar.gz
gcc-0c4b14c4d320e7cbf65fe4d11b6c8a3e58d710d1.tar.bz2
[multiple changes]
Mon Sep 29 11:05:54 1997 Alexandre Oliva <oliva@dcc.unicamp.br> * lang-options.h: new -Wold-style-cast flag. * cp-tree.h (warn_old_style_cast): new variable. * decl2.c (warn_old_style_cast): ditto. (lang_decode_option): support -Wold-style-cast. (reparse_absdcl_as_casts): produce old-style-cast warning. Mon Sep 29 09:20:53 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com> * decl.c (cp_finish_decl): Allow expand_aggr_init to set TREE_USED, reset value based on already_used. * init.c (expand_member_init): Revert change. From-SVN: r15793
-rw-r--r--gcc/cp/ChangeLog15
-rw-r--r--gcc/cp/cp-tree.h4
-rw-r--r--gcc/cp/decl.c7
-rw-r--r--gcc/cp/decl2.c9
-rw-r--r--gcc/cp/lang-options.h2
5 files changed, 37 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e7da2dd..2fce434 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,18 @@
+Mon Sep 29 11:05:54 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * lang-options.h: new -Wold-style-cast flag.
+ * cp-tree.h (warn_old_style_cast): new variable.
+ * decl2.c (warn_old_style_cast): ditto.
+ (lang_decode_option): support -Wold-style-cast.
+ (reparse_absdcl_as_casts): produce old-style-cast warning.
+
+Mon Sep 29 09:20:53 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * decl.c (cp_finish_decl): Allow expand_aggr_init to set
+ TREE_USED, reset value based on already_used.
+
+ * init.c (expand_member_init): Revert change.
+
Mon Sep 29 08:57:53 1997 Jason Merrill <jason@yorick.cygnus.com>
* cp-tree.h, decl.c, decl2.c, pt.c:
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 8d1ccfc..9e04b69 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -257,6 +257,10 @@ extern int warn_sign_promo;
extern int warn_extern_inline;
+/* Non-zero means warn when an old-style cast is used. */
+
+extern int warn_old_style_cast;
+
/* Nonzero means to treat bitfields as unsigned unless they say `signed'. */
extern int flag_signed_bitfields;
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 4039818..695b1c4 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -6299,6 +6299,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
int temporary = allocation_temporary_p ();
char *asmspec = NULL;
int was_readonly = 0;
+ int already_used = 0;
/* If this is 0, then we did not change obstacks. */
if (! decl)
@@ -6858,6 +6859,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
{
/* Compute and store the initial value. */
expand_decl_init (decl);
+ already_used = TREE_USED (decl) || TREE_USED (type);
if (init || TYPE_NEEDS_CONSTRUCTING (type))
{
@@ -6870,10 +6872,15 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
was initialized was ever used. Don't do this if it has a
destructor, so we don't complain about the 'resource
allocation is initialization' idiom. */
+
if (TYPE_NEEDS_CONSTRUCTING (type)
+ && ! already_used
&& cleanup == NULL_TREE
&& DECL_NAME (decl))
TREE_USED (decl) = 0;
+
+ if (already_used)
+ TREE_USED (decl) = 1;
}
/* Cleanup any temporaries needed for the initial value. */
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 9125783..144502f 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -268,6 +268,10 @@ int warn_ecpp;
int warn_sign_promo;
+/* Nonzero means warn when an old-style cast is used. */
+
+int warn_old_style_cast;
+
/* Nonzero means `$' can be in an identifier.
See cccp.c for reasons why this breaks some obscure ANSI C programs. */
@@ -649,6 +653,8 @@ lang_decode_option (p)
warn_ecpp = setting;
else if (!strcmp (p, "sign-promo"))
warn_sign_promo = setting;
+ else if (!strcmp (p, "old-style-cast"))
+ warn_old_style_cast = setting;
else if (!strcmp (p, "comment"))
; /* cpp handles this one. */
else if (!strcmp (p, "comments"))
@@ -3375,6 +3381,9 @@ reparse_absdcl_as_casts (decl, expr)
expr = build_c_cast (type, expr);
}
+ if (warn_old_style_cast)
+ warning ("use of old-style cast");
+
return expr;
}
diff --git a/gcc/cp/lang-options.h b/gcc/cp/lang-options.h
index 6679030..0455849 100644
--- a/gcc/cp/lang-options.h
+++ b/gcc/cp/lang-options.h
@@ -111,3 +111,5 @@ Boston, MA 02111-1307, USA. */
"-Wno-effc++",
"-Wsign-promo",
"-Wno-sign-promo",
+ "-Wold-style-cast",
+ "-Wno-old-style-cast",