aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc/invoke.texi
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2019-11-20 16:29:23 +0000
committerWilco Dijkstra <wilco@gcc.gnu.org>2019-11-20 16:29:23 +0000
commit6271dd984d7f920d4fb17ad37af6a1f8e6b796dc (patch)
tree52b4e9a530656bb17209232f777900c2b9d04604 /gcc/doc/invoke.texi
parent83115e9eb8a54893088eb556fb4cc9194c0c5926 (diff)
downloadgcc-6271dd984d7f920d4fb17ad37af6a1f8e6b796dc.zip
gcc-6271dd984d7f920d4fb17ad37af6a1f8e6b796dc.tar.gz
gcc-6271dd984d7f920d4fb17ad37af6a1f8e6b796dc.tar.bz2
PR85678: Change default to -fno-common
GCC currently defaults to -fcommon. As discussed in the PR, this is an ancient C feature which is not conforming with the latest C standards. On many targets this means global variable accesses have a codesize and performance penalty. This applies to C code only, C++ code is not affected by -fcommon. It is about time to change the default. gcc/ PR85678 * common.opt (fcommon): Change init to 1. * invoke.texi (-fcommon): Update documentation. testsuite/ * g++.dg/lto/odr-6_1.c: Add -fcommon. * gcc.dg/alias-15.c: Likewise. * gcc.dg/fdata-sections-1.c: Likewise. * gcc.dg/ipa/pr77653.c: Likewise. * gcc.dg/lto/20090729_0.c: Likewise. * gcc.dg/lto/20111207-1_0.c: Likewise. * gcc.dg/lto/c-compatible-types-1_0.c: Likewise. * gcc.dg/lto/pr55525_0.c: Likewise. * gcc.dg/lto/pr88077_0.c: Use long to avoid alignment warning. * gcc.dg/lto/pr88077_1.c: Add -fcommon. * gcc.target/aarch64/sve/peel_ind_1.c: Allow ANCHOR0. * gcc.target/aarch64/sve/peel_ind_2.c: Likewise. * gcc.target/aarch64/sve/peel_ind_3.c: Likewise. * gcc.target/i386/volatile-bitfields-2.c: Allow movl or movq. From-SVN: r278509
Diffstat (limited to 'gcc/doc/invoke.texi')
-rw-r--r--gcc/doc/invoke.texi42
1 files changed, 17 insertions, 25 deletions
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 2117e5e..031bfd2 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -569,7 +569,7 @@ Objective-C and Objective-C++ Dialects}.
-fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables @gol
-fasynchronous-unwind-tables @gol
-fno-gnu-unique @gol
--finhibit-size-directive -fno-common -fno-ident @gol
+-finhibit-size-directive -fcommon -fno-ident @gol
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-plt @gol
-fno-jump-tables @gol
-frecord-gcc-switches @gol
@@ -14112,35 +14112,27 @@ useful for building programs to run under WINE@.
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.
-@item -fno-common
-@opindex fno-common
+@item -fcommon
@opindex fcommon
+@opindex fno-common
@cindex tentative definitions
-In C code, this option controls the placement of global variables
-defined without an initializer, known as @dfn{tentative definitions}
-in the C standard. Tentative definitions are distinct from declarations
+In C code, this option controls the placement of global variables
+defined without an initializer, known as @dfn{tentative definitions}
+in the C standard. Tentative definitions are distinct from declarations
of a variable with the @code{extern} keyword, which do not allocate storage.
-Unix C compilers have traditionally allocated storage for
-uninitialized global variables in a common block. This allows the
-linker to resolve all tentative definitions of the same variable
+The default is @option{-fno-common}, which specifies that the compiler places
+uninitialized global variables in the BSS section of the object file.
+This inhibits the merging of tentative definitions by the linker so you get a
+multiple-definition error if the same variable is accidentally defined in more
+than one compilation unit.
+
+The @option{-fcommon} places uninitialized global variables in a common block.
+This allows the linker to resolve all tentative definitions of the same variable
in different compilation units to the same object, or to a non-tentative
-definition.
-This is the behavior specified by @option{-fcommon}, and is the default for
-GCC on most targets.
-On the other hand, this behavior is not required by ISO
-C, and on some targets may carry a speed or code size penalty on
-variable references.
-
-The @option{-fno-common} option specifies that the compiler should instead
-place uninitialized global variables in the BSS section of the object file.
-This inhibits the merging of tentative definitions by the linker so
-you get a multiple-definition error if the same
-variable is defined in more than one compilation unit.
-Compiling with @option{-fno-common} is useful on targets for which
-it provides better performance, or if you wish to verify that the
-program will work on other systems that always treat uninitialized
-variable definitions this way.
+definition. This behavior does not conform to ISO C, is inconsistent with C++,
+and on many targets implies a speed and code size penalty on global variable
+references. It is mainly useful to enable legacy code to link without errors.
@item -fno-ident
@opindex fno-ident