Remove -fconserve-space

Message ID
State New
Headers show

Commit Message

Steven Bosscher June 6, 2012, 6:06 p.m.

The attached patch removes the -fconserve-space flag, as discussed last week.
Bootstrapped&tested on powerpc64-unknown-linux-gnu. OK for trunk?

	* doc/invoke.texi (fconserve-space): Remove documentation.

	* c.opt (fconserve-space): Turn into a no-op.

	* decl.c: Do not include output.h.
	(start_decl): Remove code for flag_conserve_space.

	* g++.old-deja/g++.brendan/array1.C: Remove -fconserve-space flag.


Jason Merrill June 6, 2012, 6:48 p.m. | #1
On 06/06/2012 02:06 PM, Steven Bosscher wrote:
> -// { dg-options "-fconserve-space -fcommon" }
> +// { dg-options "-fcommon" }

I think we can just remove the dg-options; -fcommon has no effect for 
C++.  OK with that change.



Index: doc/invoke.texi
--- doc/invoke.texi	(revision 188182)
+++ doc/invoke.texi	(working copy)
@@ -182,7 +182,7 @@  in the following sections.
 @item C++ Language Options
 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
--fconserve-space  -fconstexpr-depth=@var{n}  -ffriend-injection @gol
+-fconstexpr-depth=@var{n}  -ffriend-injection @gol
 -fno-elide-constructors @gol
 -fno-enforce-eh-specs @gol
 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
@@ -1947,18 +1947,6 @@  return value even without this option.  In all oth
 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
 @samp{new (nothrow)}.
-@item -fconserve-space
-@opindex fconserve-space
-Put uninitialized or run-time-initialized global variables into the
-common segment, as C does.  This saves space in the executable at the
-cost of not diagnosing duplicate definitions.  If you compile with this
-flag and your program mysteriously crashes after @code{main()} has
-completed, you may have an object that is being destroyed twice because
-two definitions are merged.
-This option is no longer useful on most targets, now that support has
-been added for putting variables into BSS without making them common.
 @item -fconstexpr-depth=@var{n}
 @opindex fconstexpr-depth
 Set the maximum nested evaluation depth for C++11 constexpr functions
Index: c-family/c.opt
--- c-family/c.opt	(revision 188182)
+++ c-family/c.opt	(working copy)
@@ -762,7 +762,7 @@  Allow the arguments of the '?' operator to have di
 C++ ObjC++ Var(flag_conserve_space)
-Reduce the size of object files
+Does nothing.  Preserved for backward compatibility.
 ObjC ObjC++ Joined MissingArgError(no class name specified with %qs)
Index: cp/decl.c
--- cp/decl.c	(revision 188182)
+++ cp/decl.c	(working copy)
@@ -39,7 +39,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree-inline.h"
 #include "decl.h"
 #include "intl.h"
-#include "output.h" /* for have_global_bss_p */
 #include "toplev.h"
 #include "hashtab.h"
 #include "tm_p.h"
@@ -4528,18 +4527,6 @@  start_decl (const cp_declarator *declarator,
   if (decl == error_mark_node)
     return error_mark_node;
-  /* Tell the back end to use or not use .common as appropriate.  If we say
-     -fconserve-space, we want this to save .data space, at the expense of
-     wrong semantics.  If we say -fno-conserve-space, we want this to
-     produce errors about redefs; to do this we force variables into the
-     data segment.  */
-  if (flag_conserve_space
-      && TREE_CODE (decl) == VAR_DECL
-      && TREE_PUBLIC (decl)
-      && !DECL_THREAD_LOCAL_P (decl)
-      && !have_global_bss_p ())
-    DECL_COMMON (decl) = 1;
   if (TREE_CODE (decl) == VAR_DECL
       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
Index: testsuite/g++.old-deja/g++.brendan/array1.C
--- testsuite/g++.old-deja/g++.brendan/array1.C	(revision 188182)
+++ testsuite/g++.old-deja/g++.brendan/array1.C	(working copy)
@@ -1,5 +1,5 @@ 
 // { dg-do assemble  }
-// { dg-options "-fconserve-space -fcommon" }
+// { dg-options "-fcommon" }
 // GROUPS passed array-bindings
 extern "C" int printf (const char *, ...);