[multiple changes]
authorJason Merrill <jason@gcc.gnu.org>
Mon, 29 Sep 1997 19:05:04 +0000 (15:05 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 29 Sep 1997 19:05:04 +0000 (15:05 -0400)
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

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/lang-options.h

index e7da2dd201f0eabc4738f8775dcc25b0a561b9fc..2fce4349bde5f1d023163a61509951a920ea7cfe 100644 (file)
@@ -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:
index 8d1ccfc4fa617d11796ee2781572483ce6dcb86b..9e04b698ba23ca864b62eb883b32ab58f616678e 100644 (file)
@@ -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;
index 40398185eba32bb4f92cc2826e1eb9dc52b276fc..695b1c4d39f4a74362cdc434c92e1cf14f74a048 100644 (file)
@@ -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.  */
index 9125783b26305d5e2a32e7e93f07fc97a2a7b22e..144502fb2b99faddbf7de745c7b32f5bdcc5b657 100644 (file)
@@ -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;
 }
 
index 6679030ad34746063c6c4a221103de63a774e055..045584965f8e3e26315f7e5315fc6ed6ea855bd1 100644 (file)
@@ -111,3 +111,5 @@ Boston, MA 02111-1307, USA.  */
   "-Wno-effc++",
   "-Wsign-promo",
   "-Wno-sign-promo",
+  "-Wold-style-cast",
+  "-Wno-old-style-cast",