[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-fortran
Subject:    Re: [PATCH] PR85678: Change default to -fno-common (porting_to for GCC 10)
From:       Eric Gallager <egall () gwmail ! gwu ! edu>
Date:       2019-11-30 19:10:35
Message-ID: CAMfHzOu0G=UK6PHOAvGk_qsG5i8RkG8J-mCcZfUTr2OuNGPBhw () mail ! gmail ! com
[Download RAW message or body]

On 11/29/19, Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
> Hi Martin,
>
>> I've noticed quite significant package failures caused by the revision.
>
> How significant? Is it mostly the common mistake of forgetting extern?
>
>> Would you please consider documenting this change in porting_to.html
>> (and in changes.html) for GCC 10 release?
>
> Sure, I already had a patch for changes.html - I've added an initial
> porting_to as well:

Thanks for the initial porting_to page; there was a Fortran change on
changes.html that I was hoping could have an entry on the porting_to
page as well:

Mismatches between actual and dummy argument lists in a single file
are now rejected with an error. Use the new option
-fallow-argument-mismatch to turn these errors into warnings; this
option is implied with -std=legacy. -Wargument-mismatch has been
removed.

Fortran people, are there any changes needed to make that part more
suitable for the porting_to page?

>
> [wwwdocs] Document -fcommon default change
>
> Add an entry for the default change. Passes the W3 validator.
>
> --
> diff --git a/htdocs/gcc-10/changes.html b/htdocs/gcc-10/changes.html
> index
> f0f0d312171a54afede176f06ce76f9c8abaebc4..980e4e591781d04aa888ba5988981006bd30dd1f
> 100644
> --- a/htdocs/gcc-10/changes.html
> +++ b/htdocs/gcc-10/changes.html
> @@ -47,6 +47,13 @@ a work-in-progress.</p>
>
>  <!-- ..................................................................
> -->
>  <h2 id="general">General Improvements</h2>
> +<p>The following GCC command line options have been introduced or
> improved.</p>
> +<ul>
> +  <li>GCC now defaults to <code>-fno-common</code>.  In C, global variables
> with
> +      multiple tentative definitions will result in linker errors.
> +      Global variable accesses are also more efficient on various targets.
> +  </li>
> +</ul>
>
>  <p>The following built-in functions have been introduced.</p>
>  <ul>
> diff --git a/htdocs/gcc-10/porting_to.html b/htdocs/gcc-10/porting_to.html
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..2e652f6aa4bd3259a316af0c72ab7eb96bab53b7
> --- /dev/null
> +++ b/htdocs/gcc-10/porting_to.html
> @@ -0,0 +1,65 @@
> +<!DOCTYPE html>
> +<html lang="en">
> +
> +<head>
> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> +<title>Porting to GCC 10</title>
> +<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css"
> />
> +</head>
> +
> +<body>
> +<h1>Porting to GCC 10</h1>
> +
> +<p>
> +The GCC 10 release series differs from previous GCC releases in
> +<a href="changes.html">a number of ways</a>. Some of these are a result
> +of bug fixing, and some old behaviors have been intentionally changed
> +to support new standards, or relaxed in standards-conforming ways to
> +facilitate compilation or run-time performance.
> +</p>
> +
> +<p>
> +Some of these changes are user visible and can cause grief when
> +porting to GCC 10. This document is an effort to identify common issues
> +and provide solutions. Let us know if you have suggestions for
> improvements!
> +</p>
> +
> +
> +<!--
> +<h2 id="cpp">Preprocessor issues</h2>
> +-->
> +
> +<h2 id="c">C language issues</h2>
> +
> +<h3 id="complit">Default to <code>-fno-common</code></h3>
> +
> +<p>
> +  A common mistake in C is omitting <code>extern</code> when declaring a
> global
> +  variable in a header file.  If the header is included by several files
> it
> +  results in multiple definitions of the same variable.  In previous GCC
> +  versions this error is ignored.  GCC 10 defaults to
> <code>-fno-common</code>,
> +  which means a linker error will now be reported.
> +  To fix this, use <code>extern</code> in header files when declaring
> global
> +  variables, and ensure each global is defined in exactly one C file.
> +  As a workaround, legacy C code can be compiled with
> <code>-fcommon</code>.
> +</p>
> +  <pre><code>
> +      int x;  // tentative definition - avoid in header files
> +
> +      extern int y;  // correct declaration in a header file
> +  </code></pre>
> +
> +<!--
> +<h2 id="cxx">C++ language issues</h2>
> +-->
> +
> +<!--
> +<h2 id="fortran">Fortran language issues</h2>
> +-->
> +
> +<!--
> +<h2 id="links">Links</h2>
> +-->
> +
> +</body>
> +</html>
>
>
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic