mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-24 23:32:06 +00:00
19791 lines
898 KiB
Plaintext
19791 lines
898 KiB
Plaintext
This file contains information about GCC releases which has been generated
|
||
automatically from the online release notes. It covers releases of GCC
|
||
(and the former EGCS project) since EGCS 1.0, on the line of development
|
||
that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
|
||
see ONEWS.
|
||
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-9/index.html
|
||
GCC 9 Release Series
|
||
|
||
May 3, 2019
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 9.1.
|
||
|
||
This release is a major release, containing new features (as well as
|
||
many other improvements) relative to GCC 8.x.
|
||
|
||
Release History
|
||
|
||
GCC 9.1
|
||
May 3, 2019 ([2]changes, [3]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [4]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [5]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [6]GCC project
|
||
web site or contact the [7]GCC development mailing list.
|
||
|
||
To obtain GCC please use [8]our mirror sites or [9]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [10]GCC manuals. If that fails, the
|
||
[11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [15]maintained by the GCC team. Last modified
|
||
2019-05-03[16].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-9/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/9.1.0/
|
||
4. http://gcc.gnu.org/gcc-9/buildstat.html
|
||
5. http://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
|
||
6. http://gcc.gnu.org/index.html
|
||
7. mailto:gcc@gcc.gnu.org
|
||
8. http://gcc.gnu.org/mirrors.html
|
||
9. http://gcc.gnu.org/svn.html
|
||
10. https://gcc.gnu.org/onlinedocs/
|
||
11. mailto:gcc-help@gcc.gnu.org
|
||
12. mailto:gcc@gcc.gnu.org
|
||
13. https://gcc.gnu.org/lists.html
|
||
14. https://www.fsf.org/
|
||
15. https://gcc.gnu.org/about.html
|
||
16. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-9/changes.html
|
||
GCC 9 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
This page is a "brief" summary of some of the huge number of
|
||
improvements in GCC 9.
|
||
|
||
Caveats
|
||
|
||
* On Arm targets (arm*-*-*), [1]a bug in the implementation of the
|
||
procedure call standard (AAPCS) in the GCC 6, 7 and 8 releases has
|
||
been fixed: a structure containing a bit-field based on a 64-bit
|
||
integral type and where no other element in a structure required
|
||
64-bit alignment could be passed incorrectly to functions. This is
|
||
an ABI change. If the option -Wpsabi is enabled (on by default) the
|
||
compiler will emit a diagnostic note for code that might be
|
||
affected.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 9.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ Solaris 10 (*-*-solaris2.10). Details can be found in the
|
||
[2]announcement.
|
||
+ Cell Broadband Engine SPU (spu*-*-*). Details can be found in
|
||
the [3]announcement.
|
||
|
||
General Improvements
|
||
|
||
The following GCC command line options have been introduced or
|
||
improved.
|
||
* All command line options that take a byte-size argument accept
|
||
64-bit integers as well as standard SI and IEC suffixes such as kb
|
||
and KiB, MB and MiB, or GB and GiB denoting the corresponding
|
||
multiples of bytes. See [4]Invoking GCC for more.
|
||
* A new option, [5]-flive-patching=[inline-only-static|inline-clone],
|
||
has been introduced to provide a safe compilation for
|
||
live-patching. At the same time, provides multiple-level control on
|
||
the enabled IPA optimizations. See the user guide for more details
|
||
about the option.
|
||
* A new option, --completion, has been added to provide more fine
|
||
option completion in a shell. It is intended to be used by
|
||
Bash-completion.
|
||
* GCC's diagnostics now print source code with a left margin showing
|
||
line numbers, configurable with
|
||
[6]-fno-diagnostics-show-line-numbers.
|
||
GCC's diagnostics can also now label regions of the source code to
|
||
show pertinent information, such as the types within an expression.
|
||
$ g++ t.cc
|
||
t.cc: In function 'int test(const shape&, const shape&)':
|
||
t.cc:15:4: error: no match for 'operator+' (operand types are 'boxed_value<doubl
|
||
e>' and 'boxed_value<double>')
|
||
14 | return (width(s1) * height(s1)
|
||
| ~~~~~~~~~~~~~~~~~~~~~~
|
||
| |
|
||
| boxed_value<[...]>
|
||
15 | + width(s2) * height(s2));
|
||
| ^ ~~~~~~~~~~~~~~~~~~~~~~
|
||
| |
|
||
| boxed_value<[...]>
|
||
|
||
These labels can be disabled via [7]-fno-diagnostics-show-labels.
|
||
* A new option [8]-fdiagnostics-format=json has been introduced for
|
||
emitting diagnostics in a machine-readable format.
|
||
* The alignment-related options [9]-falign-functions,
|
||
[10]-falign-labels, [11]-falign-loops, and [12]-falign-jumps
|
||
received support for a secondary alignment (e.g.
|
||
-falign-loops=n:m:n2:m2).
|
||
* New pair of profiling options ([13]-fprofile-filter-files and
|
||
[14]-fprofile-exclude-files) has been added. The options help to
|
||
filter which source files are instrumented.
|
||
* AddressSanitizer generates more compact redzones for automatic
|
||
variables. That helps to reduce memory footprint of a sanitized
|
||
binary.
|
||
* Numerous improvements have been made to the output of
|
||
[15]-fopt-info.
|
||
Messages are now prefixed with optimized, missed, or note, rather
|
||
than the old behavior of all being prefixed with note.
|
||
The output from -fopt-info can now contain information on inlining
|
||
decisions:
|
||
$ g++ -c inline.cc -O2 -fopt-info-inline-all
|
||
inline.cc:24:11: note: Considering inline candidate void foreach(T, T, void (*)(
|
||
E)) [with T = char**; E = char*]/2.
|
||
inline.cc:24:11: optimized: Inlining void foreach(T, T, void (*)(E)) [with T =
|
||
char**; E = char*]/2 into int main(int, char**)/1.
|
||
inline.cc:19:12: missed: not inlinable: void inline_me(char*)/0 -> int std::pu
|
||
ts(const char*)/3, function body not available
|
||
inline.cc:13:8: optimized: Inlined void inline_me(char*)/4 into int main(int, c
|
||
har**)/1 which now has time 127.363637 and size 11, net change of +0.
|
||
Unit growth for small function inlining: 16->16 (0%)
|
||
|
||
Inlined 2 calls, eliminated 1 functions
|
||
|
||
|
||
The output from the vectorizer has been rationalized so that failed
|
||
attempts to vectorize a loop are displayed in the form
|
||
[LOOP-LOCATION]: couldn't vectorize this loop
|
||
[PROBLEM-LOCATION]: because of [REASON]
|
||
|
||
rather than an exhaustive log of all decisions made by the
|
||
vectorizer. For example:
|
||
$ gcc -c v.c -O3 -fopt-info-all-vec
|
||
v.c:7:3: missed: couldn't vectorize loop
|
||
v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" : : : "me
|
||
mory");
|
||
v.c:3:6: note: vectorized 0 loops in function.
|
||
v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" : : : "me
|
||
mory");
|
||
|
||
The old behavior can be obtained via a new -internals suboption of
|
||
-fopt-info.
|
||
* A new option, [16]-fsave-optimization-record has been added, which
|
||
writes a SRCFILE.opt-record.json.gz file describing the
|
||
optimization decisions made by GCC. This is similar to the output
|
||
of -fopt-info, but with additional metadata such as the inlining
|
||
chain, and profile information (if available).
|
||
* Inter-procedural propagation of stack alignment can now be
|
||
controlled by [17]-fipa-stack-alignment.
|
||
* Propagation of addressability, readonly and writeonly flags on
|
||
static variables can now be controlled by
|
||
[18]-fipa-reference-addressable.
|
||
|
||
The following built-in functions have been introduced.
|
||
* [19]__builtin_expect_with_probability to provide branch prediction
|
||
probability hints to the optimizer.
|
||
* [20]__builtin_has_attribute determines whether a function, type, or
|
||
variable has been declared with some attribute.
|
||
* [21]__builtin_speculation_safe_value can be used to help mitigate
|
||
against unsafe speculative execution.
|
||
|
||
The following attributes have been introduced.
|
||
* The [22]copy function attribute has been added. The attribute can
|
||
also be applied to type definitions and to variable declarations.
|
||
|
||
A large number of improvements to code generation have been made,
|
||
including but not limited to the following.
|
||
* Switch expansion has been improved by using a different strategy
|
||
(jump table, bit test, decision tree) for a subset of switch cases.
|
||
* A linear function expression defined as a switch statement can be
|
||
transformed by [23]-ftree-switch-conversion. For example:
|
||
|
||
int
|
||
foo (int how)
|
||
{
|
||
switch (how) {
|
||
case 2: how = 205; break;
|
||
case 3: how = 305; break;
|
||
case 4: how = 405; break;
|
||
case 5: how = 505; break;
|
||
case 6: how = 605; break;
|
||
}
|
||
return how;
|
||
}
|
||
|
||
can be transformed into 100 * how + 5 (for values defined in the
|
||
switch statement).
|
||
* Inter-procedural optimization improvements:
|
||
+ Inliner defaults was tuned to better suits modern C++
|
||
codebases especially when built with link time optimizations.
|
||
New parameters max-inline-insns-small, max-inline-insns-size,
|
||
uninlined-function-insns, uninlined-function-time,
|
||
uninlined-thunk-insns, and uninlined-thunk-time were added.
|
||
+ Hot/cold partitioning is now more precise and aggressive.
|
||
+ Improved scalability for very large translation units
|
||
(especially when link-time optimizing large programs).
|
||
* Profile driven optimization improvements:
|
||
+ [24]-fprofile-use now enables [25]-fversion-loops-for-strides,
|
||
[26]-floop-interchange, [27]-floop-unroll-and-jam,
|
||
[28]-ftree-loop-distribution.
|
||
+ Streaming of counter histograms was removed. This reduces the
|
||
size of profile files. Histogram is computed on the fly with
|
||
link-time optimization. Parameter hot-bb-count-ws-permille was
|
||
reduced from 999 to 990 to account for more precise
|
||
histograms.
|
||
* Link-time optimization improvements:
|
||
+ Types are now simplified prior streaming resulting in
|
||
significant reductions of the LTO object files, link-time
|
||
memory use, and improvements of link-time parallelism.
|
||
+ Default number of partitions (--param lto-partitions) was
|
||
increased from 32 to 128 enabling effective use of CPUs with
|
||
more than 32 hyperthreads. --param
|
||
lto-max-streaming-parallelism can now be used to control
|
||
number of streaming processes.
|
||
+ Warnings on C++ One Decl Rule violations (-Wodr) are now more
|
||
informative and produce fewer redundant results.
|
||
Overal compile time of Firefox 66 and LibreOffice 6.2.3 on an 8
|
||
core machine was reduced by about 5% compared to GCC 8.3. Size of
|
||
LTO object files is reduced by 7%. LTO link-time improves by 11% on
|
||
8-core machine and scales significantly better for more parallel
|
||
build environments. Serial stage of the link-time optimization is
|
||
28% faster consuming 20% less memory. Parallel stage now partitions
|
||
to 128 partitions rather than 32 and reduces memory use for every
|
||
worker by 30%.
|
||
|
||
The following improvements to the gcov command-line utility have been
|
||
made.
|
||
* The gcov tool received a new option [29]--use-hotness-colors (-q)
|
||
that can provide perf-like coloring of hot functions.
|
||
* The gcov tool has changed its intermediate format to a new JSON
|
||
format.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
[30]OpenACC support in C, C++, and Fortran continues to be maintained
|
||
and improved. Most of the OpenACC 2.5 specification is implemented. See
|
||
the [31]implementation status section on the [32]OpenACC wiki page for
|
||
further information.
|
||
|
||
C family
|
||
|
||
* Version 5.0 of the [33]OpenMP specification is now partially
|
||
supported in the C and C++ compilers. For details which features of
|
||
OpenMP 5.0 are and which are not supported in the GCC 9 release see
|
||
[34]this mail.
|
||
* New extensions:
|
||
+ [35]__builtin_convertvector built-in for vector conversions
|
||
has been added.
|
||
* New warnings:
|
||
+ [36]-Waddress-of-packed-member, enabled by default, warns
|
||
about an unaligned pointer value from the address of a packed
|
||
member of a struct or union.
|
||
* Enhancements to existing warnings:
|
||
+ [37]-Warray-bounds detects more instances of out-of-bounds
|
||
indices.
|
||
+ [38]-Wattribute-alias also detects attribute mismatches
|
||
between alias declarations and their targets, in addition to
|
||
mismatches between their types.
|
||
+ [39]-Wformat-overflow and [40]-Wformat-truncation have been
|
||
extended to all formatted input/output functions (where
|
||
applicable) and enhanced to detect a subset of instances of
|
||
reading past the end of unterminated constant character arrays
|
||
in %s directives.
|
||
+ [41]-Wmissing-attributes detects instances of missing function
|
||
attributes on declarations of aliases and weak references.
|
||
+ [42]-Wstringop-truncation also detects a subset of instances
|
||
of reading past the end of unterminated constant character
|
||
arrays,
|
||
* If a macro is used with the wrong argument count, the C and C++
|
||
front ends now show the definition of that macro via a note.
|
||
* The spelling corrector now considers transposed letters, and the
|
||
threshold for similarity has been tightened, to avoid nonsensical
|
||
suggestions.
|
||
|
||
C
|
||
|
||
* There is now experimental support for -std=c2x, to select support
|
||
for the upcoming C2X revision of the ISO C standard. This standard
|
||
is in the early stages of development and the only feature
|
||
supported in GCC 9 is _Static_assert with a single argument
|
||
(support for _Static_assert with two arguments was added in C11 and
|
||
GCC 4.6). There are also new options -std=gnu2x, for C2X with GNU
|
||
extensions, and -Wc11-c2x-compat, to warn for uses of features
|
||
added in C2X (such warnings are also enabled by use of -Wpedantic
|
||
if not using -std=c2x or -std=gnu2x).
|
||
* New warnings:
|
||
+ [43]-Wabsolute-value warns for calls to standard functions
|
||
that compute the absolute value of an argument when a more
|
||
appropriate standard function is available. For example,
|
||
calling abs(3.14) triggers the warning because the appropriate
|
||
function to call to compute the absolute value of a double
|
||
argument is fabs. The option also triggers warnings when the
|
||
argument in a call to such a function has an unsigned type.
|
||
This warning can be suppressed with an explicit type cast and
|
||
it is also enabled by -Wextra.
|
||
|
||
C++
|
||
|
||
* New warnings:
|
||
+ [44]-Wdeprecated-copy, implied by -Wextra, warns about the
|
||
C++11 deprecation of implicitly declared copy constructor and
|
||
assignment operator if one of them is user-provided.
|
||
-Wdeprecated-copy-dtor also warns if the destructor is
|
||
user-provided, as specified in C++11.
|
||
+ [45]-Winit-list-lifetime, on by default, warns about uses of
|
||
std::initializer_list that are likely to result in a dangling
|
||
pointer, such as returning or assigning from a temporary list.
|
||
+ [46]-Wredundant-move, implied by -Wextra, warns about
|
||
redundant calls to std::move.
|
||
+ [47]-Wpessimizing-move, implied by -Wall, warns when a call to
|
||
std::move prevents copy elision.
|
||
+ [48]-Wclass-conversion, on by default, warns when a conversion
|
||
function will never be called due to the type it converts to.
|
||
* The C++ front end has experimental support for some of the upcoming
|
||
C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
|
||
including range-based for statements with initializer, default
|
||
constructible and assignable stateless lambdas, lambdas in
|
||
unevaluated contexts, language support for empty data members,
|
||
allowing pack expansion in lambda init-capture, likely and unlikely
|
||
attributes, class types in non-type template parameters, allowing
|
||
virtual function calls in constant expressions, explicit(bool),
|
||
std::is_constant_evaluated, nested inline namespaces, etc. For a
|
||
full list of new features, see [49]the C++ status page.
|
||
* The C++ front end now preserves source locations for literals,
|
||
id-expression, and mem-initializer for longer. For example it is
|
||
now able to pin-point the pertinent locations for bad
|
||
initializations such as these
|
||
$ g++ -c bad-inits.cc
|
||
bad-inits.cc:10:14: error: cannot convert 'json' to 'int' in initialization
|
||
10 | { 3, json::object },
|
||
| ~~~~~~^~~~~~
|
||
| |
|
||
| json
|
||
bad-inits.cc:14:31: error: initializer-string for array of chars is too long [-f
|
||
permissive]
|
||
14 | char buffers[3][5] = { "red", "green", "blue" };
|
||
| ^~~~~~~
|
||
bad-inits.cc: In constructor 'X::X()':
|
||
bad-inits.cc:17:13: error: invalid conversion from 'int' to 'void*' [-fpermissiv
|
||
e]
|
||
17 | X() : one(42), two(42), three(42)
|
||
| ^~
|
||
| |
|
||
| int
|
||
|
||
rather than emitting the error at the final closing parenthesis or
|
||
brace.
|
||
* Error-reporting of overload resolution has been special-cased to
|
||
make the case of a single failed candidate easier to read. For
|
||
example:
|
||
$ g++ param-type-mismatch.cc
|
||
param-type-mismatch.cc: In function 'int test(int, const char*, float)':
|
||
param-type-mismatch.cc:8:32: error: cannot convert 'const char*' to 'const char*
|
||
*'
|
||
8 | return foo::member_1 (first, second, third);
|
||
| ^~~~~~
|
||
| |
|
||
| const char*
|
||
param-type-mismatch.cc:3:46: note: initializing argument 2 of 'static int foo:
|
||
:member_1(int, const char**, float)'
|
||
3 | static int member_1 (int one, const char **two, float three);
|
||
| ~~~~~~~~~~~~~^~~
|
||
|
||
highlights both the problematic argument, and the parameter that it
|
||
can't be converted to.
|
||
* Diagnostics involving binary operators now use color to distinguish
|
||
the two operands, and label them separately (as per the example of
|
||
source labelling above).
|
||
* Diagnostics involving function calls now highlight the pertinent
|
||
parameter of the declaration in more places.
|
||
$ g++ bad-conversion.cc
|
||
bad-conversion.cc: In function 'void caller()':
|
||
bad-conversion.cc:9:14: error: cannot convert 'bool' to 'void*'
|
||
9 | callee (0, false, 2);
|
||
| ^~~~~
|
||
| |
|
||
| bool
|
||
bad-conversion.cc:3:19: note: initializing argument 2 of 'void callee(int, voi
|
||
d*, int)'
|
||
3 | void callee (int, void *, int)
|
||
| ^~~~~~
|
||
|
||
* The C++ front end's implementation of [50]-Wformat now shows
|
||
precise locations within string literals, and underlines the
|
||
pertinent arguments at bogus call sites (the C front end has been
|
||
doing this since GCC 7). For example:
|
||
$ g++ -c bad-printf.cc -Wall
|
||
bad-printf.cc: In function 'void print_field(const char*, float, long int, long
|
||
int)':
|
||
bad-printf.cc:6:17: warning: field width specifier '*' expects argument of type
|
||
'int', but argument 3 has type 'long int' [-Wformat=]
|
||
6 | printf ("%s: %*ld ", fieldname, column - width, value);
|
||
| ~^~~ ~~~~~~~~~~~~~~
|
||
| | |
|
||
| int long int
|
||
bad-printf.cc:6:19: warning: format '%ld' expects argument of type 'long int', b
|
||
ut argument 4 has type 'double' [-Wformat=]
|
||
6 | printf ("%s: %*ld ", fieldname, column - width, value);
|
||
| ~~~^ ~~~~~
|
||
| | |
|
||
| long int double
|
||
| %*f
|
||
|
||
* The C++ front end has gained new fix-it hints for forgetting the
|
||
return *this; needed by various C++ operators:
|
||
$ g++ -c operator.cc
|
||
operator.cc: In member function 'boxed_ptr& boxed_ptr::operator=(const boxed_ptr
|
||
&)':
|
||
operator.cc:7:3: warning: no return statement in function returning non-void [-W
|
||
return-type]
|
||
6 | m_ptr = other.m_ptr;
|
||
+++ |+ return *this;
|
||
7 | }
|
||
| ^
|
||
|
||
for when the compiler needs a typename:
|
||
$ g++ -c template.cc
|
||
template.cc:3:3: error: need 'typename' before 'Traits::type' because 'Traits' i
|
||
s a dependent scope
|
||
3 | Traits::type type;
|
||
| ^~~~~~
|
||
| typename
|
||
|
||
when trying to use an accessor member as if it were a data member:
|
||
$ g++ -c fncall.cc
|
||
fncall.cc: In function 'void hangman(const mystring&)':
|
||
fncall.cc:12:11: error: invalid use of member function 'int mystring::get_length
|
||
() const' (did you forget the '()' ?)
|
||
12 | if (str.get_length > 0)
|
||
| ~~~~^~~~~~~~~~
|
||
| ()
|
||
|
||
for C++11's scoped enums:
|
||
$ g++ -c enums.cc
|
||
enums.cc: In function 'void json::test(const json::value&)':
|
||
enums.cc:12:26: error: 'STRING' was not declared in this scope; did you mean 'js
|
||
on::kind::STRING'?
|
||
12 | if (v.get_kind () == STRING)
|
||
| ^~~~~~
|
||
| json::kind::STRING
|
||
enums.cc:3:44: note: 'json::kind::STRING' declared here
|
||
3 | enum class kind { OBJECT, ARRAY, NUMBER, STRING, TRUE, FALSE, NULL_ };
|
||
| ^~~~~~
|
||
|
||
and a tweak to integrate the suggestions about misspelled members
|
||
with that for accessors:
|
||
$ g++ -c accessor-fixit.cc
|
||
accessor-fixit.cc: In function 'int test(t*)':
|
||
accessor-fixit.cc:17:15: error: 'class t' has no member named 'ratio'; did you m
|
||
ean 'int t::m_ratio'? (accessible via 'int t::get_ratio() const')
|
||
17 | return ptr->ratio;
|
||
| ^~~~~
|
||
| get_ratio()
|
||
|
||
In addition, various diagnostics in the C++ front-end have been
|
||
streamlined by consolidating the suggestion into the initial error,
|
||
rather than emitting a follow-up note:
|
||
$ g++ typo.cc
|
||
typo.cc:5:13: error: 'BUFSIZE' was not declared in this scope; did you mean 'BUF
|
||
_SIZE'?
|
||
5 | uint8_t buf[BUFSIZE];
|
||
| ^~~~~~~
|
||
| BUF_SIZE
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Improved experimental support for C++17, including:
|
||
+ Parallel algorithms and <execution> (requires TBB 2018 or
|
||
newer).
|
||
+ <memory_resource>.
|
||
* Improved experimental support for C++2a, including:
|
||
+ Type traits std::remove_cvref, std::unwrap_reference,
|
||
std::unwrap_decay_ref, std::is_nothrow_convertible, and
|
||
std::type_identity.
|
||
+ Headers <bit> and <version>.
|
||
+ Uniform container erasure (std::erase_if).
|
||
+ contains member of maps and sets.
|
||
+ String prefix and suffix checking (starts_with, ends_with).
|
||
+ Functions std::midpoint and std::lerp for interpolation.
|
||
+ std::bind_front.
|
||
+ std::visit<R>.
|
||
+ std::assume_aligned.
|
||
+ Uses-allocator construction utilities.
|
||
+ std::pmr::polymorphic_allocator<std::byte>.
|
||
+ Library support for char8_t type.
|
||
+ Destroying delete.
|
||
+ std::is_constant_evaluated() function.
|
||
* Support for opening file streams with wide character paths on
|
||
Windows
|
||
* Incomplete support for the C++17 Filesystem library and the
|
||
Filesystem TS on Windows.
|
||
* Incomplete, experimental support for the Networking TS.
|
||
|
||
D
|
||
|
||
* Support for the D programming language has been added to GCC,
|
||
implementing version 2.076 of the language and run-time library.
|
||
|
||
Fortran
|
||
|
||
* Asynchronous I/O is now fully supported. The program needs to be
|
||
linked against the pthreads library to use it, otherwise the I/O is
|
||
done synchronously. For systems which do not support POSIX
|
||
condition variables, such as AIX, all I/O is still done
|
||
synchronously.
|
||
* The BACK argument for MINLOC and MAXLOC has been implemented.
|
||
* The FINDLOC intrinsic function has been implemented.
|
||
* The IS_CONTIGUOUS intrinsic function has been implemented.
|
||
* Direct access to the real and imaginary parts of a complex variable
|
||
via c%re and c%im has been implemented.
|
||
* Type parameter inquiry via str%len and a%kind has been implemented.
|
||
* C descriptors and the ISO_Fortran_binding.h source file have been
|
||
implemented.
|
||
* The MAX and MIN intrinsics are no longer guaranteed to return any
|
||
particular value in case one of the arguments is a NaN. Note that
|
||
this conforms to the Fortran standard and to what other Fortran
|
||
compilers do. If there is a need to handle that case in some
|
||
specific way, one needs to explicitly check for NaN's before
|
||
calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
|
||
intrinsic module IEEE_ARITHMETIC.
|
||
* A new command-line option [51]-fdec-include, set also by [52]-fdec
|
||
option, has been added for an extension for compatibility with
|
||
legacy code. With this option, INCLUDE directive is parsed also as
|
||
a statement, which allows the directive to be written on multiple
|
||
source lines with line continuations.
|
||
* A new [53]BUILTIN directive, has been added. The purpose of the
|
||
directive is to provide an API between the GCC compiler and the GNU
|
||
C Library which would define vector implementations of math
|
||
routines.
|
||
|
||
libgccjit
|
||
|
||
* The libgccjit API gained a new entry point:
|
||
[54]gcc_jit_context_add_driver_option.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64 & Arm
|
||
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses):
|
||
+ Arm Cortex-A76 (cortex-a76).
|
||
+ Arm Cortex-A55/Cortex-A76 DynamIQ big.LITTLE
|
||
(cortex-a76.cortex-a55).
|
||
+ Arm Neoverse N1 (neoverse-n1).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a76 or
|
||
-mtune=cortex-a76.cortex-a55 or as arguments to the equivalent
|
||
target attributes and pragmas.
|
||
* The Armv8.3-A complex number instructions are now supported via
|
||
intrinsics when the option -march=armv8.3-a or equivalent is
|
||
specified. For the half-precision floating-point variants of these
|
||
instructions use the architecture extension flag +fp16, e.g.
|
||
-march=armv8.3-a+fp16.
|
||
The intrinsics are defined by the ACLE specification.
|
||
* The Armv8.5-A architecture is now supported through the
|
||
-march=armv8.5-a option.
|
||
* The Armv8.5-A architecture also adds some security features that
|
||
are optional to all older architecture versions. These are now
|
||
supported and only affect the assembler.
|
||
+ Speculation Barrier instruction through the -march=armv8-a+sb
|
||
option.
|
||
+ Execution and Data Prediction Restriction instructions through
|
||
the -march=armv8-a+predres option.
|
||
+ Speculative Store Bypass Safe instruction through the
|
||
-march=armv8-a+ssbs option. This does not require a compiler
|
||
option for Arm and thus -march=armv8-a+ssbs is an
|
||
AArch64-specific option.
|
||
|
||
AArch64 specific
|
||
|
||
* Support has been added for the Arm Neoverse E1 processor
|
||
(-mcpu=neoverse-e1).
|
||
* The AArch64 port now has support for stack clash protection using
|
||
the [55]-fstack-clash-protection option. The probing interval/guard
|
||
size can be set by using --param
|
||
stack-clash-protection-guard-size=12|16. The value of this
|
||
parameter must be in bytes represented as a power of two. The two
|
||
supported values for this parameter are 12 (for a 4KiB size, 2^12)
|
||
and 16 (for a 64KiB size, 2^16). The default value is 16 (64Kb) and
|
||
can be changed at configure time using the flag
|
||
--with-stack-clash-protection-guard-size=12|16.
|
||
* The option -msign-return-address= has been deprecated. This has
|
||
been replaced by the new -mbranch-protection= option. This new
|
||
option can now be used to enable the return address signing as well
|
||
as the new Branch Target Identification feature of Armv8.5-A
|
||
architecture. For more information on the arguments accepted by
|
||
this option, please refer to [56]AArch64-Options.
|
||
* The following optional extensions to Armv8.5-A architecture are now
|
||
supported and only affect the assembler.
|
||
+ Random Number Generation instructions through the
|
||
-march=armv8.5-a+rng option.
|
||
+ Memory Tagging Extension through the -march=armv8.5-a+memtag
|
||
option.
|
||
|
||
Arm specific
|
||
|
||
* Support for the deprecated Armv2 and Armv3 architectures and their
|
||
variants has been removed. Their corresponding -march values and
|
||
the -mcpu options that used these architectures have been removed.
|
||
* Support for the Armv5 and Armv5E architectures (which have no known
|
||
implementations) has been removed. Note that Armv5T, Armv5TE and
|
||
Armv5TEJ architectures remain supported.
|
||
* Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
|
||
their respective -mcpu options.
|
||
|
||
AMD GCN
|
||
|
||
* A new back end targeting AMD GCN GPUs has been contributed to GCC.
|
||
The implementation is currently limited to compiling
|
||
single-threaded, stand-alone programs. Future versions will add
|
||
support for offloading multi-threaded kernels via OpenMP and
|
||
OpenACC. The following devices are supported (GCC identifiers in
|
||
parentheses):
|
||
+ Fiji (fiji).
|
||
+ Vega 10 (gfx900).
|
||
|
||
ARC
|
||
|
||
* LRA is now on by default for the ARC target. This can be controlled
|
||
by -mlra.
|
||
* Add support for frame code-density and branch-and-index
|
||
instructions.
|
||
|
||
C-SKY
|
||
|
||
* A new back end targeting C-SKY V2 processors has been contributed
|
||
to GCC.
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support of Intel MPX (Memory Protection Extensions) has been
|
||
removed.
|
||
|
||
OpenRISC
|
||
|
||
* A new back end targeting OpenRISC processors has been contributed
|
||
to GCC.
|
||
|
||
Operating Systems
|
||
|
||
Windows
|
||
|
||
* A C++ Microsoft ABI bitfield layout bug, [57]PR87137 has been
|
||
fixed. A non-field declaration could cause the current bitfield
|
||
allocation unit to be completed, incorrectly placing a following
|
||
bitfield into a new allocation unit. The Microsoft ABI is selected
|
||
for:
|
||
+ Mingw targets
|
||
+ PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
|
||
option is specified, or __attribute__((ms_struct)) is used
|
||
+ SuperH targets when the -mhitachi option is specified, or
|
||
__attribute__((renesas)) is used
|
||
|
||
Improvements for plugin authors
|
||
|
||
* GCC's diagnostic subsystem now has a way to logically group
|
||
together related diagnostics, auto_diagnostic_group. Such
|
||
diagnostics will be nested by the output of
|
||
[58]-fdiagnostics-format=json.
|
||
* GCC now has a set of [59]user experience guidelines for GCC, with
|
||
information and advice on implementing new diagnostics.
|
||
|
||
Other significant improvements
|
||
|
||
* GCC's internal "selftest" suite now runs for C++ as well as C (in
|
||
debug builds of the compiler).
|
||
|
||
GCC 9.1
|
||
|
||
This is the [60]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 9.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [61]GCC manuals. If that fails, the
|
||
[62]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [63]gcc@gcc.gnu.org. All of [64]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [65]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [66]maintained by the GCC team. Last modified
|
||
2019-05-03[67].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
|
||
2. https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html
|
||
3. https://gcc.gnu.org/ml/gcc/2019-04/msg00023.html
|
||
4. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
|
||
5. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
|
||
6. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
|
||
7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
|
||
8. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
|
||
9. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
|
||
10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
|
||
11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
|
||
12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
|
||
13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
|
||
16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
|
||
17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
|
||
21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
|
||
23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
|
||
24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
|
||
25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
|
||
26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
|
||
27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
|
||
28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
|
||
29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
|
||
30. https://www.openacc.org/
|
||
31. https://gcc.gnu.org/wiki/OpenACC#status-9
|
||
32. https://gcc.gnu.org/wiki/OpenACC
|
||
33. https://www.openmp.org/specifications/
|
||
34. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
|
||
35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
|
||
36. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
|
||
37. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
|
||
38. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
|
||
39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
|
||
40. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
|
||
41. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
|
||
42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
|
||
43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
|
||
44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
|
||
45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
|
||
46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
|
||
47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
|
||
48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
|
||
49. http://gcc.gnu.org/projects/cxx-status.html#cxx2a
|
||
50. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
|
||
51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
|
||
52. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
|
||
53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
|
||
54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
|
||
55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
|
||
56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
|
||
57. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
|
||
58. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
|
||
59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
|
||
60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
|
||
61. https://gcc.gnu.org/onlinedocs/
|
||
62. mailto:gcc-help@gcc.gnu.org
|
||
63. mailto:gcc@gcc.gnu.org
|
||
64. https://gcc.gnu.org/lists.html
|
||
65. https://www.fsf.org/
|
||
66. https://gcc.gnu.org/about.html
|
||
67. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-8/index.html
|
||
GCC 8 Release Series
|
||
|
||
Feb 22, 2019
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 8.3.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 8.2 relative to previous releases of GCC.
|
||
|
||
Release History
|
||
|
||
GCC 8.3
|
||
Feb 22, 2019 ([2]changes, [3]documentation)
|
||
|
||
GCC 8.2
|
||
Jul 14, 2018 ([4]changes, [5]documentation)
|
||
|
||
GCC 8.1
|
||
May 2, 2018 ([6]changes, [7]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [8]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [9]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [10]GCC
|
||
project web site or contact the [11]GCC development mailing list.
|
||
|
||
To obtain GCC please use [12]our mirror sites or [13]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [14]GCC manuals. If that fails, the
|
||
[15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [19]maintained by the GCC team. Last modified
|
||
2019-02-22[20].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-8/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/8.3.0/
|
||
4. http://gcc.gnu.org/gcc-8/changes.html
|
||
5. http://gcc.gnu.org/onlinedocs/8.2.0/
|
||
6. http://gcc.gnu.org/gcc-8/changes.html
|
||
7. http://gcc.gnu.org/onlinedocs/8.1.0/
|
||
8. http://gcc.gnu.org/gcc-8/buildstat.html
|
||
9. http://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
|
||
10. http://gcc.gnu.org/index.html
|
||
11. mailto:gcc@gcc.gnu.org
|
||
12. http://gcc.gnu.org/mirrors.html
|
||
13. http://gcc.gnu.org/svn.html
|
||
14. https://gcc.gnu.org/onlinedocs/
|
||
15. mailto:gcc-help@gcc.gnu.org
|
||
16. mailto:gcc@gcc.gnu.org
|
||
17. https://gcc.gnu.org/lists.html
|
||
18. https://www.fsf.org/
|
||
19. https://gcc.gnu.org/about.html
|
||
20. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-8/changes.html
|
||
GCC 8 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
This page is a "brief" summary of some of the huge number of
|
||
improvements in GCC 8. You may also want to check out our [1]Porting to
|
||
GCC 8 page and the [2]full GCC documentation.
|
||
|
||
Caveats
|
||
|
||
* Support for the obsolete SDB/coff debug info format has been
|
||
removed. The option -gcoff no longer does anything.
|
||
* The Cilk+ extensions to the C and C++ languages have been removed.
|
||
* The MPX extensions to the C and C++ languages have been deprecated
|
||
and will be removed in a future release.
|
||
* The extension allowing arithmetic on std::atomic<void*> and types
|
||
like std::atomic<R(*)()> has been deprecated.
|
||
* The non-standard C++0x std::copy_exception function was removed.
|
||
std::make_exception_ptr should be used instead.
|
||
* Support for the powerpc*-*-*spe* target ports which have been
|
||
recently unmaintained and untested in GCC has been declared
|
||
obsolete in GCC 8 as announced [3]here. Unless there is activity to
|
||
revive them, the next release of GCC will have their sources
|
||
permanently removed.
|
||
|
||
General Improvements
|
||
|
||
* Inter-procedural optimization improvements:
|
||
+ Reworked run-time estimation metrics leading to more realistic
|
||
guesses driving inliner and cloning heuristics.
|
||
+ The ipa-pure-const pass is extended to propagate the malloc
|
||
attribute, and the corresponding warning option
|
||
-Wsuggest-attribute=malloc emits a diagnostic for functions
|
||
which can be annotated with the malloc attribute.
|
||
* Profile driven optimization improvements:
|
||
+ New infrastructure for representing profiles (both statically
|
||
guessed and profile feedback) which allows propagation of
|
||
additional information about the reliability of the profile.
|
||
+ A number of improvements in the profile updating code solving
|
||
problems found by new verification code.
|
||
+ Static detection of code which is not executed in a valid run
|
||
of the program. This includes paths which trigger undefined
|
||
behavior as well as calls to functions declared with the cold
|
||
attribute. Newly the noreturn attribute does not imply all
|
||
effects of cold to differentiate between exit (which is
|
||
noreturn) and abort (which is in addition not executed in
|
||
valid runs).
|
||
+ -freorder-blocks-and-partition, a pass splitting function
|
||
bodies into hot and cold regions, is now enabled by default at
|
||
-O2 and higher for x86 and x86-64.
|
||
* Link-time optimization improvements:
|
||
+ We have significantly improved debug information on ELF
|
||
targets using DWARF by properly preserving language-specific
|
||
information. This allows for example the libstdc++
|
||
pretty-printers to work with LTO optimized executables.
|
||
* A new option -fcf-protection=[full|branch|return|none] is
|
||
introduced to perform code instrumentation to increase program
|
||
security by checking that target addresses of control-flow transfer
|
||
instructions (such as indirect function call, function return,
|
||
indirect jump) are valid. Currently the instrumentation is
|
||
supported on x86 GNU/Linux targets only. See the user guide for
|
||
further information about the option syntax and section "New
|
||
Targets and Target Specific Improvements" for IA-32/x86-64 for more
|
||
details.
|
||
* The -gcolumn-info option is now enabled by default. It includes
|
||
column information in addition to just filenames and line numbers
|
||
in DWARF debugging information.
|
||
* The polyhedral-based loop nest optimization pass
|
||
-floop-nest-optimize has been overhauled. It's still considered
|
||
experimental and may not result in any runtime improvements.
|
||
* Two new classical loop nest optimization passes have been added.
|
||
-floop-unroll-and-jam performs outer loop unrolling and fusing of
|
||
the inner loop copies. -floop-interchange exchanges loops in a loop
|
||
nest to improve data locality. Both passes are enabled by default
|
||
at -O3 and above.
|
||
* The classic loop nest optimization pass -ftree-loop-distribution
|
||
has been improved and enabled by default at -O3 and above. It
|
||
supports loop nest distribution in some restricted scenarios; it
|
||
also supports cancellable innermost loop distribution with loop
|
||
versioning under run-time alias checks.
|
||
* The new option -fstack-clash-protection causes the compiler to
|
||
insert probes whenever stack space is allocated statically or
|
||
dynamically to reliably detect stack overflows and thus mitigate
|
||
the attack vector that relies on jumping over a stack guard page as
|
||
provided by the operating system.
|
||
* A new pragma GCC unroll has been implemented in the C family of
|
||
languages, as well as Fortran and Ada, so as to make it possible
|
||
for the user to have a finer-grained control over the loop
|
||
unrolling optimization.
|
||
* GCC has been enhanced to detect more instances of meaningless or
|
||
mutually exclusive attribute specifications and handle such
|
||
conflicts more consistently. Mutually exclusive attribute
|
||
specifications are ignored with a warning regardless of whether
|
||
they appear on the same declaration or on distinct declarations of
|
||
the same entity. For example, because the noreturn attribute on the
|
||
second declaration below is mutually exclusive with the malloc
|
||
attribute on the first, it is ignored and a warning is issued.
|
||
>
|
||
void* __attribute__ ((malloc)) f (unsigned);
|
||
void* __attribute__ ((noreturn)) f (unsigned);
|
||
|
||
warning: ignoring attribute 'noreturn' because it conflicts with attribute
|
||
'malloc' [-Wattributes]
|
||
* The gcov tool can distinguish functions that begin on a same line
|
||
in a source file. This can be a different template instantiation or
|
||
a class constructor:
|
||
|
||
File 'ins.C'
|
||
Lines executed:100.00% of 8
|
||
Creating 'ins.C.gcov'
|
||
|
||
-: 0:Source:ins.C
|
||
-: 0:Graph:ins.gcno
|
||
-: 0:Data:ins.gcda
|
||
-: 0:Runs:1
|
||
-: 0:Programs:1
|
||
-: 1:template<class T>
|
||
-: 2:class Foo
|
||
-: 3:{
|
||
-: 4: public:
|
||
2: 5: Foo(): b (1000) {}
|
||
------------------
|
||
Foo<char>::Foo():
|
||
1: 5: Foo(): b (1000) {}
|
||
------------------
|
||
Foo<int>::Foo():
|
||
1: 5: Foo(): b (1000) {}
|
||
------------------
|
||
2: 6: void inc () { b++; }
|
||
------------------
|
||
Foo<char>::inc():
|
||
1: 6: void inc () { b++; }
|
||
------------------
|
||
Foo<int>::inc():
|
||
1: 6: void inc () { b++; }
|
||
------------------
|
||
-: 7:
|
||
-: 8: private:
|
||
-: 9: int b;
|
||
-: 10:};
|
||
-: 11:
|
||
1: 12:int main(int argc, char **argv)
|
||
-: 13:{
|
||
1: 14: Foo<int> a;
|
||
1: 15: Foo<char> b;
|
||
-: 16:
|
||
1: 17: a.inc ();
|
||
1: 18: b.inc ();
|
||
1: 19:}
|
||
|
||
* The gcov tool has more accurate numbers for execution of lines in a
|
||
source file.
|
||
* The gcov tool can use TERM colors to provide more readable output.
|
||
* AddressSanitizer gained a new pair of sanitization options,
|
||
-fsanitize=pointer-compare and -fsanitize=pointer-subtract, which
|
||
warn about subtraction (or comparison) of pointers that point to a
|
||
different memory object:
|
||
|
||
int
|
||
main ()
|
||
{
|
||
/* Heap allocated memory. */
|
||
char *heap1 = (char *)__builtin_malloc (42);
|
||
char *heap2 = (char *)__builtin_malloc (42);
|
||
if (heap1 > heap2)
|
||
return 1;
|
||
|
||
return 0;
|
||
}
|
||
|
||
==17465==ERROR: AddressSanitizer: invalid-pointer-pair: 0x604000000010 0x6040000
|
||
00050
|
||
#0 0x40070f in main /tmp/pointer-compare.c:7
|
||
#1 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
|
||
#2 0x400629 in _start (/tmp/a.out+0x400629)
|
||
|
||
0x604000000010 is located 0 bytes inside of 42-byte region [0x604000000010,0x604
|
||
00000003a)
|
||
allocated by thread T0 here:
|
||
#0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
|
||
_malloc_linux.cc:86
|
||
#1 0x4006ea in main /tmp/pointer-compare.c:5
|
||
#2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
|
||
|
||
0x604000000050 is located 0 bytes inside of 42-byte region [0x604000000050,0x604
|
||
00000007a)
|
||
allocated by thread T0 here:
|
||
#0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
|
||
_malloc_linux.cc:86
|
||
#1 0x4006f8 in main /tmp/pointer-compare.c:6
|
||
#2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
|
||
|
||
SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-compare.c:7 in main
|
||
|
||
* The store merging pass has been enhanced to handle bit-fields and
|
||
not just constant stores, but also data copying from adjacent
|
||
memory locations into other adjacent memory locations, including
|
||
bitwise logical operations on the data. The pass can also handle
|
||
byte swapping into memory locations.
|
||
* The undefined behavior sanitizer gained two new options included in
|
||
-fsanitize=undefined: -fsanitize=builtin which diagnoses at run
|
||
time invalid arguments to __builtin_clz or __builtin_ctz prefixed
|
||
builtins, and -fsanitize=pointer-overflow which performs cheap run
|
||
time tests for pointer wrapping.
|
||
* A new attribute no_sanitize can be applied to functions to instruct
|
||
the compiler not to do sanitization of the options provided as
|
||
arguments to the attribute. Acceptable values for no_sanitize match
|
||
those acceptable by the -fsanitize command-line option.
|
||
|
||
void __attribute__ ((no_sanitize ("alignment", "object-size")))
|
||
f () { /* Do something. */; }
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
Ada
|
||
|
||
* For its internal exception handling used on the host for error
|
||
recovery in the front-end, the compiler now relies on the native
|
||
exception handling mechanism of the host platform, which should be
|
||
more efficient than the former mechanism.
|
||
|
||
BRIG (HSAIL)
|
||
|
||
In this release cycle, the focus for the BRIGFE was on stabilization
|
||
and performance improvements. Also a couple of completely new features
|
||
were added.
|
||
* Improved support for function and module scope group segment
|
||
variables. PRM specs define function and module scope group segment
|
||
variables as an experimental feature. However, PRM test suite uses
|
||
them. Now group segment is handled by separate book keeping of
|
||
module scope and function (kernel) offsets. Each function has a
|
||
"frame" in the group segment offset to which is given as an
|
||
argument, similar to traditional call stack frame handling.
|
||
* Reduce the number of type conversions due to the untyped HSAIL
|
||
registers. Instead of always representing the HSAIL's untyped
|
||
registers as unsigned int, the gccbrig now pre-analyzes the BRIG
|
||
code and builds the register variables as a type used the most when
|
||
storing or reading data to/from each register. This reduces the
|
||
number of total casts which cannot be always optimized away.
|
||
* Support for BRIG_KIND_NONE directives.
|
||
* Made -O3 the default optimization level for BRIGFE.
|
||
* Fixed illegal addresses generated from address expressions which
|
||
refer only to offset 0.
|
||
* Fixed a bug with reg+offset addressing on 32b segments. In 'large'
|
||
mode, the offset is treated as 32bits unless it's in global,
|
||
read-only or kernarg address space.
|
||
* Fixed a crash caused sometimes by calls with more than 4 arguments.
|
||
* Fixed a mis-execution issue with kernels that have both unexpanded
|
||
ID functions and calls to subfunctions.
|
||
* Treat HSAIL barrier builtins as setjmp/longjump style functions to
|
||
avoid illegal optimizations.
|
||
* Ensure per WI copies of private variables are aligned correctly.
|
||
* libhsail-rt: Assume the host runtime allocates the work group
|
||
memory.
|
||
|
||
C family
|
||
|
||
* New command-line options have been added for the C and C++
|
||
compilers:
|
||
+ [4]-Wmultistatement-macros warns about unsafe macros expanding
|
||
to multiple statements used as a body of a statement such as
|
||
if, else, while, switch, or for.
|
||
+ [5]-Wstringop-truncation warns for calls to bounded string
|
||
manipulation functions such as strncat, strncpy, and stpncpy
|
||
that might either truncate the copied string or leave the
|
||
destination unchanged. For example, the following call to
|
||
strncat is diagnosed because it appends just three of the four
|
||
characters from the source string.
|
||
void append (char *buf, size_t bufsize)
|
||
{
|
||
strncat (buf, ".txt", 3);
|
||
}
|
||
warning: 'strncat' output truncated copying 3 bytes from a string of length 4 [-
|
||
Wstringop-truncation]
|
||
Similarly, in the following example, the call to strncpy
|
||
specifies the size of the destination buffer as the bound. If
|
||
the length of the source string is equal to or greater than
|
||
this size the result of the copy will not be NUL-terminated.
|
||
Therefore, the call is also diagnosed. To avoid the warning,
|
||
specify sizeof buf - 1 as the bound and set the last element
|
||
of the buffer to NUL.
|
||
void copy (const char *s)
|
||
{
|
||
char buf[80];
|
||
strncpy (buf, s, sizeof buf);
|
||
…
|
||
}
|
||
warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
|
||
tion]
|
||
The -Wstringop-truncation option is included in -Wall.
|
||
Note that due to GCC bug [6]82944, defining strncat, strncpy,
|
||
or stpncpy as a macro in a system header as some
|
||
implementations do, suppresses the warning.
|
||
+ [7]-Wif-not-aligned controls warnings issued in response to
|
||
invalid uses of objects declared with attribute
|
||
[8]warn_if_not_aligned.
|
||
The -Wif-not-aligned option is included in -Wall.
|
||
+ [9]-Wmissing-attributes warns when a declaration of a function
|
||
is missing one or more attributes that a related function is
|
||
declared with and whose absence may adversely affect the
|
||
correctness or efficiency of generated code. For example, in
|
||
C++, the warning is issued when an explicit specialization of
|
||
a primary template declared with attribute alloc_align,
|
||
alloc_size, assume_aligned, format, format_arg, malloc, or
|
||
nonnull is declared without it. Attributes deprecated, error,
|
||
and warning suppress the warning.
|
||
The -Wmissing-attributes option is included in -Wall.
|
||
+ [10]-Wpacked-not-aligned warns when a struct or union declared
|
||
with attribute packed defines a member with an explicitly
|
||
specified alignment greater than 1. Such a member will wind up
|
||
under-aligned. For example, a warning will be issued for the
|
||
definition of struct A in the following:
|
||
struct __attribute__ ((aligned (8)))
|
||
S8 { char a[8]; };
|
||
|
||
struct __attribute__ ((packed)) A
|
||
{
|
||
struct S8 s8;
|
||
};
|
||
warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-not-aligned]
|
||
The -Wpacked-not-aligned option is included in -Wall.
|
||
+ -Wcast-function-type warns when a function pointer is cast to
|
||
an incompatible function pointer. This warning is enabled by
|
||
-Wextra.
|
||
+ -Wsizeof-pointer-div warns for suspicious divisions of the
|
||
size of a pointer by the size of the elements it points to,
|
||
which looks like the usual way to compute the array size but
|
||
won't work out correctly with pointers. This warning is
|
||
enabled by -Wall.
|
||
+ -Wcast-align=strict warns whenever a pointer is cast such that
|
||
the required alignment of the target is increased. For
|
||
example, warn if a char * is cast to an int * regardless of
|
||
the target machine.
|
||
+ -fprofile-abs-path creates absolute path names in the .gcno
|
||
files. This allows gcov to find the correct sources in
|
||
projects where compilations occur with different working
|
||
directories.
|
||
* -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and
|
||
signed integer overflow is now undefined by default at all
|
||
optimization levels. Using -fsanitize=signed-integer-overflow is
|
||
now the preferred way to audit code, -Wstrict-overflow is
|
||
deprecated.
|
||
* The [11]-Warray-bounds option has been improved to detect more
|
||
instances of out-of-bounds array indices and pointer offsets. For
|
||
example, negative or excessive indices into flexible array members
|
||
and string literals are detected.
|
||
* The [12]-Wrestrict option introduced in GCC 7 has been enhanced to
|
||
detect many more instances of overlapping accesses to objects via
|
||
restrict-qualified arguments to standard memory and string
|
||
manipulation functions such as memcpy and strcpy. For example, the
|
||
strcpy call in the function below attempts to truncate the string
|
||
by replacing its initial characters with the last four. However,
|
||
because the function writes the terminating NUL into a[4], the
|
||
copies overlap and the call is diagnosed.
|
||
void f (void)
|
||
{
|
||
char a[] = "abcd1234";
|
||
strcpy (a, a + 4);
|
||
…
|
||
}
|
||
warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
|
||
4 [-Wrestrict]
|
||
The -Wrestrict option is included in -Wall.
|
||
* Several optimizer enhancements have enabled improvements to the
|
||
[13]-Wformat-overflow and [14]-Wformat-truncation options. The
|
||
warnings detect more instances of buffer overflow and truncation
|
||
than in GCC 7 and are better at avoiding certain kinds of false
|
||
positives.
|
||
* When reporting mismatching argument types at a function call, the C
|
||
and C++ compilers now underline both the argument and the pertinent
|
||
parameter in the declaration.
|
||
$ gcc arg-type-mismatch.cc
|
||
arg-type-mismatch.cc: In function 'int caller(int, int, float)':
|
||
arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' to 'const char*'
|
||
[-fpermissive]
|
||
return callee(first, second, third);
|
||
^~~~~~
|
||
arg-type-mismatch.cc:1:40: note: initializing argument 2 of 'int callee(int, c
|
||
onst char*, float)'
|
||
extern int callee(int one, const char *two, float three);
|
||
~~~~~~~~~~~~^~~
|
||
|
||
* When reporting on unrecognized identifiers, the C and C++ compilers
|
||
will now emit fix-it hints suggesting #include directives for
|
||
various headers in the C and C++ standard libraries.
|
||
$ gcc incomplete.c
|
||
incomplete.c: In function 'test':
|
||
incomplete.c:3:10: error: 'NULL' undeclared (first use in this function)
|
||
return NULL;
|
||
^~~~
|
||
incomplete.c:3:10: note: 'NULL' is defined in header '<stddef.h>'; did you forge
|
||
t to '#include <stddef.h>'?
|
||
incomplete.c:1:1:
|
||
+#include <stddef.h>
|
||
const char *test(void)
|
||
incomplete.c:3:10:
|
||
return NULL;
|
||
^~~~
|
||
incomplete.c:3:10: note: each undeclared identifier is reported only once for ea
|
||
ch function it appears in
|
||
|
||
$ gcc incomplete.cc
|
||
incomplete.cc:1:6: error: 'string' in namespace 'std' does not name a type
|
||
std::string s("hello world");
|
||
^~~~~~
|
||
incomplete.cc:1:1: note: 'std::string' is defined in header '<string>'; did you
|
||
forget to '#include <string>'?
|
||
+#include <string>
|
||
std::string s("hello world");
|
||
^~~
|
||
|
||
* The C and C++ compilers now use more intuitive locations when
|
||
reporting on missing semicolons, and offer fix-it hints:
|
||
$ gcc t.c
|
||
t.c: In function 'test':
|
||
t.c:3:12: error: expected ';' before '}' token
|
||
return 42
|
||
^
|
||
;
|
||
}
|
||
~
|
||
|
||
* When reporting on missing '}' and ')' tokens, the C and C++
|
||
compilers will now highlight the corresponding '{' and '(' token,
|
||
issuing a 'note' if it's on a separate line:
|
||
$ gcc unclosed.c
|
||
unclosed.c: In function 'log_when_out_of_range':
|
||
unclosed.c:12:50: error: expected ')' before '{' token
|
||
&& (temperature < MIN || temperature > MAX) {
|
||
^~
|
||
)
|
||
unclosed.c:11:6: note: to match this '('
|
||
if (logging_enabled && check_range ()
|
||
^
|
||
|
||
or highlighting it directly if it's on the same line:
|
||
$ gcc unclosed-2.c
|
||
unclosed-2.c: In function 'test':
|
||
unclosed-2.c:8:45: error: expected ')' before '{' token
|
||
if (temperature < MIN || temperature > MAX {
|
||
~ ^~
|
||
)
|
||
|
||
They will also emit fix-it hints.
|
||
|
||
C++
|
||
|
||
* GCC 8 (-fabi-version=12) has a couple of corrections to the calling
|
||
convention, which changes the ABI for some uncommon code:
|
||
+ Passing an empty class as an argument now takes up no space on
|
||
x86_64, as required by the psABI.
|
||
+ Passing or returning a class with only deleted copy and move
|
||
constructors now uses the same calling convention as a class
|
||
with a non-trivial copy or move constructor. This only affects
|
||
C++17 mode, as in earlier standards passing or returning such
|
||
a class was impossible.
|
||
+ WARNING: In GCC 8.1 the second change mistakenly also affects
|
||
classes with a deleted copy constructor and defaulted trivial
|
||
move constructor (bug [15]c++/86094). This issue is fixed in
|
||
GCC 8.2 (-fabi-version=13).
|
||
You can test whether these changes affect your code with -Wabi=11
|
||
(or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
|
||
problematic for your project, the GCC 7 ABI can be selected with
|
||
-fabi-version=11.
|
||
* The value of the C++11 alignof operator has been corrected to match
|
||
C _Alignof (minimum alignment) rather than GNU __alignof__
|
||
(preferred alignment); on ia32 targets this means that
|
||
alignof(double) is now 4 rather than 8. Code that wants the
|
||
preferred alignment should use __alignof__ instead.
|
||
* New command-line options have been added for the C++ compiler to
|
||
control warnings:
|
||
+ [16]-Wclass-memaccess warns when objects of non-trivial class
|
||
types are manipulated in potentially unsafe ways by raw memory
|
||
functions such as memcpy, or realloc. The warning helps detect
|
||
calls that bypass user-defined constructors or copy-assignment
|
||
operators, corrupt virtual table pointers, data members of
|
||
const-qualified types or references, or member pointers. The
|
||
warning also detects calls that would bypass access controls
|
||
to data members. For example, a call such as:
|
||
memcpy (&std::cout, &std::cerr, sizeof std::cout);
|
||
results in
|
||
warning: 'void* memcpy(void*, const void*, long unsigned int)' writing t
|
||
o an object of type 'std::ostream' {aka 'class std::basic_ostream<char>'} with n
|
||
o trivial copy-assignment [-Wclass-memaccess]
|
||
The -Wclass-memaccess option is included in -Wall.
|
||
* The C++ front end has experimental support for some of the upcoming
|
||
C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
|
||
including designated initializers, default member initializers for
|
||
bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
|
||
lambda [=, this] captures, etc. For a full list of new features,
|
||
see [17]the C++ status page.
|
||
* When reporting on attempts to access private fields of a class or
|
||
struct, the C++ compiler will now offer fix-it hints showing how to
|
||
use an accessor function to get at the field in question, if one
|
||
exists.
|
||
$ gcc accessor.cc
|
||
accessor.cc: In function 'void test(foo*)':
|
||
accessor.cc:12:12: error: 'double foo::m_ratio' is private within this context
|
||
if (ptr->m_ratio >= 0.5)
|
||
^~~~~~~
|
||
accessor.cc:7:10: note: declared private here
|
||
double m_ratio;
|
||
^~~~~~~
|
||
accessor.cc:12:12: note: field 'double foo::m_ratio' can be accessed via 'double
|
||
foo::get_ratio() const'
|
||
if (ptr->m_ratio >= 0.5)
|
||
^~~~~~~
|
||
get_ratio()
|
||
|
||
* The C++ compiler can now give you a hint if you use a macro before
|
||
it was defined (e.g. if you mess up the order of your #include
|
||
directives):
|
||
$ gcc ordering.cc
|
||
ordering.cc:2:24: error: expected ';' at end of member declaration
|
||
virtual void clone() const OVERRIDE { }
|
||
^~~~~
|
||
;
|
||
ordering.cc:2:30: error: 'OVERRIDE' does not name a type
|
||
virtual void clone() const OVERRIDE { }
|
||
^~~~~~~~
|
||
ordering.cc:2:30: note: the macro 'OVERRIDE' had not yet been defined
|
||
In file included from ordering.cc:5:
|
||
c++11-compat.h:2: note: it was later defined here
|
||
#define OVERRIDE override
|
||
|
||
|
||
* The -Wold-style-cast diagnostic can now emit fix-it hints telling
|
||
you when you can use a static_cast, const_cast, or
|
||
reinterpret_cast.
|
||
$ gcc -c old-style-cast-fixits.cc -Wold-style-cast
|
||
old-style-cast-fixits.cc: In function 'void test(void*)':
|
||
old-style-cast-fixits.cc:5:19: warning: use of old-style cast to 'struct foo*' [
|
||
-Wold-style-cast]
|
||
foo *f = (foo *)ptr;
|
||
^~~
|
||
----------
|
||
static_cast<foo *> (ptr)
|
||
|
||
* When reporting on problems within extern "C" linkage
|
||
specifications, the C++ compiler will now display the location of
|
||
the start of the extern "C".
|
||
$ gcc -c extern-c.cc
|
||
extern-c.cc:3:1: error: template with C linkage
|
||
template <typename T> void test (void);
|
||
^~~~~~~~
|
||
In file included from extern-c.cc:1:
|
||
unclosed.h:1:1: note: 'extern "C"' linkage started here
|
||
extern "C" {
|
||
^~~~~~~~~~
|
||
extern-c.cc:3:39: error: expected '}' at end of input
|
||
template <typename T> void test (void);
|
||
^
|
||
In file included from extern-c.cc:1:
|
||
unclosed.h:1:12: note: to match this '{'
|
||
extern "C" {
|
||
^
|
||
|
||
* When reporting on mismatching template types, the C++ compiler will
|
||
now use color to highlight the mismatching parts of the template,
|
||
and will elide the parameters that are common between two
|
||
mismatching templates, printing [...] instead:
|
||
$ gcc templates.cc
|
||
templates.cc: In function 'void test()':
|
||
templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
|
||
e>' to 'vector<int>'
|
||
fn_1(vector<double> ());
|
||
^~~~~~~~~~~~~~~~~
|
||
templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<[...]
|
||
,double>' to 'map<[...],int>'
|
||
fn_2(map<int, double>());
|
||
^~~~~~~~~~~~~~~~~~
|
||
|
||
Those [...] elided parameters can be seen using -fno-elide-type:
|
||
$ gcc templates.cc -fno-elide-type
|
||
templates.cc: In function 'void test()':
|
||
templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
|
||
e>' to 'vector<int>'
|
||
fn_1(vector<double> ());
|
||
^~~~~~~~~~~~~~~~~
|
||
templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<int,d
|
||
ouble>' to 'map<int,int>'
|
||
fn_2(map<int, double>());
|
||
^~~~~~~~~~~~~~~~~~
|
||
|
||
The C++ compiler has also gained an option
|
||
-fdiagnostics-show-template-tree which visualizes such mismatching
|
||
templates in a hierarchical form:
|
||
$ gcc templates-2.cc -fdiagnostics-show-template-tree
|
||
templates-2.cc: In function 'void test()':
|
||
templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
|
||
ble>' to 'vector<int>'
|
||
vector<
|
||
[double != int]>
|
||
fn_1(vector<double> ());
|
||
^~~~~~~~~~~~~~~~~
|
||
templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
|
||
ctor<double> >()' from 'map<map<[...],vector<double>>,vector<double>>' to 'map<m
|
||
ap<[...],vector<float>>,vector<float>>'
|
||
map<
|
||
map<
|
||
[...],
|
||
vector<
|
||
[double != float]>>,
|
||
vector<
|
||
[double != float]>>
|
||
fn_2(map<map<int, vector<double>>, vector<double>> ());
|
||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
which again works with -fno-elide-type:
|
||
$ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
|
||
templates-2.cc: In function 'void test()':
|
||
templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
|
||
ble>' to 'vector<int>'
|
||
vector<
|
||
[double != int]>
|
||
fn_1(vector<double> ());
|
||
^~~~~~~~~~~~~~~~~
|
||
templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
|
||
ctor<double> >()' from 'map<map<int,vector<double>>,vector<double>>' to 'map<map
|
||
<int,vector<float>>,vector<float>>'
|
||
map<
|
||
map<
|
||
int,
|
||
vector<
|
||
[double != float]>>,
|
||
vector<
|
||
[double != float]>>
|
||
fn_2(map<map<int, vector<double>>, vector<double>> ());
|
||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* Flowing off the end of a non-void function is considered
|
||
unreachable and may be subject to optimization on that basis. As a
|
||
result of this change, -Wreturn-type warnings are enabled by
|
||
default for C++.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Improved experimental support for C++17, including the following
|
||
features:
|
||
+ Deduction guides to support class template argument deduction.
|
||
+ std::filesystem implementation.
|
||
+ std::char_traits<char> and std::char_traits<wchar_t> are
|
||
usable in constant expressions.
|
||
+ std::to_chars and std::from_chars (for integers only, not for
|
||
floating point types).
|
||
* Experimental support for C++2a: std::to_address (thanks to Glen
|
||
Fernandes) and std::endian.
|
||
* On GNU/Linux, std::random_device::entropy() accesses the kernel's
|
||
entropy count for the random device, if known (thanks to Xi
|
||
Ruoyao).
|
||
* Support for std::experimental::source_location.
|
||
* AddressSanitizer integration for std::vector, detecting
|
||
out-of-range accesses to the unused capacity of a vector.
|
||
* Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
|
||
Mathematical Special Functions.
|
||
|
||
Fortran
|
||
|
||
* The main version of libfortran has been changed to 5.
|
||
* Parameterized derived types, a major feature of Fortran 2003, have
|
||
been implemented.
|
||
* Partial support is provided for Fortran 2018 teams, which are
|
||
hierarchical subsets of images that execute independently of other
|
||
image subsets.
|
||
* The maximum rank for arrays has been increased to 15, conforming to
|
||
the Fortran 2008 standard.
|
||
* Transformational intrinsics are now fully supported in
|
||
initialization expressions.
|
||
* New flag -fc-prototypes to write C prototypes for BIND(C)
|
||
procedures and variables.
|
||
* If -fmax-stack-var-size is honored if given together with -Ofast,
|
||
-fstack-arrays is no longer set in that case.
|
||
* New options -fdefault-real-16 and -fdefault-real-10 to control the
|
||
default kind of REAL variables.
|
||
* A warning is now issued if an array subscript inside a DO loop
|
||
could lead to an out-of-bounds-access. The new option
|
||
-Wdo-subscript, enabled by -Wextra, warns about this even if the
|
||
compiler can not prove that the code will be executed.
|
||
* The Fortran front end now attempts to interchange loops if it is
|
||
deemed profitable. So far, this is restricted to FORALL and DO
|
||
CONCURRENT statements with multiple indices. This behavior be
|
||
controlled with the new flag -ffrontend-loop-interchange, which is
|
||
enabled with optimization by default. The
|
||
-Wfrontend-loop-interchange option warns about such occurrences.
|
||
* When an actual argument contains too few elements for a dummy
|
||
argument, an error is now issued. The -std=legacy option can be
|
||
used to still compile such code.
|
||
* The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
|
||
integers, making records larger than 2GiB possible.
|
||
* The GFORTRAN_DEFAULT_RECL environment variable no longer has any
|
||
effect. The record length for preconnected units is now larger than
|
||
any practical limit, same as for sequential access units opened
|
||
without an explicit RECL= specifier.
|
||
* Character variables longer than HUGE(0) elements are now possible
|
||
on 64-bit targets. Note that this changes the procedure call ABI
|
||
for all procedures with character arguments on 64-bit targets, as
|
||
the type of the hidden character length argument has changed. The
|
||
hidden character length argument is now of type INTEGER(C_SIZE_T).
|
||
* Partial support is provided for Fortran 2018 teams, which are
|
||
hierarchical subsets of images that execute independently of other
|
||
image subsets.
|
||
|
||
Go
|
||
|
||
* GCC 8 provides a complete implementation of the Go 1.10.1 user
|
||
packages.
|
||
* The garbage collector is now fully concurrent. As before, values
|
||
stored on the stack are scanned conservatively, but value stored in
|
||
the heap are scanned precisely.
|
||
* Escape analysis is fully implemented and enabled by default in the
|
||
Go frontend. This significantly reduces the number of heap
|
||
allocations by allocating values on the stack instead.
|
||
|
||
libgccjit
|
||
|
||
The libgccjit API gained four new entry points:
|
||
* [18]gcc_jit_type_get_vector and
|
||
* [19]gcc_jit_context_new_rvalue_from_vector for working with
|
||
vectors,
|
||
* [20]gcc_jit_type_get_aligned
|
||
* [21]gcc_jit_function_get_address
|
||
|
||
The C code generated by [22]gcc_jit_context_dump_reproducer_to_file is
|
||
now easier-to-read.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64
|
||
|
||
* The Armv8.4-A architecture is now supported. It can be used by
|
||
specifying the -march=armv8.4-a option.
|
||
* The Dot Product instructions are now supported as an optional
|
||
extension to the Armv8.2-A architecture and newer and are mandatory
|
||
on Armv8.4-A. The extension can be used by specifying the +dotprod
|
||
architecture extension. E.g. -march=armv8.2-a+dotprod.
|
||
* The Armv8-A +crypto extension has now been split into two
|
||
extensions for finer grained control:
|
||
+ +aes which contains the Armv8-A AES crytographic instructions.
|
||
+ +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
|
||
instructions.
|
||
Using +crypto will now enable these two extensions.
|
||
* New Armv8.4-A FP16 Floating Point Multiplication Variant
|
||
instructions have been added. These instructions are mandatory in
|
||
Armv8.4-A but available as an optional extension to Armv8.2-A and
|
||
Armv8.3-A. The new extension can be used by specifying the +fp16fml
|
||
architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
|
||
the instructions can be enabled by specifying +fp16.
|
||
* New cryptographic instructions have been added as optional
|
||
extensions to Armv8.2-A and newer. These instructions can be
|
||
enabled with:
|
||
+ +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This
|
||
implies +sha2.
|
||
+ +sm4 New SM3 and SM4 instructions from Armv8.4-A.
|
||
* The Scalable Vector Extension (SVE) is now supported as an optional
|
||
extension to the Armv8.2-A architecture and newer. This support
|
||
includes automatic vectorization with SVE instructions, but it does
|
||
not yet include the SVE Arm C Language Extensions (ACLE). It can be
|
||
enabled by specifying the +sve architecture extension (for example,
|
||
-march=armv8.2-a+sve). By default, the generated code works with
|
||
all vector lengths, but it can be made specific to N-bit vectors
|
||
using -msve-vector-bits=N.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses):
|
||
+ Arm Cortex-A75 (cortex-a75).
|
||
+ Arm Cortex-A55 (cortex-a55).
|
||
+ Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
|
||
(cortex-a75.cortex-a55).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
|
||
arguments to the equivalent target attributes and pragmas.
|
||
|
||
ARC
|
||
|
||
* Added support for:
|
||
+ Fast interrupts.
|
||
+ Naked functions.
|
||
+ aux variable attributes.
|
||
+ uncached type qualifier.
|
||
+ Secure functions via sjli instruction.
|
||
* New exception handling implementation.
|
||
* Revamped trampoline implementation.
|
||
* Refactored small data feature implementation, controlled via -G
|
||
command line option.
|
||
* New support for reduced register set ARC architecture
|
||
configurations, controlled via -mrf16 command line option.
|
||
* Refurbished and improved support for zero overhead loops.
|
||
Introduced -mlpc-width command line option to control the width of
|
||
lp_count register.
|
||
|
||
ARM
|
||
|
||
* The -mfpu option now takes a new option setting of -mfpu=auto. When
|
||
set to this the floating-point and SIMD settings are derived from
|
||
the settings of the -mcpu or -march options. The internal CPU
|
||
configurations have been updated with information about the
|
||
permitted floating-point configurations supported. See the user
|
||
guide for further information about the extended option syntax for
|
||
controlling architectural extensions via the -march option.
|
||
-mfpu=auto is now the default setting unless the compiler has been
|
||
configured with an explicit --with-fpu option.
|
||
* The -march and -mcpu options now accept optional extensions to the
|
||
architecture or CPU option, allowing the user to enable or disable
|
||
any such extensions supported by that architecture or CPU such as
|
||
(but not limited to) floating-point and AdvancedSIMD. For example:
|
||
the option -mcpu=cortex-a53+nofp will generate code for the
|
||
Cortex-A53 processor with no floating-point support. This, in
|
||
combination with the new -mfpu=auto option, provides a
|
||
straightforward way of specifying a valid build target through a
|
||
single -mcpu or -march option. The -mtune option accepts the same
|
||
arguments as -mcpu but only the CPU name has an effect on tuning.
|
||
The architecture extensions do not have any effect. For details of
|
||
what extensions a particular architecture or CPU option supports
|
||
please refer to the [23]documentation.
|
||
* The -mstructure-size-boundary option has been deprecated and will
|
||
be removed in a future release.
|
||
* The default link behavior for Armv6 and Armv7-R targets has been
|
||
changed to produce BE8 format when generating big-endian images. A
|
||
new flag -mbe32 can be used to force the linker to produce legacy
|
||
BE32 format images. There is no change of behavior for Armv6-M and
|
||
other Armv7 or later targets: these already defaulted to BE8
|
||
format. This change brings GCC into alignment with other compilers
|
||
for the ARM architecture.
|
||
* The Armv8-R architecture is now supported. It can be used by
|
||
specifying the -march=armv8-r option.
|
||
* The Armv8.3-A architecture is now supported. It can be used by
|
||
specifying the -march=armv8.3-a option.
|
||
* The Armv8.4-A architecture is now supported. It can be used by
|
||
specifying the -march=armv8.4-a option.
|
||
* The Dot Product instructions are now supported as an optional
|
||
extension to the Armv8.2-A architecture and newer and are mandatory
|
||
on Armv8.4-A. The extension can be used by specifying the +dotprod
|
||
architecture extension. E.g. -march=armv8.2-a+dotprod.
|
||
* Support for setting extensions and architectures using the GCC
|
||
target pragma and attribute has been added. It can be used by
|
||
specifying #pragma GCC target ("arch=..."), #pragma GCC target
|
||
("+extension"), __attribute__((target("arch=..."))) or
|
||
__attribute__((target("+extension"))).
|
||
* New Armv8.4-A FP16 Floating Point Multiplication Variant
|
||
instructions have been added. These instructions are mandatory in
|
||
Armv8.4-A but available as an optional extension to Armv8.2-A and
|
||
Armv8.3-A. The new extension can be used by specifying the +fp16fml
|
||
architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
|
||
the instructions can be enabled by specifying +fp16.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses):
|
||
+ Arm Cortex-A75 (cortex-a75).
|
||
+ Arm Cortex-A55 (cortex-a55).
|
||
+ Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
|
||
(cortex-a75.cortex-a55).
|
||
+ Arm Cortex-R52 for Armv8-R (cortex-r52).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
|
||
arguments to the equivalent target attributes and pragmas.
|
||
|
||
AVR
|
||
|
||
* The AVR port now supports the following XMEGA-like devices:
|
||
|
||
ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
|
||
ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
|
||
ATtiny3214, ATtiny3216, ATtiny3217
|
||
The new devices are listed under [24]-mmcu=avrxmega3.
|
||
+ These devices see flash memory in the RAM address space, so
|
||
that features like PROGMEM and __flash are not needed any more
|
||
(as opposed to other AVR families for which read-only data
|
||
will be located in RAM except special, non-standard features
|
||
are used to locate and access such data). This requires that
|
||
the compiler is used with Binutils 2.29 or newer so that
|
||
[25]read-only data will be located in flash memory.
|
||
+ A new command-line option -mshort-calls is supported. This
|
||
option is used internally for multilib selection of the
|
||
avrxmega3 variants. It is not an optimization option. Do not
|
||
set it by hand.
|
||
* The compiler now generates [26]efficient interrupt service routine
|
||
(ISR) prologues and epilogues. This is achieved by using the new
|
||
[27]AVR pseudo instruction __gcc_isr which is supported and
|
||
resolved by the GNU assembler.
|
||
+ As the __gcc_isr pseudo-instruction will be resolved by the
|
||
assembler, inline assembly is transparent to the process. This
|
||
means that when inline assembly uses an instruction like INC
|
||
that clobbers the condition code, then the assembler will
|
||
detect this and generate an appropriate ISR prologue /
|
||
epilogue chunk to save / restore SREG as needed.
|
||
+ A new command-line option -mno-gas-isr-prologues disables the
|
||
generation of the __gcc_isr pseudo instruction. Any non-naked
|
||
ISR will save and restore SREG, tmp_reg and zero_reg, no
|
||
matter whether the respective register is clobbered or used.
|
||
+ The feature is turned on per default for all optimization
|
||
levels except for -O0 and -Og. It is explicitly enabled by
|
||
means of option -mgas-isr-prologues.
|
||
+ Support has been added for a new [28]AVR function attribute
|
||
no_gccisr. It can be used to disable __gcc_isr pseudo
|
||
instruction generation for individual ISRs.
|
||
+ This optimization is only available if GCC is configured with
|
||
GNU Binutils 2.29 or newer; or at least with a version of
|
||
Binutils that implements feature [29]PR21683.
|
||
* The compiler no more saves / restores registers in main; the effect
|
||
is the same as if attribute OS_task was specified for main. This
|
||
optimization can be switched off by the new command-line option
|
||
-mno-main-is-OS_task.
|
||
|
||
IA-32/x86-64
|
||
|
||
* The x86 port now supports the naked function attribute.
|
||
* Better tuning for znver1 and Intel Core based CPUs.
|
||
* Vectorization cost metrics has been reworked leading to significant
|
||
improvements on some benchmarks.
|
||
* GCC now supports the Intel CPU named Cannonlake through
|
||
-march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA
|
||
and SHA ISA extensions.
|
||
* GCC now supports the Intel CPU named Icelake through
|
||
-march=icelake. The switch enables the AVX512VNNI, GFNI, VAES,
|
||
AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ
|
||
ISA extensions.
|
||
* GCC now supports the Intel Control-flow Enforcement Technology
|
||
(CET) extension through -fcf-protection option.
|
||
|
||
NDS32
|
||
|
||
* New command-line options -mext-perf, -mext-perf2, and -mext-string
|
||
have been added for performance extension instructions.
|
||
|
||
Nios II
|
||
|
||
* The Nios II back end has been improved to generate better-optimized
|
||
code. Changes include switching to LRA, more accurate cost models,
|
||
and more compact code for addressing static variables.
|
||
* New command-line options -mgprel-sec= and -mr0rel-sec= have been
|
||
added.
|
||
* The stack-smashing protection options are now enabled on Nios II.
|
||
|
||
PA-RISC
|
||
|
||
* The default call ABI on 32-bit linux has been changed from callee
|
||
copies to caller copies. This affects objects larger than eight
|
||
bytes passed by value. The goal is to improve compatibility with
|
||
x86 and resolve issues with OpenMP.
|
||
* Other PA-RISC targets are unchanged.
|
||
|
||
PowerPC / PowerPC64 / RS6000
|
||
|
||
* The PowerPC SPE support is split off to a separate powerpcspe port.
|
||
The separate port is deprecated and might be removed in a future
|
||
release.
|
||
* The Paired Single support (as used on some PPC750 CPUs, -mpaired,
|
||
powerpc*-*-linux*paired*) is deprecated and will be removed in a
|
||
future release.
|
||
* The Xilinx floating point support (-mxilinx-fpu,
|
||
powerpc-xilinx-eabi*) is deprecated and will be removed in a future
|
||
release.
|
||
* Support for using big-endian AltiVec intrinsics on a little-endian
|
||
target (-maltivec=be) is deprecated and will be removed in a future
|
||
release.
|
||
|
||
Tile
|
||
|
||
* The TILE-Gx port is deprecated and will be removed in a future
|
||
release.
|
||
|
||
Operating Systems
|
||
|
||
Windows
|
||
|
||
* GCC on Microsoft Windows can now be configured via
|
||
--enable-mingw-wildcard or --disable-mingw-wildcard to force a
|
||
specific behavior for GCC itself with regards to supporting the
|
||
wildcard character. Prior versions of GCC would follow the
|
||
configuration of the MinGW runtime. This behavior can still be
|
||
obtained by not using the above options or by using
|
||
--enable-mingw-wildcard=platform.
|
||
|
||
Improvements for plugin authors
|
||
|
||
* Plugins can now register a callback hook for when comments are
|
||
encountered by the C and C++ compilers, e.g. allowing for plugins
|
||
to handle documentation markup in code comments.
|
||
* The gdbinit support script for debugging GCC now has a
|
||
break-on-diagnostic command, providing an easy way to trigger a
|
||
breakpoint whenever a diagnostic is emitted.
|
||
* The API for creating fix-it hints now supports newlines, and for
|
||
emitting mutually incompatible fix-it hints for one diagnostic.
|
||
|
||
GCC 8.1
|
||
|
||
This is the [30]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 8.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 8.2
|
||
|
||
This is the [31]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 8.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
General Improvements
|
||
|
||
* Fixed LTO link-time performance problems caused by an overflow in
|
||
the partitioning algorithm while building large binaries.
|
||
|
||
Language Specific Changes
|
||
|
||
C++
|
||
|
||
GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
|
||
returning of classes with a deleted copy constructor and defaulted
|
||
trivial move constructor (bug [32]c++/86094). GCC 8.2 introduces
|
||
-fabi-version=13 and makes it the default, ABI incompatibilities
|
||
between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [33]C++
|
||
changes for more details.
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
* -mtune=native performance regression [34]PR84413 on Intel Skylake
|
||
processors has been fixed.
|
||
|
||
GCC 8.3
|
||
|
||
This is the [35]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 8.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Windows
|
||
|
||
* A C++ Microsoft ABI bitfield layout bug, [36]PR87137 has been
|
||
fixed. A non-field declaration could cause the current bitfield
|
||
allocation unit to be completed, incorrectly placing a following
|
||
bitfield into a new allocation unit. The Microsoft ABI is selected
|
||
for:
|
||
+ Mingw targets
|
||
+ PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
|
||
option is specified, or __attribute__((ms_struct)) is used
|
||
+ SuperH targets when the -mhitachi option is specified, or
|
||
__attribute__((renesas)) is used
|
||
GCC 8 introduced additional cases of this defect, but rather than
|
||
resolve only those regressions, we decided to resolve all the cases
|
||
of this defect in single change.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [37]GCC manuals. If that fails, the
|
||
[38]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [39]gcc@gcc.gnu.org. All of [40]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [41]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [42]maintained by the GCC team. Last modified
|
||
2019-04-17[43].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-8/porting_to.html
|
||
2. http://gcc.gnu.org/onlinedocs/index.html#current
|
||
3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
|
||
4. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
|
||
5. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
|
||
6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
|
||
7. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
|
||
8. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
|
||
9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
|
||
10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
|
||
11. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
|
||
12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
|
||
13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
|
||
15. https://gcc.gnu.org/PR86094
|
||
16. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
|
||
17. http://gcc.gnu.org/projects/cxx-status.html#cxx2a
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
|
||
21. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
|
||
23. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
|
||
24. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
|
||
25. https://sourceware.org/PR21472
|
||
26. https://gcc.gnu.org/PR20296
|
||
27. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
|
||
28. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
|
||
29. https://sourceware.org/PR21683
|
||
30. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
|
||
31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
|
||
32. https://gcc.gnu.org/PR86094
|
||
33. http://gcc.gnu.org/gcc-8/changes.html#cxx
|
||
34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
|
||
35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
|
||
36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
|
||
37. https://gcc.gnu.org/onlinedocs/
|
||
38. mailto:gcc-help@gcc.gnu.org
|
||
39. mailto:gcc@gcc.gnu.org
|
||
40. https://gcc.gnu.org/lists.html
|
||
41. https://www.fsf.org/
|
||
42. https://gcc.gnu.org/about.html
|
||
43. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-7/index.html
|
||
GCC 7 Release Series
|
||
|
||
Dec 6, 2018
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 7.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 7.3 relative to previous releases of GCC.
|
||
|
||
Release History
|
||
|
||
GCC 7.4
|
||
Dec 6, 2018 ([2]changes, [3]documentation)
|
||
|
||
GCC 7.3
|
||
Jan 25, 2018 ([4]changes, [5]documentation)
|
||
|
||
GCC 7.2
|
||
Aug 14, 2017 ([6]changes, [7]documentation)
|
||
|
||
GCC 7.1
|
||
May 2, 2017 ([8]changes, [9]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [10]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [11]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [12]GCC
|
||
project web site or contact the [13]GCC development mailing list.
|
||
|
||
To obtain GCC please use [14]our mirror sites or [15]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [16]GCC manuals. If that fails, the
|
||
[17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [21]maintained by the GCC team. Last modified
|
||
2018-12-06[22].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-7/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/7.4.0/
|
||
4. http://gcc.gnu.org/gcc-7/changes.html
|
||
5. http://gcc.gnu.org/onlinedocs/7.3.0/
|
||
6. http://gcc.gnu.org/gcc-7/changes.html
|
||
7. http://gcc.gnu.org/onlinedocs/7.2.0/
|
||
8. http://gcc.gnu.org/gcc-7/changes.html
|
||
9. http://gcc.gnu.org/onlinedocs/7.1.0/
|
||
10. http://gcc.gnu.org/gcc-7/buildstat.html
|
||
11. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
12. http://gcc.gnu.org/index.html
|
||
13. mailto:gcc@gcc.gnu.org
|
||
14. http://gcc.gnu.org/mirrors.html
|
||
15. http://gcc.gnu.org/svn.html
|
||
16. https://gcc.gnu.org/onlinedocs/
|
||
17. mailto:gcc-help@gcc.gnu.org
|
||
18. mailto:gcc@gcc.gnu.org
|
||
19. https://gcc.gnu.org/lists.html
|
||
20. https://www.fsf.org/
|
||
21. https://gcc.gnu.org/about.html
|
||
22. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-7/changes.html
|
||
GCC 7 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
This page is a brief summary of some of the huge number of improvements
|
||
in GCC 7. For more information, see the [1]Porting to GCC 7 page and
|
||
the [2]full GCC documentation.
|
||
|
||
Caveats
|
||
|
||
* GCC now uses [3]LRA (a new local register allocator) by default for
|
||
new targets.
|
||
* The non-standard C++0x type traits has_trivial_default_constructor,
|
||
has_trivial_copy_constructor and has_trivial_copy_assign have been
|
||
removed.
|
||
* The libstdc++ [4]Profile Mode has been deprecated and will be
|
||
removed in a future version.
|
||
* The Cilk+ extensions to the C and C++ languages have been
|
||
deprecated.
|
||
* On ARM targets (arm*-*-*), [5]a bug introduced in GCC 5 that
|
||
affects conformance to the procedure call standard (AAPCS) has been
|
||
fixed. The bug affects some C++ code where class objects are passed
|
||
by value to functions and could result in incorrect or inconsistent
|
||
code being generated. This is an ABI change. If the option -Wpsabi
|
||
is enabled (on by default) the compiler will emit a diagnostic note
|
||
for code that might be affected.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* GCC 7 can determine the return value or range of return values of
|
||
some calls to the sprintf family of functions and make it available
|
||
to other optimization passes. Some calls to the snprintf function
|
||
with a zero size argument can be folded into constants. This
|
||
optimization is included in -O1 and can be selectively controlled
|
||
by the -fprintf-return-value option.
|
||
* A new store merging pass has been added. It merges constant stores
|
||
to adjacent memory locations into fewer, wider, stores. It is
|
||
enabled by the -fstore-merging option and at the -O2 optimization
|
||
level or higher (and -Os).
|
||
* A new code hoisting optimization has been added to the partial
|
||
redundancy elimination pass. It attempts to move evaluation of
|
||
expressions executed on all paths to the function exit as early as
|
||
possible. This primarily helps improve code size, but can improve
|
||
the speed of the generated code as well. It is enabled by the
|
||
-fcode-hoisting option and at the -O2 optimization level or higher
|
||
(and -Os).
|
||
* A new interprocedural bitwise constant propagation optimization has
|
||
been added, which propagates knowledge about which bits of
|
||
variables are known to be zero (including pointer alignment
|
||
information) across the call graph. It is enabled by the
|
||
-fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled
|
||
at the -O2 optimization level and higher (and -Os). This
|
||
optimization supersedes interprocedural alignment propagation of
|
||
GCC 6, and therefore the option -fipa-cp-alignment is now
|
||
deprecated and ignored.
|
||
* A new interprocedural value range propagation optimization has been
|
||
added, which propagates integral range information across the call
|
||
graph when variable values can be proven to be within those ranges.
|
||
It is enabled by the -fipa-vrp option and at the -O2 optimization
|
||
level and higher (and -Os).
|
||
* A new loop splitting optimization pass has been added. Certain
|
||
loops which contain a condition that is always true on one side of
|
||
the iteration space and always false on the other are split into
|
||
two loops, such that each of the two new loops iterates on just one
|
||
side of the iteration space and the condition does not need to be
|
||
checked inside of the loop. It is enabled by the -fsplit-loops
|
||
option and at the -O3 optimization level or higher.
|
||
* The shrink-wrapping optimization can now separate portions of
|
||
prologues and epilogues to improve performance if some of the work
|
||
done traditionally by prologues and epilogues is not needed on
|
||
certain paths. This is controlled by the -fshrink-wrap-separate
|
||
option, enabled by default. It requires target support, which is
|
||
currently only implemented in the PowerPC and AArch64 ports.
|
||
* AddressSanitizer gained a new sanitization option,
|
||
-fsanitize-address-use-after-scope, which enables sanitization of
|
||
variables whose address is taken and used after a scope where the
|
||
variable is defined:
|
||
|
||
int
|
||
main (int argc, char **argv)
|
||
{
|
||
char *ptr;
|
||
{
|
||
char my_char;
|
||
ptr = &my_char;
|
||
}
|
||
|
||
*ptr = 123;
|
||
return *ptr;
|
||
}
|
||
|
||
==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba99
|
||
0 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
|
||
WRITE of size 1 at 0x7fffb8dba990 thread T0
|
||
#0 0x4006d4 in main /tmp/use-after-scope-1.c:10
|
||
#1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
|
||
#2 0x400739 in _start (/tmp/a.out+0x400739)
|
||
|
||
Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
|
||
#0 0x40067f in main /tmp/use-after-scope-1.c:3
|
||
|
||
This frame has 1 object(s):
|
||
[32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
|
||
|
||
The option is enabled by default with -fsanitize=address and
|
||
disabled by default with -fsanitize=kernel-address. Compared to the
|
||
LLVM compiler, where the option already exists, the implementation
|
||
in the GCC compiler has some improvements and advantages:
|
||
+ Complex uses of gotos and case labels are properly handled and
|
||
should not report any false positive or false negatives.
|
||
+ C++ temporaries are sanitized.
|
||
+ Sanitization can handle invalid memory stores that are
|
||
optimized out by the LLVM compiler when optimization is
|
||
enabled.
|
||
* The -fsanitize=signed-integer-overflow suboption of the
|
||
UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even
|
||
on arithmetic operations with generic vectors.
|
||
* Version 5 of the [6]DWARF debugging information standard is
|
||
supported through the -gdwarf-5 option. The DWARF version 4
|
||
debugging information remains the default until consumers of
|
||
debugging information are adjusted.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
OpenACC support in C, C++, and Fortran continues to be maintained and
|
||
improved. See the [7]OpenACC and [8]Offloading wiki pages for further
|
||
information.
|
||
|
||
Ada
|
||
|
||
* On mainstream native platforms, Ada programs no longer require the
|
||
stack to be made executable in order to run properly.
|
||
|
||
BRIG (HSAIL)
|
||
|
||
Support for processing BRIG 1.0 files was added in this release. BRIG
|
||
is a binary format for HSAIL (Heterogeneous System Architecture
|
||
Intermediate Language). The BRIG front end can be used for implementing
|
||
HSAIL "finalizers" (compilation of HSAIL to a native ISA) for
|
||
GCC-supported targets. An implementation of an HSAIL runtime library,
|
||
libhsail-rt is also included.
|
||
|
||
C family
|
||
|
||
* New command-line options have been added for the C and C++
|
||
compilers:
|
||
+ -Wimplicit-fallthrough warns when a switch case falls through.
|
||
This warning has five different levels. The compiler is able
|
||
to parse a wide range of fallthrough comments, depending on
|
||
the level. It also handles control-flow statements, such as
|
||
ifs. It's possible to suppress the warning by either adding a
|
||
fallthrough comment, or by using a null statement:
|
||
__attribute__ ((fallthrough)); (C, C++), or [[fallthrough]];
|
||
(C++17), or [[gnu::fallthrough]]; (C++11/C++14). This warning
|
||
is enabled by -Wextra.
|
||
+ -Wpointer-compare warns when a pointer is compared with a zero
|
||
character constant. Such code is now invalid in C++11 and GCC
|
||
rejects it. This warning is enabled by default.
|
||
+ -Wduplicated-branches warns when an if-else has identical
|
||
branches.
|
||
+ -Wrestrict warns when an argument passed to a
|
||
restrict-qualified parameter aliases with another argument.
|
||
+ -Wmemset-elt-size warns for memset calls, when the first
|
||
argument references an array, and the third argument is a
|
||
number equal to the number of elements of the array, but not
|
||
the size of the array. This warning is enabled by -Wall.
|
||
+ -Wint-in-bool-context warns about suspicious uses of integer
|
||
values where boolean values are expected. This warning is
|
||
enabled by -Wall.
|
||
+ -Wswitch-unreachable warns when a switch statement has
|
||
statements between the controlling expression and the first
|
||
case label which will never be executed. This warning is
|
||
enabled by default.
|
||
+ -Wexpansion-to-defined warns when defined is used outside #if.
|
||
This warning is enabled by -Wextra or -Wpedantic.
|
||
+ -Wregister warns about uses of the register storage specifier.
|
||
In C++17 this keyword has been removed and for C++17 this is a
|
||
pedantic warning enabled by default. The warning is not
|
||
emitted for the GNU Explicit Register Variables extension.
|
||
+ -Wvla-larger-than=N warns about unbounded uses of
|
||
variable-length arrays, and about bounded uses of
|
||
variable-length arrays whose bound can be larger than N bytes.
|
||
+ -Wduplicate-decl-specifier warns when a declaration has
|
||
duplicate const, volatile, restrict or _Atomic specifier. This
|
||
warning is enabled by -Wall.
|
||
* GCC 6's C and C++ front ends were able to offer suggestions for
|
||
misspelled field names:
|
||
|
||
spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
|
||
you mean 'color'?
|
||
return ptr->colour;
|
||
^~~~~~
|
||
|
||
GCC 7 greatly expands the scope of these suggestions. Firstly, it
|
||
adds fix-it hints to such suggestions:
|
||
|
||
spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
|
||
you mean 'color'?
|
||
return ptr->colour;
|
||
^~~~~~
|
||
color
|
||
|
||
The suggestions now cover many other things, such as misspelled
|
||
function names:
|
||
|
||
spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_wi
|
||
dget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declarat
|
||
ion]
|
||
gtk_widget_showall (w);
|
||
^~~~~~~~~~~~~~~~~~
|
||
gtk_widget_show_all
|
||
|
||
misspelled macro names and enum values:
|
||
|
||
spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a fun
|
||
ction); did you mean 'MAX_ITEMS'?
|
||
int array[MAX_ITEM];
|
||
^~~~~~~~
|
||
MAX_ITEMS
|
||
|
||
misspelled type names:
|
||
|
||
spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'si
|
||
gned'?
|
||
void test (singed char e);
|
||
^~~~~~
|
||
signed
|
||
|
||
and, in the C front end, named initializers:
|
||
|
||
test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color
|
||
'?
|
||
struct s test = { .colour = 3 };
|
||
^~~~~~
|
||
color
|
||
|
||
* The preprocessor can now offer suggestions for misspelled
|
||
directives, e.g.:
|
||
|
||
test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
|
||
#endfi
|
||
^~~~~
|
||
endif
|
||
|
||
* Warnings about format strings now underline the pertinent part of
|
||
the string, and can offer suggested fixes. In some cases, the
|
||
pertinent argument is underlined.
|
||
|
||
test.c:51:29: warning: format '%s' expects argument of type 'char *', but argume
|
||
nt 3 has type 'int' [-Wformat=]
|
||
printf ("foo: %d bar: %s baz: %d", 100, i + j, 102);
|
||
~^ ~~~~~
|
||
%d
|
||
|
||
* The new -Wdangling-else command-line option has been split out of
|
||
-Wparentheses and warns about dangling else.
|
||
* The -Wshadow warning has been split into three variants.
|
||
-Wshadow=global warns for any shadowing. This is the default when
|
||
using -Wshadow without any argument. -Wshadow=local only warns for
|
||
a local variable shadowing another local variable or parameter.
|
||
-Wshadow=compatible-local only warns for a local variable shadowing
|
||
another local variable or parameter whose type is compatible (in
|
||
C++ compatible means that the type of the shadowing variable can be
|
||
converted to that of the shadowed variable).
|
||
The following example shows the different kinds of shadow warnings:
|
||
|
||
enum operation { add, count };
|
||
struct container { int nr; };
|
||
|
||
int
|
||
container_count (struct container c, int count)
|
||
{
|
||
int r = 0;
|
||
for (int count = 0; count > 0; count--)
|
||
{
|
||
struct container count = c;
|
||
r += count.nr;
|
||
}
|
||
return r;
|
||
}
|
||
|
||
-Wshadow=compatible-local will warn for the parameter being
|
||
shadowed with the same type:
|
||
|
||
warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=
|
||
compatible-local]
|
||
for (int count = 0; count > 0; count--)
|
||
^~~~~
|
||
warn-test.c:5:42: note: shadowed declaration is here
|
||
container_count (struct container c, int count)
|
||
^~~~~
|
||
|
||
-Wshadow=local will warn for the above and for the shadowed
|
||
declaration with incompatible type:
|
||
|
||
warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Ws
|
||
hadow=local]
|
||
struct container count = c;
|
||
^~~~~
|
||
warn-test.c:8:12: note: shadowed declaration is here
|
||
for (int count = 0; count > 0; count--)
|
||
^~~~~
|
||
|
||
-Wshadow=global will warn for all of the above and the shadowing of
|
||
the global declaration:
|
||
|
||
warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [
|
||
-Wshadow]
|
||
container_count (struct container c, int count)
|
||
^~~~~
|
||
warn-test.c:1:23: note: shadowed declaration is here
|
||
enum operation { add, count };
|
||
^~~~~
|
||
|
||
* GCC 7 contains a number of enhancements that help detect buffer
|
||
overflow and other forms of invalid memory accesses.
|
||
+ The -Walloc-size-larger-than=size option detects calls to
|
||
standard and user-defined memory allocation functions
|
||
decorated with attribute alloc_size whose argument exceeds the
|
||
specified size (PTRDIFF_MAX by default). The option also
|
||
detects arithmetic overflow in the computation of the size in
|
||
two-argument allocation functions like calloc where the total
|
||
size is the product of the two arguments. Since calls with an
|
||
excessive size cannot succeed they are typically the result of
|
||
programming errors. Such bugs have been known to be the source
|
||
of security vulnerabilities and a target of exploits.
|
||
-Walloc-size-larger-than=PTRDIFF_MAX is included in -Wall.
|
||
For example, the following call to malloc incorrectly tries to
|
||
avoid passing a negative argument to the function and instead
|
||
ends up unconditionally invoking it with an argument less than
|
||
or equal to zero. Since after conversion to the type of the
|
||
argument of the function (size_t) a negative argument results
|
||
in a value in excess of the maximum PTRDIFF_MAX the call is
|
||
diagnosed.
|
||
|
||
void* f (int n)
|
||
{
|
||
return malloc (n > 0 ? 0 : n);
|
||
}
|
||
|
||
warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2
|
||
147483647 [-Walloc-size-larger-than=]
|
||
|
||
+ The -Walloc-zero option detects calls to standard and
|
||
user-defined memory allocation functions decorated with
|
||
attribute alloc_size with a zero argument. -Walloc-zero is not
|
||
included in either -Wall or -Wextra and must be explicitly
|
||
enabled.
|
||
+ The -Walloca option detects all calls to the alloca function
|
||
in the program. -Walloca is not included in either -Wall or
|
||
-Wextra and must be explicitly enabled.
|
||
+ The -Walloca-larger-than=size option detects calls to the
|
||
alloca function whose argument either may exceed the specified
|
||
size, or that is not known to be sufficiently constrained to
|
||
avoid exceeding it. -Walloca-larger-than is not included in
|
||
either -Wall or -Wextra and must be explicitly enabled.
|
||
For example, compiling the following snippet with
|
||
-Walloca-larger-than=1024 results in a warning because even
|
||
though the code appears to call alloca only with sizes of 1kb
|
||
and less, since n is signed, a negative value would result in
|
||
a call to the function well in excess of the limit.
|
||
|
||
void f (int n)
|
||
{
|
||
char *d;
|
||
if (n < 1025)
|
||
d = alloca (n);
|
||
else
|
||
d = malloc (n);
|
||
…
|
||
}
|
||
|
||
warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
|
||
ong unsigned int' [-Walloca-larger-than=]
|
||
|
||
In contrast, a call to alloca that isn't bounded at all such
|
||
as in the following function will elicit the warning below
|
||
regardless of the size argument to the option.
|
||
|
||
void f (size_t n)
|
||
{
|
||
char *d = alloca (n);
|
||
…
|
||
}
|
||
|
||
warning: unbounded use of 'alloca' [-Walloca-larger-than=]
|
||
|
||
+ The -Wformat-overflow=level option detects certain and likely
|
||
buffer overflow in calls to the sprintf family of formatted
|
||
output functions. Although the option is enabled even without
|
||
optimization it works best with -O2 and higher.
|
||
For example, in the following snippet the call to sprintf is
|
||
diagnosed because even though its output has been constrained
|
||
using the modulo operation it could result in as many as three
|
||
bytes if mday were negative. The solution is to either
|
||
allocate a larger buffer or make sure the argument is not
|
||
negative, for example by changing mday's type to unsigned or
|
||
by making the type of the second operand of the modulo
|
||
expression unsigned: 100U.
|
||
|
||
void* f (int mday)
|
||
{
|
||
char *buf = malloc (3);
|
||
sprintf (buf, "%02i", mday % 100);
|
||
return buf;
|
||
}
|
||
|
||
warning: 'sprintf may write a terminating nul past the end of the destination [-
|
||
Wformat-overflow=]
|
||
note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
|
||
|
||
+ The -Wformat-truncation=level option detects certain and
|
||
likely output truncation in calls to the snprintf family of
|
||
formatted output functions. -Wformat-truncation=1 is included
|
||
in -Wall and enabled without optimization but works best with
|
||
-O2 and higher.
|
||
For example, the following function attempts to format an
|
||
integer between 0 and 255 in hexadecimal, including the 0x
|
||
prefix, into a buffer of four characters. But since the
|
||
function must always terminate output by the null character
|
||
('\0') such a buffer is only big enough to fit just one digit
|
||
plus the prefix. Therefore the snprintf call is diagnosed. To
|
||
avoid the warning either use a bigger buffer or handle the
|
||
function's return value which indicates whether or not its
|
||
output has been truncated.
|
||
|
||
void f (unsigned x)
|
||
{
|
||
char d[4];
|
||
snprintf (d, sizeof d, "%#02x", x & 0xff);
|
||
…
|
||
}
|
||
|
||
warning: 'snprintf' output may be truncated before the last format character [-W
|
||
format-truncation=]
|
||
note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
|
||
|
||
+ The -Wnonnull option has been enhanced to detect a broader set
|
||
of cases of passing null pointers to functions that expect a
|
||
non-null argument (those decorated with attribute nonnull). By
|
||
taking advantage of optimizations the option can detect many
|
||
more cases of the problem than in prior GCC versions.
|
||
+ The -Wstringop-overflow=type option detects buffer overflow in
|
||
calls to string handling functions like memcpy and strcpy. The
|
||
option relies on [9]Object Size Checking and has an effect
|
||
similar to defining the _FORTIFY_SOURCE macro.
|
||
-Wstringop-overflow=2 is enabled by default.
|
||
For example, in the following snippet, because the call to
|
||
strncat specifies a maximum that allows the function to write
|
||
past the end of the destination, it is diagnosed. To correct
|
||
the problem and avoid the overflow the function should be
|
||
called with a size of at most sizeof d - strlen(d) - 1.
|
||
|
||
void f (const char *fname)
|
||
{
|
||
char d[8];
|
||
strncpy (d, "/tmp/", sizeof d);
|
||
strncat (d, fname, sizeof d);
|
||
…
|
||
}
|
||
|
||
warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
|
||
ow=]
|
||
|
||
* The <limits.h> header provided by GCC defines macros such as
|
||
INT_WIDTH for the width in bits of integer types, if
|
||
__STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
|
||
included. The <stdint.h> header defines such macros as SIZE_WIDTH
|
||
and INTMAX_WIDTH for the width of some standard typedef names for
|
||
integer types, again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined
|
||
before the header is included; note that GCC's implementation of
|
||
this header is only used for freestanding compilations, not hosted
|
||
compilations, on most systems. These macros come from ISO/IEC TS
|
||
18661-1:2014.
|
||
* The <float.h> header provided by GCC defines the macro
|
||
CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, if
|
||
__STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
|
||
included. This represents the number of decimal digits for which
|
||
conversions between decimal character strings and binary formats,
|
||
in both directions, are correctly rounded, and currently has the
|
||
value of UINTMAX_MAX on all systems, reflecting that GCC's
|
||
compile-time conversions are correctly rounded for any number of
|
||
digits.
|
||
* New __builtin_add_overflow_p, __builtin_sub_overflow_p,
|
||
__builtin_mul_overflow_p built-in functions have been added. These
|
||
work similarly to their siblings without the _p suffix, but do not
|
||
actually store the result of the arithmetics anywhere, just return
|
||
whether the operation would overflow. Calls to these built-ins with
|
||
integer constant arguments evaluate to integer constants
|
||
expressions.
|
||
For example, in the following, c is assigned the result of a * b
|
||
only if the multiplication does not overflow, otherwise it is
|
||
assigned the value zero. The multiplication is performed at
|
||
compile-time and without triggering a -Woverflow warning.
|
||
|
||
enum {
|
||
a = 12345678,
|
||
b = 87654321,
|
||
c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
|
||
};
|
||
|
||
C
|
||
|
||
* The C front end now supports type names _FloatN for floating-point
|
||
types with IEEE interchange formats and _FloatNx for floating-point
|
||
types with IEEE extended formats. These type names come from
|
||
ISO/IEC TS 18661-3:2015.
|
||
The set of types supported depends on the target for which GCC is
|
||
configured. Most targets support _Float32, _Float32x and _Float64.
|
||
_Float128 is supported on targets where IEEE binary128 encoding was
|
||
already supported as long double or __float128. _Float64x is
|
||
supported on targets where a type with either binary128 or Intel
|
||
extended precision format is available.
|
||
Constants with these types are supported using suffixes fN, FN, fNx
|
||
and FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are
|
||
defined in <float.h> if __STDC_WANT_IEC_60559_TYPES_EXT__ is
|
||
defined before it is included.
|
||
These new types are always distinct from each other and from float,
|
||
double and long double, even if they have the same encoding.
|
||
Complex types such as _Complex _Float128 are also supported.
|
||
Type-generic built-in functions such as __builtin_isinf support the
|
||
new types, and the following type-specific built-in functions have
|
||
versions (suffixed fN or fNx) for the new types:
|
||
__builtin_copysign, __builtin_fabs, __builtin_huge_val,
|
||
__builtin_inf, __builtin_nan, __builtin_nans.
|
||
* Compilation with -fopenmp is now compatible with the C11 _Atomic
|
||
keyword.
|
||
|
||
C++
|
||
|
||
* The C++ front end has experimental support for all of the current
|
||
C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
|
||
constexpr, class template argument deduction, auto template
|
||
parameters, and structured bindings. For a full list of new
|
||
features, see [10]the C++ status page.
|
||
* C++17 support for new of over-aligned types can be enabled in other
|
||
modes with the -faligned-new flag.
|
||
* The C++17 evaluation order requirements can be selected in other
|
||
modes with the -fstrong-eval-order flag, or disabled in C++17 mode
|
||
with -fno-strong-eval-order.
|
||
* The default semantics of inherited constructors has changed in all
|
||
modes, following [11]P0136. Essentially, overload resolution
|
||
happens as if calling the inherited constructor directly, and the
|
||
compiler fills in construction of the other bases and members as
|
||
needed. Most uses should not need any changes. The old behavior can
|
||
be restored with -fno-new-inheriting-ctors, or -fabi-version less
|
||
than 11.
|
||
* The resolution of DR 150 on matching of template template
|
||
parameters, allowing default template arguments to make a template
|
||
match a parameter, is currently enabled by default in C++17 mode
|
||
only. The default can be overridden with -f{no-,}new-ttp-matching.
|
||
* The C++ front end will now provide fix-it hints for some missing
|
||
semicolons, allowing for automatic fixes by IDEs:
|
||
|
||
test.cc:4:11: error: expected ';' after class definition
|
||
class a {}
|
||
^
|
||
;
|
||
|
||
* -Waligned-new has been added to the C++ front end. It warns about
|
||
new of type with extended alignment without -faligned-new.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* The type of exception thrown by iostreams, std::ios_base::failure,
|
||
now uses the [12]cxx11 ABI.
|
||
* Experimental support for C++17, including the following new
|
||
features:
|
||
+ std::string_view;
|
||
+ std::any, std::optional, and std::variant;
|
||
+ std::invoke, std::is_invocable, std::is_nothrow_invocable, and
|
||
invoke_result;
|
||
+ std::is_swappable, and std::is_nothrow_swappable;
|
||
+ std::apply, and std::make_from_tuple;
|
||
+ std::void_t, std::bool_constant, std::conjunction,
|
||
std::disjunction, and std::negation;
|
||
+ Variable templates for type traits;
|
||
+ Mathematical Special Functions;
|
||
+ std::chrono::floor, std::chrono::ceil, std::chrono::round, and
|
||
std::chrono::abs;
|
||
+ std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot;
|
||
+ std::scoped_lock, std::shared_mutex,
|
||
std::atomic<T>::is_always_lock_free;
|
||
+ std::sample, std::default_searcher, std::boyer_moore_searcher
|
||
and std::boyer_moore_horspool_searcher;
|
||
+ Extraction and re-insertion of map and set nodes, try_emplace
|
||
members for maps, and functions for accessing containers
|
||
std::size, std::empty, and std::data;
|
||
+ std::shared_ptr support for arrays,
|
||
std::shared_ptr<T>::weak_type,
|
||
std::enable_shared_from_this<T>::weak_from_this(), and
|
||
std::owner_less<void>;
|
||
+ std::byte;
|
||
+ std::as_const, std::not_fn,
|
||
std::has_unique_object_representations, constexpr
|
||
std::addressof.
|
||
Thanks to Daniel Krügler, Tim Shen, Edward Smith-Rowland, and Ville
|
||
Voutilainen for work on the C++17 support.
|
||
* A new power-of-two rehashing policy for use with the _Hashtable
|
||
internals, thanks to François Dumont.
|
||
|
||
Fortran
|
||
|
||
* Support for a number of extensions for compatibility with legacy
|
||
code with new flags:
|
||
+ -fdec-structure Support for DEC STRUCTURE and UNION
|
||
+ -fdec-intrinsic-ints Support for new integer intrinsics with
|
||
B/I/J/K prefixes such as BABS, JIAND...
|
||
+ -fdec-math Support for additional math intrinsics, including
|
||
COTAN and degree-valued trigonometric functions such as TAND,
|
||
ASIND...
|
||
+ -fdec Enable the -fdec-* family of extensions.
|
||
* New flag -finit-derived to allow default initialization of
|
||
derived-type variables.
|
||
* Improved DO loops with step equal to 1 or -1, generates faster code
|
||
without a loop preheader. A new warning, -Wundefined-do-loop, warns
|
||
when a loop iterates either to HUGE(i) (with step equal to 1), or
|
||
to -HUGE(i) (with step equal to -1). Invalid behavior can be caught
|
||
at run time with -fcheck=do enabled:
|
||
|
||
program test
|
||
implicit none
|
||
integer(1) :: i
|
||
do i = -HUGE(i)+10, -HUGE(i)-1, -1
|
||
print *, i
|
||
end do
|
||
end program test
|
||
|
||
At line 8 of file do_check_12.f90
|
||
Fortran runtime error: Loop iterates infinitely
|
||
|
||
* Version 4.5 of the [13]OpenMP specification is now partially
|
||
supported in the Fortran compiler; the largest missing item is
|
||
structure element mapping.
|
||
* User-defined derived-type input/output (UDTIO) is added.
|
||
* Derived type coarrays with allocatable and pointer components are
|
||
partially supported.
|
||
* Non-constant stop codes and error stop codes (Fortran 2015
|
||
feature).
|
||
* Derived types with allocatable components of recursive type.
|
||
* Intrinsic assignment to polymorphic variables.
|
||
* Improved submodule support.
|
||
* Improved diagnostics (polymorphic results in pure functions).
|
||
* Coarray: Support for failed images (Fortan 2015 feature).
|
||
|
||
Go
|
||
|
||
* GCC 7 provides a complete implementation of the Go 1.8.1 user
|
||
packages.
|
||
* Compared to the Go 1.8.1 toolchain, the garbage collector is more
|
||
conservative and less concurrent.
|
||
* Escape analysis is available for experimental use via the
|
||
-fgo-optimize-allocs option. The -fgo-debug-escape prints
|
||
information useful for debugging escape analysis choices.
|
||
|
||
Java (GCJ)
|
||
|
||
The GCC Java front end and associated libjava runtime library have been
|
||
removed from GCC.
|
||
|
||
libgccjit
|
||
|
||
The libgccjit API gained support for marking calls as requiring
|
||
tail-call optimization via a new entry point:
|
||
[14]gcc_jit_rvalue_set_bool_require_tail_call.
|
||
|
||
libgccjit performs numerous checks at the API boundary, but if these
|
||
succeed, it previously ignored errors and other diagnostics emitted
|
||
within the core of GCC, and treated the compile of a gcc_jit_context as
|
||
having succeeded. As of GCC 7 it now ensures that if any diagnostics
|
||
are emitted, they are visible from the libgccjit API, and that the the
|
||
context is flagged as having failed.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64
|
||
|
||
* GCC has been updated to the latest revision of the procedure call
|
||
standard (AAPCS64) to provide support for parameter passing when
|
||
data types have been over-aligned.
|
||
* The ARMv8.3-A architecture is now supported. It can be used by
|
||
specifying the -march=armv8.3-a option.
|
||
* The option -msign-return-address= is supported to enable return
|
||
address protection using ARMv8.3-A Pointer Authentication
|
||
Extensions. For more information on the arguments accepted by this
|
||
option, please refer to [15]AArch64-Options.
|
||
* The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
|
||
Extensions are now supported. They can be used by specifying the
|
||
-march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
|
||
Floating-Point Extensions introduce new half-precision data
|
||
processing floating-point instructions.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses): ARM Cortex-A73 (cortex-a73), Broadcom
|
||
Vulcan (vulcan), Cavium ThunderX CN81xx (thunderxt81), Cavium
|
||
ThunderX CN83xx (thunderxt83), Cavium ThunderX CN88xx
|
||
(thunderxt88), Cavium ThunderX CN88xx pass 1.x (thunderxt88p1),
|
||
Cavium ThunderX 2 CN99xx (thunderx2t99), Qualcomm Falkor (falkor).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
|
||
arguments to the equivalent target attributes and pragmas.
|
||
|
||
ARC
|
||
|
||
* Added support for ARC HS and ARC EM processors.
|
||
* Added support for ARC EM variation found in Intel QuarkSE SoCs.
|
||
* Added support for NPS400 ARC700 based CPUs.
|
||
* Thread Local Storage is now supported by ARC CPUs.
|
||
* Fixed errors for ARC600 when using 32x16 multiplier option.
|
||
* Fixed PIE for ARC CPUs.
|
||
* New CPU templates are supported via multilib.
|
||
|
||
ARM
|
||
|
||
* Support for the ARMv5 and ARMv5E architectures has been deprecated
|
||
(which have no known implementations) and will be removed in a
|
||
future GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ
|
||
architectures remain supported. The values armv5 and armv5e of
|
||
-march are thus deprecated.
|
||
* The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
|
||
Extensions are now supported. They can be used by specifying the
|
||
-march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
|
||
Floating-Point Extensions introduce new half-precision data
|
||
processing floating-point instructions.
|
||
* The ARMv8-M architecture is now supported in its two architecture
|
||
profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and
|
||
Floating-Point Extensions. They can be used by specifying the
|
||
-march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses): ARM Cortex-A73 (cortex-a73), ARM
|
||
Cortex-M23 (cortex-m23) and ARM Cortex-M33 (cortex-m33). The GCC
|
||
identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a73 or -mtune=cortex-m33.
|
||
* A new command-line option -mpure-code has been added. It does not
|
||
allow constant data to be placed in code sections. This option is
|
||
only available when generating non-PIC code for ARMv7-M targets.
|
||
* Support for the ACLE Coprocessor Intrinsics has been added. This
|
||
enables the generation of coprocessor instructions through the use
|
||
of intrinsics such as cdp, ldc, and others.
|
||
* The configure option --with-multilib-list now accepts the value
|
||
rmprofile to build multilib libraries for a range of embedded
|
||
targets. See our [16]installation instructions for details.
|
||
|
||
AVR
|
||
|
||
* On the reduced Tiny cores, the progmem [17]variable attribute is
|
||
now properly supported. Respective read-only variables are located
|
||
in flash memory in section .progmem.data. No special code is needed
|
||
to access such variables; the compiler automatically adds an offset
|
||
of 0x4000 to all addresses, which is needed to access variables in
|
||
flash memory. As opposed to ordinary cores where it is sufficient
|
||
to specify the progmem attribute with definitions, on the reduced
|
||
Tiny cores the attribute also has to be specified with (external)
|
||
declarations:
|
||
|
||
extern const int array[] __attribute__((__progmem__));
|
||
|
||
int get_value2 (void)
|
||
{
|
||
/* Access via addresses array + 0x4004 and array + 0x4005. */
|
||
return array[2];
|
||
}
|
||
|
||
const int* get_address (unsigned idx)
|
||
{
|
||
/* Returns array + 0x4000 + 2 * idx. */
|
||
return &array[idx];
|
||
}
|
||
|
||
* A new command-line option -Wmisspelled-isr has been added. It turns
|
||
off — or turns into errors — warnings that are reported for
|
||
interrupt service routines (ISRs) which don't follow AVR-LibC's
|
||
naming convention of prefixing ISR names with __vector.
|
||
* __builtin_avr_nops(n) is a new [18]built-in function that inserts n
|
||
NOP instructions into the instruction stream. n must be a value
|
||
known at compile time.
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for the AVX-512 Fused Multiply Accumulation Packed Single
|
||
precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
|
||
variable precision (4VNNIW), AVX-512 Vector Population Count
|
||
(VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
|
||
been added.
|
||
|
||
NVPTX
|
||
|
||
* OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
|
||
See the [19]Offloading Wiki on how to configure it.
|
||
|
||
PowerPC / PowerPC64 / RS6000
|
||
|
||
* The PowerPC port now uses LRA by default.
|
||
* GCC now diagnoses inline assembly that clobbers register r2. This
|
||
has always been invalid code, and is no longer quietly tolerated.
|
||
* The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been
|
||
enhanced to generate more of the new instructions by default, and
|
||
to provide more built-in functions to generate code for other new
|
||
instructions.
|
||
* The configuration option --enable-gnu-indirect-function is now
|
||
enabled by default on PowerPC GNU/Linux builds.
|
||
* The PowerPC port will now allow 64-bit and 32-bit integer types to
|
||
be allocated to the VSX vector registers (ISA 2.06 and above). In
|
||
addition, on ISA 3.0, 16-bit and 8-bit integer types can be
|
||
allocated in the vector registers. Previously, only 64-bit integer
|
||
types were allowed in the traditional floating point registers.
|
||
* New options -mstack-protector-guard=global,
|
||
-mstack-protector-guard=tls, -mstack-protector-guard-reg=, and
|
||
-mstack-protector-guard-offset= change how the stack protector gets
|
||
the value to use as canary.
|
||
|
||
S/390, System z, IBM z Systems, IBM Z
|
||
|
||
* Support for the IBM z14 processor has been added. When using the
|
||
-march=z14 option, the compiler will generate code making use of
|
||
the new instructions introduced with the vector enhancement
|
||
facility and the miscellaneous instruction extension facility 2.
|
||
The -mtune=z14 option enables z14 specific instruction scheduling
|
||
without making use of new instructions.
|
||
* Builtins for the new vector instructions have been added and can be
|
||
enabled using the -mzvector option.
|
||
|
||
RISC-V
|
||
|
||
* Support for the RISC-V instruction set has been added.
|
||
|
||
RX
|
||
|
||
Basic support for atomic built-in function has been added. It is
|
||
currently implemented by flipping interrupts off and on as needed.
|
||
|
||
SH
|
||
|
||
* Support for SH5/SH64 has been removed.
|
||
* Improved utilization of delay slots on SH2A.
|
||
* Improved utilization of zero-displacement conditional branches.
|
||
* The following deprecated options have been removed
|
||
+ -mcbranchdi
|
||
+ -mcmpeqdi
|
||
+ -minvalid-symbols
|
||
+ -msoft-atomic
|
||
+ -mspace
|
||
+ -madjust-unroll
|
||
* Support for the following SH2A instructions has been added
|
||
+ mov.b @-Rm,R0
|
||
+ mov.w @-Rm,R0
|
||
+ mov.l @-Rm,R0
|
||
+ mov.b R0,@Rn+
|
||
+ mov.w R0,@Rn+
|
||
+ mov.l R0,@Rn+
|
||
|
||
SPARC
|
||
|
||
* The SPARC port now uses LRA by default.
|
||
* Support for the new Subtract-Extended-with-Carry instruction
|
||
available in SPARC M7 (Niagara 7) has been added.
|
||
|
||
Operating Systems
|
||
|
||
AIX
|
||
|
||
* Visibility support has been enabled for AIX 7.1 and above.
|
||
|
||
Fuchsia
|
||
|
||
* Support has been added for the [20]Fuchsia OS.
|
||
|
||
RTEMS
|
||
|
||
* The ABI changes on ARM so that no short enums are used by default.
|
||
|
||
Other significant improvements
|
||
|
||
* -fverbose-asm previously emitted information on the meanings of
|
||
assembly expressions. This has been extended so that it now also
|
||
prints comments showing the source lines that correspond to the
|
||
assembly, making it easier to read the generated assembly
|
||
(especially with larger functions). For example, given this C
|
||
source file:
|
||
|
||
int test (int n)
|
||
{
|
||
int i;
|
||
int total = 0;
|
||
|
||
for (i = 0; i < n; i++)
|
||
total += i * i;
|
||
return total;
|
||
}
|
||
|
||
-fverbose-asm now gives output similar to this for the function
|
||
body (when compiling for x86_64, with -Os):
|
||
|
||
.text
|
||
.globl test
|
||
.type test, @@function
|
||
test:
|
||
.LFB0:
|
||
.cfi_startproc
|
||
# example.c:4: int total = 0;
|
||
xorl %eax, %eax # <retval>
|
||
# example.c:6: for (i = 0; i < n; i++)
|
||
xorl %edx, %edx # i
|
||
.L2:
|
||
# example.c:6: for (i = 0; i < n; i++)
|
||
cmpl %edi, %edx # n, i
|
||
jge .L5 #,
|
||
# example.c:7: total += i * i;
|
||
movl %edx, %ecx # i, tmp92
|
||
imull %edx, %ecx # i, tmp92
|
||
# example.c:6: for (i = 0; i < n; i++)
|
||
incl %edx # i
|
||
# example.c:7: total += i * i;
|
||
addl %ecx, %eax # tmp92, <retval>
|
||
jmp .L2 #
|
||
.L5:
|
||
# example.c:10: }
|
||
ret
|
||
.cfi_endproc
|
||
|
||
* Two new options have been added for printing fix-it hints:
|
||
+ -fdiagnostics-parseable-fixits allows for fix-it hints to be
|
||
emitted in a machine-readable form, suitable for consumption
|
||
by IDEs. For example, given:
|
||
|
||
spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
|
||
you mean 'color'?
|
||
return ptr->colour;
|
||
^~~~~~
|
||
color
|
||
|
||
it will emit:
|
||
|
||
fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
|
||
|
||
+ -fdiagnostics-generate-patch will print a patch in "unified"
|
||
format after any diagnostics are printed, showing the result
|
||
of applying all fix-it hints. For the above example it would
|
||
emit:
|
||
|
||
--- spellcheck-fields.cc
|
||
+++ spellcheck-fields.cc
|
||
@@ -49,5 +49,5 @@
|
||
|
||
color get_color(struct s *ptr)
|
||
{
|
||
- return ptr->colour;
|
||
+ return ptr->color;
|
||
}
|
||
|
||
* The gcc and g++ driver programs will now provide suggestions for
|
||
misspelled arguments to command-line options.
|
||
|
||
$ gcc -c test.c -ftls-model=global-dinamic
|
||
gcc: error: unknown TLS model 'global-dinamic'
|
||
gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec lo
|
||
cal-dynamic local-exec; did you mean 'global-dynamic'?
|
||
|
||
* The compiler will now provide suggestions for misspelled
|
||
parameters.
|
||
|
||
$ gcc -c test.c --param max-early-inliner-iteration=3
|
||
cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'ma
|
||
x-early-inliner-iterations'?
|
||
|
||
* Profile-guided optimization (PGO) instrumentation, as well as test
|
||
coverage (GCOV), can newly instrument constructors (functions marks
|
||
with __attribute__((constructor))), destructors and C++
|
||
constructors (and destructors) of classes that are used as the type
|
||
of a global variable.
|
||
* A new option -fprofile-update=atomic prevents creation of corrupted
|
||
profiles created during an instrumentation run (-fprofile=generate)
|
||
of an application. The downside of the option is a speed penalty.
|
||
Providing -pthread on the command line selects atomic profile
|
||
updating (when supported by the target).
|
||
* GCC's already extensive testsuite has gained some new capabilities,
|
||
to further improve the reliability of the compiler:
|
||
+ GCC now has an internal unit-testing API and a suite of tests
|
||
for programmatic self-testing of subsystems.
|
||
+ GCC's C front end has been extended so that it can parse dumps
|
||
of GCC's internal representations, allowing for DejaGnu tests
|
||
that more directly exercise specific optimization passes. This
|
||
covers both the [21]GIMPLE representation (for testing
|
||
higher-level optimizations) and the [22]RTL representation,
|
||
allowing for more direct testing of lower-level details, such
|
||
as register allocation and instruction selection.
|
||
|
||
GCC 7.1
|
||
|
||
This is the [23]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 7.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 7.2
|
||
|
||
This is the [24]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 7.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
SPARC
|
||
|
||
* Support for the SPARC M8 processor has been added.
|
||
* The switches -mfix-ut700 and -mfix-gr712rc have been added to work
|
||
around an erratum in LEON3FT processors.
|
||
* Use of the Floating-point Multiply Single to Double (FsMULd)
|
||
instruction can now be controlled by the -mfsmuld and -fno-fsmuld
|
||
options.
|
||
|
||
Operating Systems
|
||
|
||
RTEMS
|
||
|
||
* The Ada run-time support uses now thread-local storage (TLS).
|
||
* Support for RISC-V has been added.
|
||
* Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
|
||
double has been added.
|
||
|
||
GCC 7.3
|
||
|
||
This is the [25]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 7.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
SPARC
|
||
|
||
* Workarounds for the four [26]LEON3FT errata GRLIB-TN-0010..0013
|
||
have been added. Relevant errata are activated by the target
|
||
specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
|
||
|
||
Operating Systems
|
||
|
||
RTEMS
|
||
|
||
* Support has been added for Epiphany target.
|
||
|
||
GCC 7.4
|
||
|
||
This is the [27]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 7.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [28]GCC manuals. If that fails, the
|
||
[29]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [30]gcc@gcc.gnu.org. All of [31]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [33]maintained by the GCC team. Last modified
|
||
2018-12-06[34].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-7/porting_to.html
|
||
2. http://gcc.gnu.org/onlinedocs/index.html#current
|
||
3. https://gcc.gnu.org/wiki/LRAIsDefault
|
||
4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
|
||
5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
|
||
6. http://www.dwarfstd.org/Download.php
|
||
7. https://gcc.gnu.org/wiki/OpenACC
|
||
8. https://gcc.gnu.org/wiki/Offloading
|
||
9. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
|
||
10. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
|
||
11. http://wg21.link/p0136
|
||
12. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
|
||
13. https://www.openmp.org/specifications/
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
|
||
16. https://gcc.gnu.org/install/configure.html
|
||
17. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
|
||
19. https://gcc.gnu.org/wiki/Offloading
|
||
20. https://fuchsia.googlesource.com/
|
||
21. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
|
||
23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
|
||
24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
|
||
25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
|
||
26. https://www.gaisler.com/index.php/information/app-tech-notes
|
||
27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
|
||
28. https://gcc.gnu.org/onlinedocs/
|
||
29. mailto:gcc-help@gcc.gnu.org
|
||
30. mailto:gcc@gcc.gnu.org
|
||
31. https://gcc.gnu.org/lists.html
|
||
32. https://www.fsf.org/
|
||
33. https://gcc.gnu.org/about.html
|
||
34. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-6/index.html
|
||
GCC 6 Release Series
|
||
|
||
October 26, 2018
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 6.5.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 6.4 relative to previous releases of GCC.
|
||
|
||
Release History
|
||
|
||
GCC 6.5
|
||
October 26, 2018 ([2]changes, [3]documentation)
|
||
|
||
GCC 6.4
|
||
July 4, 2017 ([4]changes, [5]documentation)
|
||
|
||
GCC 6.3
|
||
December 21, 2016 ([6]changes, [7]documentation)
|
||
|
||
GCC 6.2
|
||
August 22, 2016 ([8]changes, [9]documentation)
|
||
|
||
GCC 6.1
|
||
April 27, 2016 ([10]changes, [11]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [12]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [13]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [14]GCC
|
||
project web site or contact the [15]GCC development mailing list.
|
||
|
||
To obtain GCC please use [16]our mirror sites or [17]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-10-26[24].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-6/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/6.5.0/
|
||
4. http://gcc.gnu.org/gcc-6/changes.html
|
||
5. http://gcc.gnu.org/onlinedocs/6.4.0/
|
||
6. http://gcc.gnu.org/gcc-6/changes.html
|
||
7. http://gcc.gnu.org/onlinedocs/6.3.0/
|
||
8. http://gcc.gnu.org/gcc-6/changes.html
|
||
9. http://gcc.gnu.org/onlinedocs/6.2.0/
|
||
10. http://gcc.gnu.org/gcc-6/changes.html
|
||
11. http://gcc.gnu.org/onlinedocs/6.1.0/
|
||
12. http://gcc.gnu.org/gcc-6/buildstat.html
|
||
13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
14. http://gcc.gnu.org/index.html
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. http://gcc.gnu.org/mirrors.html
|
||
17. http://gcc.gnu.org/svn.html
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-6/changes.html
|
||
GCC 6 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
This page is a brief summary of some of the huge number of improvements
|
||
in GCC 6. For more information, see the [1]Porting to GCC 6 page and
|
||
the [2]full GCC documentation.
|
||
|
||
Caveats
|
||
|
||
* The default mode for C++ is now -std=gnu++14 instead of
|
||
-std=gnu++98.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 6.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ SH5 / SH64 (sh64-*-*) as announced [3]here.
|
||
* The AVR port requires binutils version 2.26.1 or later for the fix
|
||
for [4]PR71151 to work.
|
||
* The GCC 6.5 release has an accidental ABI incompatibility for
|
||
nested std::pair objects, for more details see [5]PR 87822. The bug
|
||
causes a layout change for pairs where the first member is also a
|
||
pair, e.g. std::pair<std::pair<X, Y>, Z>. The GCC 6 release series
|
||
is closed so the bug in GCC 6.5 will not be fixed upstream, but
|
||
there is a patch in the bug report to allow it to be fixed by
|
||
anybody packaging GCC 6.5 or installing it themselves.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* UndefinedBehaviorSanitizer gained a new sanitization option,
|
||
-fsanitize=bounds-strict, which enables strict checking of array
|
||
bounds. In particular, it enables -fsanitize=bounds as well as
|
||
instrumentation of flexible array member-like arrays.
|
||
* Type-based alias analysis now disambiguates accesses to different
|
||
pointers. This improves precision of the alias oracle by about
|
||
20-30% on higher-level C++ programs. Programs doing invalid type
|
||
punning of pointer types may now need -fno-strict-aliasing to work
|
||
correctly.
|
||
* Alias analysis now correctly supports the weakref and alias
|
||
attributes. This allows accessing both a variable and its alias in
|
||
one translation unit which is common with link-time optimization.
|
||
* Value range propagation now assumes that the this pointer in C++
|
||
member functions is non-null. This eliminates common null pointer
|
||
checks but also breaks some non-conforming code-bases (such as
|
||
Qt-5, Chromium, KDevelop). As a temporary work-around
|
||
-fno-delete-null-pointer-checks can be used. Wrong code can be
|
||
identified by using -fsanitize=undefined.
|
||
* Link-time optimization improvements:
|
||
+ warning and error attributes are now correctly preserved by
|
||
declaration linking and thus -D_FORTIFY_SOURCE=2 is now
|
||
supported with -flto.
|
||
+ Type merging was fixed to handle C and Fortran
|
||
interoperability rules as defined by the Fortran 2008 language
|
||
standard.
|
||
As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
|
||
with char in all cases because it is an array while char is
|
||
scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
|
||
general, this inter-operability cannot be implemented, for
|
||
example on targets where the argument passing convention for
|
||
arrays differs from scalars.
|
||
+ More type information is now preserved at link time, reducing
|
||
the loss of accuracy of the type-based alias analysis compared
|
||
to builds without link-time optimization.
|
||
+ Invalid type punning on global variables and declarations is
|
||
now reported with -Wodr-type-mismatch.
|
||
+ The size of LTO object files was reduced by about 11%
|
||
(measured by compiling Firefox 46.0).
|
||
+ Link-time parallelization (enabled using -flto=n) was
|
||
significantly improved by decreasing the size of streamed data
|
||
when partitioning programs. The size of streamed IL while
|
||
compiling Firefox 46.0 was reduced by 66%.
|
||
+ The linker plugin was extended to pass information about the
|
||
type of binary produced to the GCC back end. (That can also be
|
||
controlled manually by -flinker-output.) This makes it
|
||
possible to properly configure the code generator and support
|
||
incremental linking. Incremental linking of LTO objects by gcc
|
||
-r is now supported for plugin-enabled setups.
|
||
There are two ways to perform incremental linking:
|
||
1. Linking by ld -r will result in an object file with all
|
||
sections from individual object files mechanically
|
||
merged. This delays the actual link-time optimization to
|
||
the final linking step and thus permits whole program
|
||
optimization. Linking the final binary with such object
|
||
files is however slower.
|
||
2. Linking by gcc -r will lead to link-time optimization and
|
||
emit the final binary into the object file. Linking such
|
||
an object file is fast but avoids any benefits from whole
|
||
program optimization.
|
||
GCC 7 will support incremental link-time optimization with gcc
|
||
-r.
|
||
* Inter-procedural optimization improvements:
|
||
+ Basic jump threading is now performed before profile
|
||
construction and inline analysis, resulting in more realistic
|
||
size and time estimates that drive the heuristics of the
|
||
inliner and function cloning passes.
|
||
+ Function cloning now more aggressively eliminates unused
|
||
function parameters.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
Compared to GCC 5, the GCC 6 release series includes a much improved
|
||
implementation of the [6]OpenACC 2.0a specification. Highlights are:
|
||
* In addition to single-threaded host-fallback execution, offloading
|
||
is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
|
||
little-endian GNU/Linux host systems. For nvptx offloading, with
|
||
the OpenACC parallel construct, the execution model allows for an
|
||
arbitrary number of gangs, up to 32 workers, and 32 vectors.
|
||
* Initial support for parallelized execution of OpenACC kernels
|
||
constructs:
|
||
+ Parallelization of a kernels region is switched on by
|
||
-fopenacc combined with -O2 or higher.
|
||
+ Code is offloaded onto multiple gangs, but executes with just
|
||
one worker, and a vector length of 1.
|
||
+ Directives inside a kernels region are not supported.
|
||
+ Loops with reductions can be parallelized.
|
||
+ Only kernels regions with one loop nest are parallelized.
|
||
+ Only the outer-most loop of a loop nest can be parallelized.
|
||
+ Loop nests containing sibling loops are not parallelized.
|
||
Typically, using the OpenACC parallel construct gives much better
|
||
performance, compared to the initial support of the OpenACC kernels
|
||
construct.
|
||
* The device_type clause is not supported. The bind and nohost
|
||
clauses are not supported. The host_data directive is not supported
|
||
in Fortran.
|
||
* Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
|
||
* Usage of OpenACC constructs inside multithreaded contexts (such as
|
||
created by OpenMP, or pthread programming) is not supported.
|
||
* If a call to the acc_on_device function has a compile-time constant
|
||
argument, the function call evaluates to a compile-time constant
|
||
value only for C and C++ but not for Fortran.
|
||
|
||
See the [7]OpenACC and [8]Offloading wiki pages for further
|
||
information.
|
||
|
||
C family
|
||
|
||
* Version 4.5 of the [9]OpenMP specification is now supported in the
|
||
C and C++ compilers.
|
||
* The C and C++ compilers now support attributes on enumerators. For
|
||
instance, it is now possible to mark enumerators as deprecated:
|
||
|
||
enum {
|
||
newval,
|
||
oldval __attribute__ ((deprecated ("too old")))
|
||
};
|
||
|
||
* Source locations for the C and C++ compilers are now tracked as
|
||
ranges, rather than just points, making it easier to identify the
|
||
subexpression of interest within a complicated expression. For
|
||
example:
|
||
|
||
test.cc: In function 'int test(int, int, foo, int, int)':
|
||
test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
|
||
)
|
||
return p + q * r * s + t;
|
||
~~^~~
|
||
|
||
In addition, there is now initial support for precise diagnostic
|
||
locations within strings:
|
||
|
||
format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
|
||
t' argument [-Wformat=]
|
||
printf("%*d");
|
||
^
|
||
|
||
* Diagnostics can now contain "fix-it hints", which are displayed in
|
||
context underneath the relevant source code. For example:
|
||
|
||
fixits.c: In function 'bad_deref':
|
||
fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
|
||
return ptr.x;
|
||
^
|
||
->
|
||
|
||
* The C and C++ compilers now offer suggestions for misspelled field
|
||
names:
|
||
|
||
spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
|
||
you mean 'color'?
|
||
return ptr->colour;
|
||
^~~~~~
|
||
|
||
* New command-line options have been added for the C and C++
|
||
compilers:
|
||
+ -Wshift-negative-value warns about left shifting a negative
|
||
value.
|
||
+ -Wshift-overflow warns about left shift overflows. This
|
||
warning is enabled by default. -Wshift-overflow=2 also warns
|
||
about left-shifting 1 into the sign bit.
|
||
+ -Wtautological-compare warns if a self-comparison always
|
||
evaluates to true or false. This warning is enabled by -Wall.
|
||
+ -Wnull-dereference warns if the compiler detects paths that
|
||
trigger erroneous or undefined behavior due to dereferencing a
|
||
null pointer. This option is only active when
|
||
-fdelete-null-pointer-checks is active, which is enabled by
|
||
optimizations in most targets. The precision of the warnings
|
||
depends on the optimization options used.
|
||
+ -Wduplicated-cond warns about duplicated conditions in an
|
||
if-else-if chain.
|
||
+ -Wmisleading-indentation warns about places where the
|
||
indentation of the code gives a misleading idea of the block
|
||
structure of the code to a human reader. For example, given
|
||
[10]CVE-2014-1266:
|
||
|
||
sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
|
||
sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
|
||
g-indentation]
|
||
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
|
||
^~
|
||
sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
|
||
indented as if it is guarded by the 'if'
|
||
goto fail;
|
||
^~~~
|
||
|
||
This warning is enabled by -Wall.
|
||
* The C and C++ compilers now emit saner error messages if
|
||
merge-conflict markers are present in a source file.
|
||
|
||
test.c:3:1: error: version control conflict marker in file
|
||
<<<<<<< HEAD
|
||
^~~~~~~
|
||
|
||
C
|
||
|
||
* It is possible to disable warnings when an initialized field of a
|
||
structure or a union with side effects is being overridden when
|
||
using designated initializers via a new warning option
|
||
-Woverride-init-side-effects.
|
||
* A new type attribute scalar_storage_order applying to structures
|
||
and unions has been introduced. It specifies the storage order (aka
|
||
endianness) in memory of scalar fields in structures or unions.
|
||
|
||
C++
|
||
|
||
* The default mode has been changed to -std=gnu++14.
|
||
* [11]C++ Concepts are now supported when compiling with -fconcepts.
|
||
* -flifetime-dse is more aggressive in dead-store elimination in
|
||
situations where a memory store to a location precedes a
|
||
constructor to that memory location.
|
||
* G++ now supports [12]C++17 fold expressions, u8 character literals,
|
||
extended static_assert, and nested namespace definitions.
|
||
* G++ now allows constant evaluation for all non-type template
|
||
arguments.
|
||
* G++ now supports C++ Transactional Memory when compiling with
|
||
-fgnu-tm.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Extensions to the C++ Library to support mathematical special
|
||
functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
|
||
* Experimental support for C++17, including the following new
|
||
features:
|
||
+ std::uncaught_exceptions function (this is also available for
|
||
-std=gnu++NN modes);
|
||
+ new member functions try_emplace and insert_or_assign for
|
||
unique_key maps;
|
||
+ non-member functions std::size, std::empty, and std::data for
|
||
accessing containers and arrays;
|
||
+ std::invoke;
|
||
+ std::shared_mutex;
|
||
+ std::void_t and std::bool_constant metaprogramming utilities.
|
||
Thanks to Ville Voutilainen for contributing many of the C++17
|
||
features.
|
||
* An experimental implementation of the File System TS.
|
||
* Experimental support for most features of the second version of the
|
||
Library Fundamentals TS. This includes polymorphic memory resources
|
||
and array support in shared_ptr, thanks to Fan You.
|
||
* Some assertions checked by Debug Mode can now also be enabled by
|
||
_GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
|
||
have less run-time overhead than the full _GLIBCXX_DEBUG checks and
|
||
don't affect the library ABI, so can be enabled per-translation
|
||
unit.
|
||
* Timed mutex types are supported on more targets, including Darwin.
|
||
* Improved std::locale support for DragonFly and FreeBSD, thanks to
|
||
John Marino and Andreas Tobler.
|
||
|
||
Fortran
|
||
|
||
* Fortran 2008 SUBMODULE support.
|
||
* Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
|
||
support.
|
||
* Improved support for Fortran 2003 deferred-length character
|
||
variables.
|
||
* Improved support for OpenMP and OpenACC.
|
||
* The MATMUL intrinsic is now inlined for straightforward cases if
|
||
front-end optimization is active. The maximum size for inlining can
|
||
be set to n with the -finline-matmul-limit=n option and turned off
|
||
with -finline-matmul-limit=0.
|
||
* The -Wconversion-extra option will warn about REAL constants which
|
||
have excess precision for their kind.
|
||
* The -Winteger-division option has been added, which warns about
|
||
divisions of integer constants which are truncated. This option is
|
||
included in -Wall by default.
|
||
|
||
libgccjit
|
||
|
||
* The driver code is now run in-process within libgccjit, providing a
|
||
small speed-up of the compilation process.
|
||
* The API has gained entrypoints for
|
||
+ [13]timing how long was spent in different parts of code,
|
||
+ [14]creating switch statements,
|
||
+ [15]allowing unreachable basic blocks in a function, and
|
||
+ [16]adding arbitrary command-line options to a compilation.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64
|
||
|
||
* A number of AArch64-specific options have been added. The most
|
||
important ones are summarised in this section; for more detailed
|
||
information please refer to the documentation.
|
||
* The command-line options -march=native, -mcpu=native and
|
||
-mtune=native are now available on native AArch64 GNU/Linux
|
||
systems. Specifying these options causes GCC to auto-detect the
|
||
host CPU and choose the optimal setting for that system.
|
||
* -fpic is now supported when generating code for the small code
|
||
model (-mcmodel=small). The size of the global offset table (GOT)
|
||
is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
|
||
ILP32 SysV ABI.
|
||
* The AArch64 port now supports target attributes and pragmas. Please
|
||
refer to the [17]documentation for details of available attributes
|
||
and pragmas as well as usage instructions.
|
||
* Link-time optimization across translation units with different
|
||
target-specific options is now supported.
|
||
* The option -mtls-size= is now supported. It can be used to specify
|
||
the bit size of TLS offsets, allowing GCC to generate better TLS
|
||
instruction sequences.
|
||
* The option -fno-plt is now fully functional.
|
||
* The ARMv8.1-A architecture and the Large System Extensions are now
|
||
supported. They can be used by specifying the -march=armv8.1-a
|
||
option. Additionally, the +lse option extension can be used in a
|
||
similar fashion to other option extensions. The Large System
|
||
Extensions introduce new instructions that are used in the
|
||
implementation of atomic operations.
|
||
* The ACLE half-precision floating-point type __fp16 is now supported
|
||
in the C and C++ languages.
|
||
* The ARM Cortex-A35 processor is now supported via the
|
||
-mcpu=cortex-a35 and -mtune=cortex-a35 options as well as the
|
||
equivalent target attributes and pragmas.
|
||
* The Qualcomm QDF24xx processor is now supported via the
|
||
-mcpu=qdf24xx and -mtune=qdf24xx options as well as the equivalent
|
||
target attributes and pragmas.
|
||
* Code generation for the ARM Cortex-A57 processor is improved. Among
|
||
general code generation improvements, a better algorithm is added
|
||
for allocating registers to floating-point multiply-accumulate
|
||
instructions offering increased performance when compiling with
|
||
-mcpu=cortex-a57 or -mtune=cortex-a57.
|
||
* Code generation for the ARM Cortex-A53 processor is improved. A
|
||
more accurate instruction scheduling model for the processor is now
|
||
used, and a number of compiler tuning parameters have been set to
|
||
offer increased performance when compiling with -mcpu=cortex-a53 or
|
||
-mtune=cortex-a53.
|
||
* Code generation for the Samsung Exynos M1 processor is improved. A
|
||
more accurate instruction scheduling model for the processor is now
|
||
used, and a number of compiler tuning parameters have been set to
|
||
offer increased performance when compiling with -mcpu=exynos-m1 or
|
||
-mtune=exynos-m1.
|
||
* Improvements in the generation of conditional branches and literal
|
||
pools allow the compiler to compile functions of a large size.
|
||
Constant pools are now placed into separate rodata sections. The
|
||
new option -mpc-relative-literal-loads generates per-function
|
||
literal pools, limiting the maximum size of functions to 1MiB.
|
||
* Several correctness issues generating Advanced SIMD instructions
|
||
for big-endian targets have been fixed resulting in improved code
|
||
generation for ACLE intrinsics with -mbig-endian.
|
||
|
||
ARM
|
||
|
||
* Support for revisions of the ARM architecture prior to ARMv4t has
|
||
been deprecated and will be removed in a future GCC release. The
|
||
-mcpu and -mtune values that are deprecated are: arm2, arm250,
|
||
arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
|
||
arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
|
||
arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
|
||
strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
|
||
arm7tdmi is still supported. The values of -march that are
|
||
deprecated are: armv2,armv2a,armv3,armv3m,armv4.
|
||
* The ARM port now supports target attributes and pragmas. Please
|
||
refer to the [18]documentation for details of available attributes
|
||
and pragmas as well as usage instructions.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
|
||
Cortex-A35 (cortex-a35) and ARM Cortex-R8 (cortex-r8). The GCC
|
||
identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
|
||
|
||
Heterogeneous Systems Architecture
|
||
|
||
* GCC can now generate HSAIL (Heterogeneous System Architecture
|
||
Intermediate Language) for simple OpenMP device constructs if
|
||
configured with --enable-offload-targets=hsa. A new libgomp plugin
|
||
then runs the HSA GPU kernels implementing these constructs on HSA
|
||
capable GPUs via a standard HSA run time.
|
||
If the HSA compilation back end determines it cannot output HSAIL
|
||
for a particular input, it gives a warning by default. These
|
||
warnings can be suppressed with -Wno-hsa. To give a few examples,
|
||
the HSA back end does not implement compilation of code using
|
||
function pointers, automatic allocation of variable sized arrays,
|
||
functions with variadic arguments as well as a number of other less
|
||
common programming constructs.
|
||
When compilation for HSA is enabled, the compiler attempts to
|
||
compile composite OpenMP constructs
|
||
|
||
#pragma omp target teams distribute parallel for
|
||
|
||
into parallel HSA GPU kernels.
|
||
|
||
IA-32/x86-64
|
||
|
||
* GCC now supports the Intel CPU named Skylake with AVX-512
|
||
extensions through -march=skylake-avx512. The switch enables the
|
||
following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
|
||
AVX-512DQ.
|
||
* Support for new AMD instructions monitorx and mwaitx has been
|
||
added. This includes new intrinsic and built-in support. It is
|
||
enabled through option -mmwaitx. The instructions monitorx and
|
||
mwaitx implement the same functionality as the old monitor and
|
||
mwait instructions. In addition mwaitx adds a configurable timer.
|
||
The timer value is received as third argument and stored in
|
||
register %ebx.
|
||
* x86-64 targets now allow stack realignment from a word-aligned
|
||
stack pointer using the command-line option -mstackrealign or
|
||
__attribute__ ((force_align_arg_pointer)). This allows functions
|
||
compiled with a vector-aligned stack to be invoked from objects
|
||
that keep only word-alignment.
|
||
* Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
|
||
can be used to access data via the %fs and %gs segments without
|
||
having to resort to inline assembly. Please refer to the
|
||
[19]documentation for usage instructions.
|
||
* Support for AMD Zen (family 17h) processors is now available
|
||
through the -march=znver1 and -mtune=znver1 options.
|
||
|
||
MeP
|
||
|
||
* Support for the MeP (mep-elf) architecture has been deprecated and
|
||
will be removed in a future GCC release.
|
||
|
||
MSP430
|
||
|
||
* The MSP430 compiler now has the ability to automatically distribute
|
||
code and data between low memory (addresses below 64K) and high
|
||
memory. This only applies to parts that actually have both memory
|
||
regions and only if the linker script for the part has been
|
||
specifically set up to support this feature.
|
||
A new attribute of either can be applied to both functions and
|
||
data, and this tells the compiler to place the object into low
|
||
memory if there is room and into high memory otherwise. Two other
|
||
new attributes - lower and upper - can be used to explicitly state
|
||
that an object should be placed in the specified memory region. If
|
||
there is not enough left in that region the compilation will fail.
|
||
Two new command-line options - -mcode-region=[lower|upper|either]
|
||
and -mdata-region=[lower|upper|either] - can be used to tell the
|
||
compiler what to do with objects that do not have one of these new
|
||
attributes.
|
||
|
||
PowerPC / PowerPC64 / RS6000
|
||
|
||
* PowerPC64 now supports IEEE 128-bit floating-point using the
|
||
__float128 data type. In GCC 6, this is not enabled by default, but
|
||
you can enable it with -mfloat128. The IEEE 128-bit floating-point
|
||
support requires the use of the VSX instruction set. IEEE 128-bit
|
||
floating-point values are passed and returned as a single vector
|
||
value. The software emulator for IEEE 128-bit floating-point
|
||
support is only built on PowerPC GNU/Linux systems where the
|
||
default CPU is at least power7. On future ISA 3.0 systems (POWER 9
|
||
and later), you will be able to use the -mfloat128-hardware option
|
||
to use the ISA 3.0 instructions that support IEEE 128-bit
|
||
floating-point. An additional type (__ibm128) has been added to
|
||
refer to the IBM extended double type that normally implements long
|
||
double. This will allow for a future transition to implementing
|
||
long double with IEEE 128-bit floating-point.
|
||
* Basic support has been added for POWER9 hardware that will use the
|
||
recently published OpenPOWER ISA 3.0 instructions. The following
|
||
new switches are available:
|
||
+ -mcpu=power9: Implement all of the ISA 3.0 instructions
|
||
supported by the compiler.
|
||
+ -mtune=power9: In the future, apply tuning for POWER9 systems.
|
||
Currently, POWER8 tunings are used.
|
||
+ -mmodulo: Generate code using the ISA 3.0 integer instructions
|
||
(modulus, count trailing zeros, array index support, integer
|
||
multiply/add).
|
||
+ -mpower9-fusion: Generate code to suitably fuse instruction
|
||
sequences for a POWER9 system.
|
||
+ -mpower9-dform: Generate code to use the new D-form
|
||
(register+offset) memory instructions for the vector
|
||
registers.
|
||
+ -mpower9-vector: Generate code using the new ISA 3.0 vector
|
||
(VSX or Altivec) instructions.
|
||
+ -mpower9-minmax: Reserved for future development.
|
||
+ -mtoc-fusion: Keep TOC entries together to provide more fusion
|
||
opportunities.
|
||
* New constraints have been added to support IEEE 128-bit
|
||
floating-point and ISA 3.0 instructions:
|
||
+ wb: Altivec register if -mpower9-dform is enabled.
|
||
+ we: VSX register if -mpower9-vector is enabled for 64-bit code
|
||
generation.
|
||
+ wo: VSX register if -mpower9-vector is enabled.
|
||
+ wp: Reserved for future use if long double is implemented with
|
||
IEEE 128-bit floating-point instead of IBM extended double.
|
||
+ wq: VSX register if -mfloat128 is enabled.
|
||
+ wF: Memory operand suitable for POWER9 fusion load/store.
|
||
+ wG: Memory operand suitable for TOC fusion memory references.
|
||
+ wL: Integer constant identifying the element number mfvsrld
|
||
accesses within a vector.
|
||
* Support has been added for __builtin_cpu_is() and
|
||
__builtin_cpu_supports(), allowing for very fast access to
|
||
AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
|
||
glibc 2.23 or later.
|
||
* All hardware transactional memory builtins now correctly behave as
|
||
memory barriers. Programmers can use #ifdef __TM_FENCE__ to
|
||
determine whether their "old" compiler treats the builtins as
|
||
barriers.
|
||
* Split-stack support has been added for gccgo on PowerPC64 for both
|
||
big- and little-endian (but not for 32-bit). The gold linker from
|
||
at least binutils 2.25.1 must be available in the PATH when
|
||
configuring and building gccgo to enable split stack. (The
|
||
requirement for binutils 2.25.1 applies to PowerPC64 only.) The
|
||
split-stack feature allows a small initial stack size to be
|
||
allocated for each goroutine, which increases as needed.
|
||
* GCC on PowerPC now supports the standard lround function.
|
||
* A new configuration option ---with-advance-toolchain=at was added
|
||
for PowerPC 64-bit GNU/Linux systems to use the header files,
|
||
library files, and the dynamic linker from a specific Advance
|
||
Toolchain release instead of the default versions that are provided
|
||
by the GNU/Linux distribution. In general, this option is intended
|
||
for the developers of GCC, and it is not intended for general use.
|
||
* The "q", "S", "T", and "t" asm-constraints have been removed.
|
||
* The "b", "B", "m", "M", and "W" format modifiers have been removed.
|
||
|
||
S/390, System z, IBM z Systems
|
||
|
||
* Support for the IBM z13 processor has been added. When using the
|
||
-march=z13 option, the compiler will generate code making use of
|
||
the new instructions and registers introduced with the vector
|
||
extension facility. The -mtune=z13 option enables z13 specific
|
||
instruction scheduling without making use of new instructions.
|
||
Compiling code with -march=z13 reduces the default alignment of
|
||
vector types bigger than 8 bytes to 8. This is an ABI change and
|
||
care must be taken when linking modules compiled with different
|
||
arch levels which interchange variables containing vector type
|
||
values. For newly compiled code the GNU linker will emit a warning.
|
||
* The -mzvector option enables a C/C++ language extension. This
|
||
extension provides a new keyword vector which can be used to define
|
||
vector type variables. (Note: This is not available when enforcing
|
||
strict standard compliance e.g. with -std=c99. Either enable GNU
|
||
extensions with e.g. -std=gnu99 or use __vector instead of vector.)
|
||
Additionally a set of overloaded builtins is provided which is
|
||
partially compatible to the PowerPC Altivec builtins. In order to
|
||
make use of these builtins the vecintrin.h header file needs to be
|
||
included.
|
||
* The new command-line options -march=native, and -mtune=native are
|
||
now available on native IBM z Systems. Specifying these options
|
||
causes GCC to auto-detect the host CPU and choose the optimal
|
||
setting for that system. If GCC is unable to detect the host CPU
|
||
these options have no effect.
|
||
* The IBM z Systems port now supports target attributes and pragmas.
|
||
Please refer to the [20]documentation for details of available
|
||
attributes and pragmas as well as usage instructions.
|
||
* -fsplit-stack is now supported as part of the IBM z Systems port.
|
||
This feature requires a recent gold linker to be used.
|
||
* Support for the g5 and g6 -march=/-mtune= CPU level switches has
|
||
been deprecated and will be removed in a future GCC release. -m31
|
||
from now on defaults to -march=z900 if not specified otherwise.
|
||
-march=native on a g5/g6 machine will default to -march=z900.
|
||
|
||
SH
|
||
|
||
* Support for SH5 / SH64 has been declared obsolete and will be
|
||
removed in future releases.
|
||
* Support for the FDPIC ABI has been added. It can be enabled using
|
||
the new -mfdpic target option and --enable-fdpic configure option.
|
||
|
||
SPARC
|
||
|
||
* An ABI bug has been fixed in 64-bit mode. Unfortunately, this
|
||
change will break binary compatibility with earlier releases for
|
||
code it affects, but this should be pretty rare in practice. The
|
||
conditions are: a 16-byte structure containing a double or a 8-byte
|
||
vector in the second half is passed to a subprogram in slot #15,
|
||
for example as 16th parameter if the first 15 ones have at most 8
|
||
bytes. The double or vector was wrongly passed in floating-point
|
||
register %d32 in lieu of on the stack as per the SPARC calling
|
||
conventions.
|
||
|
||
Operating Systems
|
||
|
||
AIX
|
||
|
||
* DWARF debugging support for AIX 7.1 has been enabled as an optional
|
||
debugging format. A more recent Technology Level (TL) and GCC built
|
||
with that level are required for full exploitation of DWARF
|
||
debugging capabilities.
|
||
|
||
Linux
|
||
|
||
* Support for the [21]musl C library was added for the AArch64, ARM,
|
||
MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
|
||
x86_64 targets. It can be selected using the new -mmusl option in
|
||
case musl is not the default libc. GCC defaults to musl libc if it
|
||
is built with a target triplet matching the *-linux-musl* pattern.
|
||
|
||
RTEMS
|
||
|
||
* The RTEMS thread model implementation changed. Mutexes now use
|
||
self-contained objects defined in Newlib <sys/lock.h> instead of
|
||
Classic API semaphores. The keys for thread specific data and the
|
||
once function are directly defined via <pthread.h>. Self-contained
|
||
condition variables are provided via Newlib <sys/lock.h>. The RTEMS
|
||
thread model also supports C++11 threads.
|
||
* OpenMP support now uses self-contained objects provided by Newlib
|
||
<sys/lock.h> and offers a significantly better performance compared
|
||
to the POSIX configuration of libgomp. It is possible to configure
|
||
thread pools for each scheduler instance via the environment
|
||
variable GOMP_RTEMS_THREAD_POOLS.
|
||
|
||
Solaris
|
||
|
||
* Solaris 12 is now fully supported. Minimal support had already been
|
||
present in GCC 5.3.
|
||
* Solaris 12 provides a full set of startup files (crt1.o, crti.o,
|
||
crtn.o), which GCC now prefers over its own ones.
|
||
* Position independent executables (PIE) are now supported on Solaris
|
||
12.
|
||
* Constructor priority is now supported on Solaris 12 with the system
|
||
linker.
|
||
* libvtv has been ported to Solaris 11 and up.
|
||
|
||
Windows
|
||
|
||
* The option -mstackrealign is now automatically activated in 32-bit
|
||
mode whenever the use of SSE instructions is requested.
|
||
|
||
Other significant improvements
|
||
|
||
* The gcc and g++ driver programs will now provide suggestions for
|
||
misspelled command-line options.
|
||
|
||
$ gcc -static-libfortran test.f95
|
||
gcc: error: unrecognized command line option '-static-libfortran'; did you mean
|
||
'-static-libgfortran'?
|
||
|
||
* The --enable-default-pie configure option enables generation of PIE
|
||
by default.
|
||
|
||
GCC 6.2
|
||
|
||
This is the [22]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 6.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
SPARC
|
||
|
||
* Support for --with-cpu-32 and --with-cpu-64 configure options has
|
||
been added on bi-architecture platforms.
|
||
* Support for the SPARC M7 (Niagara 7) processor has been added.
|
||
* Support for the VIS 4.0 instruction set has been added.
|
||
|
||
GCC 6.3
|
||
|
||
This is the [23]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 6.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for the [24]deprecated pcommit instruction has been
|
||
removed.
|
||
|
||
GCC 6.4
|
||
|
||
This is the [25]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 6.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Operating Systems
|
||
|
||
RTEMS
|
||
|
||
* The ABI changes on ARM so that no short enums are used by default.
|
||
|
||
GCC 6.5
|
||
|
||
This is the [26]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 6.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [27]GCC manuals. If that fails, the
|
||
[28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [32]maintained by the GCC team. Last modified
|
||
2018-10-31[33].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-6/porting_to.html
|
||
2. http://gcc.gnu.org/onlinedocs/index.html#current
|
||
3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
|
||
4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
|
||
5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
|
||
6. https://www.openacc.org/
|
||
7. https://gcc.gnu.org/wiki/OpenACC
|
||
8. https://gcc.gnu.org/wiki/Offloading
|
||
9. https://www.openmp.org/specifications/
|
||
10. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
|
||
11. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
|
||
12. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
|
||
13. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
|
||
16. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
|
||
17. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
|
||
21. http://www.musl-libc.org/
|
||
22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
|
||
23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
|
||
24. https://software.intel.com/en-us/blogs/2016/09/12/deprecate-pcommit-instruction
|
||
25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
|
||
26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
|
||
27. https://gcc.gnu.org/onlinedocs/
|
||
28. mailto:gcc-help@gcc.gnu.org
|
||
29. mailto:gcc@gcc.gnu.org
|
||
30. https://gcc.gnu.org/lists.html
|
||
31. https://www.fsf.org/
|
||
32. https://gcc.gnu.org/about.html
|
||
33. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-5/index.html
|
||
GCC 5 Release Series
|
||
|
||
October 10, 2017
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 5.5.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 5.4 relative to previous releases of GCC.
|
||
|
||
Release History
|
||
|
||
GCC 5.5
|
||
October 10, 2017 ([2]changes, [3]documentation)
|
||
|
||
GCC 5.4
|
||
June 3, 2016 ([4]changes, [5]documentation)
|
||
|
||
GCC 5.3
|
||
December 4, 2015 ([6]changes, [7]documentation)
|
||
|
||
GCC 5.2
|
||
July 16, 2015 ([8]changes, [9]documentation)
|
||
|
||
GCC 5.1
|
||
April 22, 2015 ([10]changes, [11]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [12]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [13]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [14]GCC
|
||
project web site or contact the [15]GCC development mailing list.
|
||
|
||
To obtain GCC please use [16]our mirror sites or [17]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-09-30[24].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-5/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/5.5.0/
|
||
4. http://gcc.gnu.org/gcc-5/changes.html
|
||
5. http://gcc.gnu.org/onlinedocs/5.4.0/
|
||
6. http://gcc.gnu.org/gcc-5/changes.html
|
||
7. http://gcc.gnu.org/onlinedocs/5.3.0/
|
||
8. http://gcc.gnu.org/gcc-5/changes.html
|
||
9. http://gcc.gnu.org/onlinedocs/5.2.0/
|
||
10. http://gcc.gnu.org/gcc-5/changes.html
|
||
11. http://gcc.gnu.org/onlinedocs/5.1.0/
|
||
12. http://gcc.gnu.org/gcc-5/buildstat.html
|
||
13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
14. http://gcc.gnu.org/index.html
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. http://gcc.gnu.org/mirrors.html
|
||
17. http://gcc.gnu.org/svn.html
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-5/changes.html
|
||
GCC 5 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* The default mode for C is now -std=gnu11 instead of -std=gnu89.
|
||
* The C++ runtime library (libstdc++) uses a new ABI by default (see
|
||
[1]below).
|
||
* The Graphite framework for loop optimizations no longer requires
|
||
the CLooG library, only ISL version 0.14 (recommended) or 0.12.2.
|
||
The installation manual contains more information about
|
||
requirements to build GCC.
|
||
* The non-standard C++0x type traits has_trivial_default_constructor,
|
||
has_trivial_copy_constructor and has_trivial_copy_assign have been
|
||
deprecated and will be removed in a future version. The standard
|
||
C++11 traits is_trivially_default_constructible,
|
||
is_trivially_copy_constructible and is_trivially_copy_assignable
|
||
should be used instead.
|
||
* On AVR, support has been added for the devices
|
||
ATtiny4/5/9/10/20/40. This requires Binutils 2.25 or newer.
|
||
* The AVR port uses a new scheme to describe supported devices: For
|
||
each supported device the compiler provides a device-specific
|
||
[2]spec file. If the compiler is used together with AVR-LibC, this
|
||
requires at least GCC 5.2 and a version of AVR-LibC which
|
||
implements [3]feature #44574.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* Inter-procedural optimization improvements:
|
||
+ An Identical Code Folding (ICF) pass (controlled via
|
||
-fipa-icf) has been added. Compared to the identical code
|
||
folding performed by the Gold linker this pass does not
|
||
require function sections. It also performs merging before
|
||
inlining, so inter-procedural optimizations are aware of the
|
||
code re-use. On the other hand not all unifications performed
|
||
by a linker are doable by GCC which must honor aliasing
|
||
information. During link-time optimization of Firefox, this
|
||
pass unifies about 31000 functions, that is 14% overall.
|
||
+ The devirtualization pass was significantly improved by adding
|
||
better support for speculative devirtualization and dynamic
|
||
type detection. About 50% of virtual calls in Firefox are now
|
||
speculatively devirtualized during link-time optimization.
|
||
+ A new comdat localization pass allows the linker to eliminate
|
||
more dead code in presence of C++ inline functions.
|
||
+ Virtual tables are now optimized. Local aliases are used to
|
||
reduce dynamic linking time of C++ virtual tables on ELF
|
||
targets and data alignment has been reduced to limit data
|
||
segment bloat.
|
||
+ A new -fno-semantic-interposition option can be used to
|
||
improve code quality of shared libraries where interposition
|
||
of exported symbols is not allowed.
|
||
+ Write-only variables are now detected and optimized out.
|
||
+ With profile feedback the function inliner can now bypass
|
||
--param inline-insns-auto and --param inline-insns-single
|
||
limits for hot calls.
|
||
+ The IPA reference pass was significantly sped up making it
|
||
feasible to enable -fipa-reference with -fprofile-generate.
|
||
This also solves a bottleneck seen when building Chromium with
|
||
link-time optimization.
|
||
+ The symbol table and call-graph API was reworked to C++ and
|
||
simplified.
|
||
+ The interprocedural propagation of constants now also
|
||
propagates alignments of pointer parameters. This for example
|
||
means that the vectorizer often does not need to generate loop
|
||
prologues and epilogues to make up for potential
|
||
misalignments.
|
||
* Link-time optimization improvements:
|
||
+ One Definition Rule based merging of C++ types has been
|
||
implemented. Type merging enables better devirtualization and
|
||
alias analysis. Streaming extra information needed to merge
|
||
types adds about 2-6% of memory size and object size increase.
|
||
This can be controlled by -flto-odr-type-merging.
|
||
+ Command-line optimization and target options are now streamed
|
||
on a per-function basis and honored by the link-time
|
||
optimizer. This change makes link-time optimization a more
|
||
transparent replacement of per-file optimizations. It is now
|
||
possible to build projects that require different optimization
|
||
settings for different translation units (such as -ffast-math,
|
||
-mavx, or -finline). Contrary to earlier GCC releases, the
|
||
optimization and target options passed on the link command
|
||
line are ignored.
|
||
Note that this applies only to those command-line options that
|
||
can be passed to optimize and target attributes. Command-line
|
||
options affecting global code generation (such as -fpic),
|
||
warnings (such as -Wodr), optimizations affecting the way
|
||
static variables are optimized (such as -fcommon), debug
|
||
output (such as -g), and --param parameters can be applied
|
||
only to the whole link-time optimization unit. In these cases,
|
||
it is recommended to consistently use the same options at both
|
||
compile time and link time.
|
||
+ GCC bootstrap now uses slim LTO object files.
|
||
+ Memory usage and link times were improved. Tree merging was
|
||
sped up, memory usage of GIMPLE declarations and types was
|
||
reduced, and, support for on-demand streaming of variable
|
||
constructors was added.
|
||
* Feedback directed optimization improvements:
|
||
+ A new auto-FDO mode uses profiles collected by low overhead
|
||
profiling tools (perf) instead of more expensive program
|
||
instrumentation (via -fprofile-generate). SPEC2006 benchmarks
|
||
on x86-64 improve by 4.7% with auto-FDO and by 7.3% with
|
||
traditional feedback directed optimization.
|
||
+ Profile precision was improved in presence of C++ inline and
|
||
extern inline functions.
|
||
+ The new gcov-tool utility allows manipulating profiles.
|
||
+ Profiles are now more tolerant to source file changes (this
|
||
can be controlled by --param profile-func-internal-id).
|
||
* Register allocation improvements:
|
||
+ A new local register allocator (LRA) sub-pass, controlled by
|
||
-flra-remat, implements control-flow sensitive global register
|
||
rematerialization. Instead of spilling and restoring a
|
||
register value, it is recalculated if it is profitable. The
|
||
sub-pass improved SPEC2000 generated code by 1% and 0.5%
|
||
correspondingly on ARM and x86-64.
|
||
+ Reuse of the PIC hard register, instead of using a fixed
|
||
register, was implemented on x86/x86-64 targets. This improves
|
||
generated PIC code performance as more hard registers can be
|
||
used. Shared libraries can significantly benefit from this
|
||
optimization. Currently it is switched on only for x86/x86-64
|
||
targets. As RA infrastructure is already implemented for PIC
|
||
register reuse, other targets might follow this in the future.
|
||
+ A simple form of inter-procedural RA was implemented. When it
|
||
is known that a called function does not use caller-saved
|
||
registers, save/restore code is not generated around the call
|
||
for such registers. This optimization can be controlled by
|
||
-fipa-ra
|
||
+ LRA is now much more effective at generating spills of general
|
||
registers into vector registers instead of memory on
|
||
architectures (e.g., modern Intel processors) where this is
|
||
profitable.
|
||
* UndefinedBehaviorSanitizer gained a few new sanitization options:
|
||
+ -fsanitize=float-divide-by-zero: detect floating-point
|
||
division by zero;
|
||
+ -fsanitize=float-cast-overflow: check that the result of
|
||
floating-point type to integer conversions do not overflow;
|
||
+ -fsanitize=bounds: enable instrumentation of array bounds and
|
||
detect out-of-bounds accesses;
|
||
+ -fsanitize=alignment: enable alignment checking, detect
|
||
various misaligned objects;
|
||
+ -fsanitize=object-size: enable object size checking, detect
|
||
various out-of-bounds accesses.
|
||
+ -fsanitize=vptr: enable checking of C++ member function calls,
|
||
member accesses and some conversions between pointers to base
|
||
and derived classes, detect if the referenced object does not
|
||
have the correct dynamic type.
|
||
* Pointer Bounds Checker, a bounds violation detector, has been added
|
||
and can be enabled via -fcheck-pointer-bounds. Memory accesses are
|
||
instrumented with run-time checks of used pointers against their
|
||
bounds to detect pointer bounds violations (overflows). The Pointer
|
||
Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
|
||
new ISA extension Intel MPX support. See the Pointer Bounds Checker
|
||
[4]Wiki page for more details.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* [5]OpenMP 4.0 specification offloading features are now supported
|
||
by the C, C++, and Fortran compilers. Generic changes:
|
||
+ Infrastructure (suitable for any vendor).
|
||
+ Testsuite which covers offloading from the [6]OpenMP 4.0
|
||
Examples document.
|
||
Specific for upcoming Intel Xeon Phi products:
|
||
+ Run-time library.
|
||
+ Card emulator.
|
||
* GCC 5 includes a preliminary implementation of the OpenACC 2.0a
|
||
specification. OpenACC is intended for programming accelerator
|
||
devices such as GPUs. See [7]the OpenACC wiki page for more
|
||
information.
|
||
|
||
C family
|
||
|
||
* The default setting of the -fdiagnostics-color= command-line option
|
||
is now [8]configurable when building GCC using configuration option
|
||
--with-diagnostics-color=. The possible values are: never, always,
|
||
auto and auto-if-env. The new default auto uses color only when the
|
||
standard error is a terminal. The default in GCC 4.9 was
|
||
auto-if-env, which is equivalent to auto if there is a non-empty
|
||
GCC_COLORS environment variable, and never otherwise. As in GCC
|
||
4.9, an empty GCC_COLORS variable in the environment will always
|
||
disable colors, no matter what the default is or what command-line
|
||
options are used.
|
||
* A new command-line option -Wswitch-bool has been added for the C
|
||
and C++ compilers, which warns whenever a switch statement has an
|
||
index of boolean type.
|
||
* A new command-line option -Wlogical-not-parentheses has been added
|
||
for the C and C++ compilers, which warns about "logical not" used
|
||
on the left hand side operand of a comparison.
|
||
* A new command-line option -Wsizeof-array-argument has been added
|
||
for the C and C++ compilers, which warns when the sizeof operator
|
||
is applied to a parameter that has been declared as an array in a
|
||
function definition.
|
||
* A new command-line option -Wbool-compare has been added for the C
|
||
and C++ compilers, which warns about boolean expressions compared
|
||
with an integer value different from true/false.
|
||
* Full support for [9]Cilk Plus has been added to the GCC compiler.
|
||
Cilk Plus is an extension to the C and C++ languages to support
|
||
data and task parallelism.
|
||
* A new attribute no_reorder prevents reordering of selected symbols
|
||
against other such symbols or inline assembler. This enables to
|
||
link-time optimize the Linux kernel without having to resort to
|
||
-fno-toplevel-reorder that disables several optimizations.
|
||
* New preprocessor constructs, __has_include and __has_include_next,
|
||
to test the availability of headers have been added.
|
||
This demonstrates a way to include the header <optional> only if it
|
||
is available:
|
||
|
||
#ifdef __has_include
|
||
# if __has_include(<optional>)
|
||
# include <optional>
|
||
# define have_optional 1
|
||
# elif __has_include(<experimental/optional>)
|
||
# include <experimental/optional>
|
||
# define have_optional 1
|
||
# define experimental_optional
|
||
# else
|
||
# define have_optional 0
|
||
# endif
|
||
#endif
|
||
|
||
The header search paths for __has_include and __has_include_next
|
||
are equivalent to those of the standard directive #include and the
|
||
extension #include_next respectively.
|
||
* A new built-in function-like macro to determine the existence of an
|
||
attribute, __has_attribute, has been added. The equivalent built-in
|
||
macro __has_cpp_attribute was added to C++ to support
|
||
[10]Feature-testing recommendations for C++. The macro
|
||
__has_attribute is added to all C-like languages as an extension:
|
||
|
||
int
|
||
#ifdef __has_attribute
|
||
# if __has_attribute(__noinline__)
|
||
__attribute__((__noinline__))
|
||
# endif
|
||
#endif
|
||
foo(int x);
|
||
|
||
If an attribute exists, a nonzero constant integer is returned. For
|
||
standardized C++ attributes a date is returned, otherwise the
|
||
constant returned is 1. Both __has_attribute and
|
||
__has_cpp_attribute will add underscores to an attribute name if
|
||
necessary to resolve the name. For C++11 and onwards the attribute
|
||
may be scoped.
|
||
* A new set of built-in functions for arithmetics with overflow
|
||
checking has been added: __builtin_add_overflow,
|
||
__builtin_sub_overflow and __builtin_mul_overflow and for
|
||
compatibility with clang also other variants. These builtins have
|
||
two integral arguments (which don't need to have the same type),
|
||
the arguments are extended to infinite precision signed type, +, -
|
||
or * is performed on those, and the result is stored in an integer
|
||
variable pointed to by the last argument. If the stored value is
|
||
equal to the infinite precision result, the built-in functions
|
||
return false, otherwise true. The type of the integer variable that
|
||
will hold the result can be different from the types of the first
|
||
two arguments. The following snippet demonstrates how this can be
|
||
used in computing the size for the calloc function:
|
||
|
||
void *
|
||
calloc (size_t x, size_t y)
|
||
{
|
||
size_t sz;
|
||
if (__builtin_mul_overflow (x, y, &sz))
|
||
return NULL;
|
||
void *ret = malloc (sz);
|
||
if (ret) memset (res, 0, sz);
|
||
return ret;
|
||
}
|
||
|
||
On e.g. i?86 or x86-64 the above will result in a mul instruction
|
||
followed by a jump on overflow.
|
||
* The option -fextended-identifiers is now enabled by default for
|
||
C++, and for C99 and later C versions. Various bugs in the
|
||
implementation of extended identifiers have been fixed.
|
||
|
||
C
|
||
|
||
* The default mode has been changed to -std=gnu11.
|
||
* A new command-line option -Wc90-c99-compat has been added to warn
|
||
about features not present in ISO C90, but present in ISO C99.
|
||
* A new command-line option -Wc99-c11-compat has been added to warn
|
||
about features not present in ISO C99, but present in ISO C11.
|
||
* It is possible to disable warnings about conversions between
|
||
pointers that have incompatible types via a new warning option
|
||
-Wno-incompatible-pointer-types; warnings about implicit
|
||
incompatible integer to pointer and pointer to integer conversions
|
||
via a new warning option -Wno-int-conversion; and warnings about
|
||
qualifiers on pointers being discarded via a new warning option
|
||
-Wno-discarded-qualifiers.
|
||
* To allow proper use of const qualifiers with multidimensional
|
||
arrays, GCC will not warn about incompatible pointer types anymore
|
||
for conversions between pointers to arrays with and without const
|
||
qualifier (except when using -pedantic). Instead, a new warning is
|
||
emitted only if the const qualifier is lost. This can be controlled
|
||
with a new warning option -Wno-discarded-array-qualifiers.
|
||
* The C front end now generates more precise caret diagnostics.
|
||
* The -pg command-line option now only affects the current file in an
|
||
LTO build.
|
||
|
||
C++
|
||
|
||
* G++ now supports [11]C++14 variable templates.
|
||
* -Wnon-virtual-dtor doesn't warn anymore for final classes.
|
||
* Excessive template instantiation depth is now a fatal error. This
|
||
prevents excessive diagnostics that usually do not help to identify
|
||
the problem.
|
||
* G++ and libstdc++ now implement the feature-testing macros from
|
||
[12]Feature-testing recommendations for C++.
|
||
* G++ now allows typename in a template template parameter.
|
||
|
||
template<template<typename> typename X> struct D; // OK
|
||
|
||
* G++ now supports [13]C++14 aggregates with non-static data member
|
||
initializers.
|
||
|
||
struct A { int i, j = i; };
|
||
A a = { 42 }; // a.j is also 42
|
||
|
||
* G++ now supports [14]C++14 extended constexpr.
|
||
|
||
constexpr int f (int i)
|
||
{
|
||
int j = 0;
|
||
for (; i > 0; --i)
|
||
++j;
|
||
return j;
|
||
}
|
||
|
||
constexpr int i = f(42); // i is 42
|
||
|
||
* G++ now supports the [15]C++14 sized deallocation functions.
|
||
|
||
void operator delete (void *, std::size_t) noexcept;
|
||
void operator delete[] (void *, std::size_t) noexcept;
|
||
|
||
* A new One Definition Rule violation warning (controlled by -Wodr)
|
||
detects mismatches in type definitions and virtual table contents
|
||
during link-time optimization.
|
||
* New warnings -Wsuggest-final-types and -Wsuggest-final-methods help
|
||
developers to annotate programs with final specifiers (or anonymous
|
||
namespaces) to improve code generation. These warnings can be used
|
||
at compile time, but they are more useful in combination with
|
||
link-time optimization.
|
||
* G++ no longer supports [16]N3639 variable length arrays, as they
|
||
were removed from the C++14 working paper prior to ratification.
|
||
GNU VLAs are still supported, so VLA support is now the same in
|
||
C++14 mode as in C++98 and C++11 modes.
|
||
* G++ now allows passing a non-trivially-copyable class via C
|
||
varargs, which is conditionally-supported with
|
||
implementation-defined semantics in the standard. This uses the
|
||
same calling convention as a normal value parameter.
|
||
* G++ now defaults to -fabi-version=9 and -fabi-compat-version=2. So
|
||
various mangling bugs are fixed, but G++ will still emit aliases
|
||
with the old, wrong mangling where feasible. -Wabi=2 will warn
|
||
about differences between ABI version 2 and the current setting.
|
||
* G++ 5.2 fixes the alignment of std::nullptr_t. Most code is likely
|
||
to be unaffected, but -Wabi=8 will warn about a non-static data
|
||
member with type std::nullptr_t which changes position due to this
|
||
change.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* A [17]Dual ABI is provided by the library. A new ABI is enabled by
|
||
default. The old ABI is still supported and can be used by defining
|
||
the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
|
||
standard library headers.
|
||
* A new implementation of std::string is enabled by default, using
|
||
the small string optimization instead of copy-on-write reference
|
||
counting.
|
||
* A new implementation of std::list is enabled by default, with an
|
||
O(1) size() function;
|
||
* [18]Full support for C++11, including the following new features:
|
||
+ std::deque and std::vector<bool> meet the allocator-aware
|
||
container requirements;
|
||
+ movable and swappable iostream classes;
|
||
+ support for std::align and std::aligned_union;
|
||
+ type traits std::is_trivially_copyable,
|
||
std::is_trivially_constructible, std::is_trivially_assignable
|
||
etc.;
|
||
+ I/O manipulators std::put_time, std::get_time, std::hexfloat
|
||
and std::defaultfloat;
|
||
+ generic locale-aware std::isblank;
|
||
+ locale facets for Unicode conversion;
|
||
+ atomic operations for std::shared_ptr;
|
||
+ std::notify_all_at_thread_exit() and functions for making
|
||
futures ready at thread exit.
|
||
* Support for the C++11 hexfloat manipulator changes how the num_put
|
||
facet formats floating point types when
|
||
ios_base::fixed|ios_base::scientific is set in a stream's fmtflags.
|
||
This change affects all language modes, even though the C++98
|
||
standard gave no special meaning to that combination of flags. To
|
||
prevent the use of hexadecimal notation for floating point types
|
||
use str.unsetf(std::ios_base::floatfield) to clear the relevant
|
||
bits in str.flags().
|
||
* [19]Full experimental support for C++14, including the following
|
||
new features:
|
||
+ std::is_final type trait;
|
||
+ heterogeneous comparison lookup in associative containers.
|
||
+ global functions cbegin, cend, rbegin, rend, crbegin, and
|
||
crend for range access to containers, arrays and initializer
|
||
lists.
|
||
* [20]Improved experimental support for the Library Fundamentals TS,
|
||
including:
|
||
+ class std::experimental::any;
|
||
+ function template std::experimental::apply;
|
||
+ function template std::experimental::sample;
|
||
+ function template std::experimental::search and related
|
||
searcher types;
|
||
+ variable templates for type traits;
|
||
+ function template std::experimental::not_fn.
|
||
* New random number distributions logistic_distribution and
|
||
uniform_on_sphere_distribution as extensions.
|
||
* [21]GDB Xmethods for containers and std::unique_ptr.
|
||
|
||
Fortran
|
||
|
||
* Compatibility notice:
|
||
+ The version of the module files (.mod) has been incremented.
|
||
+ For free-form source files [22]-Werror=line-truncation is now
|
||
enabled by default. Note that comments exceeding the line
|
||
length are not diagnosed. (For fixed-form source code, the
|
||
same warning is available but turned off by default, such that
|
||
excess characters are ignored. -ffree-line-length-n and
|
||
-ffixed-line-length-n can be used to modify the default line
|
||
lengths of 132 and 72 columns, respectively.)
|
||
+ The -Wtabs option is now more sensible: with -Wtabs the
|
||
compiler warns if it encounters tabs and with -Wno-tabs this
|
||
warning is turned off. Before, -Wno-tabs warned and -Wtabs
|
||
disabled the warning. As before, this warning is also enabled
|
||
by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
|
||
options of -std=.
|
||
* Incomplete support for colorizing diagnostics emitted by gfortran
|
||
has been added. The option [23]-fdiagnostics-color controls when
|
||
color is used in diagnostics. The default value of this option can
|
||
be [24]configured when building GCC. The GCC_COLORS environment
|
||
variable can be used to customize the colors or disable coloring
|
||
completely. Sample diagnostics output:
|
||
$ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
|
||
test.f90:6:1:
|
||
|
||
0 continue
|
||
1
|
||
Error: Zero is not a valid statement label at (1)
|
||
test.f90:9:6:
|
||
|
||
USE foo
|
||
1
|
||
Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
|
||
|
||
* The -Wuse-without-only option has been added to warn when a USE
|
||
statement has no ONLY qualifier and thus implicitly imports all
|
||
public entities of the used module.
|
||
* Formatted READ and WRITE statements now work correctly in
|
||
locale-aware programs. For more information and potential caveats,
|
||
see [25]Section 5.3 Thread-safety of the runtime library in the
|
||
manual.
|
||
* [26]Fortran 2003:
|
||
+ The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
|
||
IEEE_ARITHMETIC) are now supported.
|
||
* [27]Fortran 2008:
|
||
+ [28]Coarrays: Full experimental support of Fortran 2008's
|
||
coarrays with -fcoarray=lib except for allocatable/pointer
|
||
components of derived-type coarrays. GCC currently only ships
|
||
with a single-image library (libcaf_single), but multi-image
|
||
support based on MPI and GASNet is provided by the libraries
|
||
of the [29]OpenCoarrays project.
|
||
* TS18508 Additional Parallel Features in Fortran:
|
||
+ Support for the collective intrinsic subroutines CO_MAX,
|
||
CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
|
||
including -fcoarray=lib support.
|
||
+ Support for the new atomic intrinsics has been added,
|
||
including -fcoarray=lib support.
|
||
* Fortran 2015:
|
||
+ Support for IMPLICIT NONE (external, type).
|
||
+ ERROR STOP is now permitted in pure procedures.
|
||
|
||
Go
|
||
|
||
* GCC 5 provides a complete implementation of the Go 1.4.2 release.
|
||
* Building GCC 5 with Go enabled will install two new programs:
|
||
[30]go and [31]gofmt.
|
||
|
||
libgccjit
|
||
|
||
New in GCC 5 is the ability to build GCC as a shared library for
|
||
embedding in other processes (such as interpreters), suitable for
|
||
Just-In-Time compilation to machine code.
|
||
|
||
The shared library has a [32]C API and a [33]C++ wrapper API providing
|
||
some "syntactic sugar". There are also bindings available from 3rd
|
||
parties for [34]Python and for [35]D.
|
||
|
||
For example, this library can be used by interpreters for [36]compiling
|
||
functions from bytecode to machine code.
|
||
|
||
The library can also be used for ahead-of-time compilation, enabling
|
||
GCC to be plugged into a pre-existing front end. An example of using
|
||
this to build a compiler for an esoteric language we'll refer to as
|
||
"brainf" can be seen [37]here.
|
||
|
||
libgccjit is licensed under the GPLv3 (or at your option, any later
|
||
version)
|
||
|
||
It should be regarded as experimental at this time.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
Reporting stack usage
|
||
|
||
* The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
|
||
-fstack-usage option.
|
||
|
||
AArch64
|
||
|
||
* Code generation for the ARM Cortex-A57 processor has been improved.
|
||
A more accurate instruction scheduling model for the processor is
|
||
now used, and a number of compiler tuning parameters have been set
|
||
to offer increased performance when compiling with -mcpu=cortex-a57
|
||
or -mtune=cortex-a57.
|
||
* A workaround for the ARM Cortex-A53 erratum 835769 has been added
|
||
and can be enabled by giving the -mfix-cortex-a53-835769 option.
|
||
Alternatively it can be enabled by default by configuring GCC with
|
||
the --enable-fix-cortex-a53-835769 option.
|
||
* The optional cryptographic extensions to the ARMv8-A architecture
|
||
are no longer enabled by default when specifying the
|
||
-mcpu=cortex-a53, -mcpu=cortex-a57 or -mcpu=cortex-a57.cortex-a53
|
||
options. To enable these extensions add +crypto to the value of
|
||
-mcpu or -march e.g. -mcpu=cortex-a53+crypto.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses): ARM Cortex-A72 (cortex-a72) and
|
||
initial support for its big.LITTLE combination with the ARM
|
||
Cortex-A53 (cortex-a72.cortex-a53), Cavium ThunderX (thunderx),
|
||
Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
|
||
Using -mcpu=cortex-a72 requires a version of GNU binutils that has
|
||
support for the Cortex-A72.
|
||
* The transitional options -mlra and -mno-lra have been removed. The
|
||
AArch64 backend now uses the local register allocator (LRA) only.
|
||
|
||
ARM
|
||
|
||
* Thumb-1 assembly code is now generated in unified syntax. The new
|
||
option -masm-syntax-unified specifies whether inline assembly code
|
||
is using unified syntax. By default the option is off which means
|
||
non-unified syntax is used. However this is subject to change in
|
||
future releases. Eventually the non-unified syntax will be
|
||
deprecated.
|
||
* It is now a configure-time error to use the --with-cpu configure
|
||
option with either of --with-tune or --with-arch.
|
||
* Code generation for the ARM Cortex-A57 processor has been improved.
|
||
A more accurate instruction scheduling model for the processor is
|
||
now used, and a number of compiler tuning parameters have been set
|
||
to offer increased performance when compiling with -mcpu=cortex-a57
|
||
or -mtune=cortex-a57.
|
||
* Support has been added for the following processors (GCC
|
||
identifiers in parentheses): ARM Cortex-A17 (cortex-a17) and
|
||
initial support for its big.LITTLE combination with the ARM
|
||
Cortex-A7 (cortex-a17.cortex-a7), ARM Cortex-A72 (cortex-a72) and
|
||
initial support for its big.LITTLE combination with the ARM
|
||
Cortex-A53 (cortex-a72.cortex-a53), ARM Cortex-M7 (cortex-m7),
|
||
Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
|
||
The GCC identifiers can be used as arguments to the -mcpu or -mtune
|
||
options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
|
||
Using -mcpu=cortex-a72 requires a version of GNU binutils that has
|
||
support for the Cortex-A72.
|
||
* The deprecated option -mwords-little-endian has been removed.
|
||
* The options -mapcs, -mapcs-frame, -mtpcs-frame and
|
||
-mtpcs-leaf-frame which are only applicable to the old ABI have
|
||
been deprecated.
|
||
* The transitional options -mlra and -mno-lra have been removed. The
|
||
ARM backend now uses the local register allocator (LRA) only.
|
||
|
||
AVR
|
||
|
||
* The compiler no more supports individual devices like ATmega8.
|
||
Specifying, say, -mmcu=atmega8 triggers the usage of the
|
||
device-specific [38]spec file specs-atmega8 which is part of the
|
||
installation and describes options for the sub-processes like
|
||
compiler proper, assembler and linker. You can add support for a
|
||
new device -mmcu=mydevice as follows:
|
||
1. In an empty directory /someplace, create a new directory
|
||
device-specs.
|
||
2. Copy a device spec file from the installed device-specs
|
||
folder, follow the comments in that file and then save it as
|
||
/someplace/device-specs/specs-mydevice.
|
||
3. Add -B /someplace -mmcu=mydevice to the compiler's
|
||
command-line options. Notice that /someplace must specify an
|
||
absolute path and that mydevice must not start with "avr".
|
||
4. Provided you have a device-specific library libmydevice.a
|
||
available, you can put it at /someplace, dito for a
|
||
device-specific startup file crtmydevice.o.
|
||
The contents of the device spec files depend on the compiler's
|
||
configuration, in particular on --with-avrlibc=no and whether or
|
||
not it is configured for RTEMS.
|
||
* A new command-line option -nodevicelib has been added. It prevents
|
||
the compiler from linking against AVR-LibC's device-specific
|
||
library libdevice.a.
|
||
* The following three command-line options have been added:
|
||
|
||
-mrmw
|
||
Set if the device supports the read-modify-write
|
||
instructions LAC, LAS, LAT and XCH.
|
||
|
||
-mn-flash=size
|
||
Specify the flash size of the device in units of 64 KiB,
|
||
rounded up to the next integer as needed. This option
|
||
affects the availability of the [39]AVR address-spaces.
|
||
|
||
-mskip-bug
|
||
Set if the device is affected by the respective silicon
|
||
bug.
|
||
|
||
In general, you don't need to set these options by hand. The new
|
||
device-specific spec file will set them as needed.
|
||
|
||
IA-32/x86-64
|
||
|
||
* New [40]ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of
|
||
Intel's CPU codenamed Skylake Server was added to GCC. That
|
||
includes inline assembly support, new intrinsics, and basic
|
||
autovectorization. These new AVX-512 extensions are available via
|
||
the following GCC switches: AVX-512 Vector Length EVEX feature:
|
||
-mavx512vl, AVX-512 Byte and Word instructions: -mavx512bw, AVX-512
|
||
Dword and Qword instructions: -mavx512dq, AVX-512 FMA-52
|
||
instructions: -mavx512ifma and for AVX-512 Vector Bit Manipulation
|
||
Instructions: -mavx512vbmi.
|
||
* New ISA extensions support Intel MPX was added to GCC. This new
|
||
extension is available via the -mmpx compiler switch. Intel MPX is
|
||
a set of processor features which, with compiler, run-time library
|
||
and OS support, brings increased robustness to software by run-time
|
||
checking pointer references against their bounds. In GCC Intel MPX
|
||
is supported by Pointer Bounds Checker and libmpx run-time
|
||
libraries.
|
||
* The new -mrecord-mcount option for -pg generates a Linux kernel
|
||
style table of pointers to mcount or __fentry__ calls at the
|
||
beginning of functions. The new -mnop-mcount option in addition
|
||
also generates nops in place of the __fentry__ or mcount call, so
|
||
that a call per function can be later patched in. This can be used
|
||
for low overhead tracing or hot code patching.
|
||
* The new -malign-data option controls how GCC aligns variables.
|
||
-malign-data=compat uses increased alignment compatible with GCC
|
||
4.8 and earlier, -malign-data=abi uses alignment as specified by
|
||
the psABI, and -malign-data=cacheline uses increased alignment to
|
||
match the cache line size. -malign-data=compat is the default.
|
||
* The new -mskip-rax-setup option skips setting up the RAX register
|
||
when SSE is disabled and there are no variable arguments passed in
|
||
vector registers. This can be used to optimize the Linux kernel.
|
||
|
||
MIPS
|
||
|
||
* MIPS Releases 3 and 5 are now directly supported. Use the
|
||
command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
|
||
to enable code-generation for these processors.
|
||
* The Imagination P5600 processor is now supported using the
|
||
-march=p5600 command-line option.
|
||
* The Cavium Octeon3 processor is now supported using the
|
||
-march=octeon3 command-line option.
|
||
* MIPS Release 6 is now supported using the -mips32r6 and -mips64r6
|
||
command-line options.
|
||
* The o32 ABI has been modified and extended. The o32 64-bit
|
||
floating-point register support is now obsolete and has been
|
||
removed. It has been replaced by three ABI extensions FPXX, FP64A,
|
||
and FP64. The meaning of the -mfp64 command-line option has
|
||
changed. It is now used to enable the FP64A and FP64 ABI
|
||
extensions.
|
||
+ The FPXX extension requires that code generated to access
|
||
double-precision values use even-numbered registers. Code that
|
||
adheres to this extension is link-compatible with all other
|
||
o32 double-precision ABI variants and will execute correctly
|
||
in all hardware FPU modes. The command-line options -mabi=32
|
||
-mfpxx can be used to enable this extension. MIPS II is the
|
||
minimum processor required.
|
||
+ The o32 FP64A extension requires that floating-point registers
|
||
be 64-bit and odd-numbered single-precision registers are not
|
||
allowed. Code that adheres to the o32 FP64A variant is
|
||
link-compatible with all other o32 double-precision ABI
|
||
variants. The command-line options -mabi=32 -mfp64
|
||
-mno-odd-spreg can be used to enable this extension. MIPS32R2
|
||
is the minimum processor required.
|
||
+ The o32 FP64 extension also requires that floating-point
|
||
registers be 64-bit, but permits the use of single-precision
|
||
registers. Code that adheres to the o32 FP64 variant is
|
||
link-compatible with o32 FPXX and o32 FP64A variants only,
|
||
i.e. it is not compatible with the original o32
|
||
double-precision ABI. The command-line options -mabi=32 -mfp64
|
||
-modd-spreg can be used to enable this extension. MIPS32R2 is
|
||
the minimum processor required.
|
||
The new ABI variants can be enabled by default using the configure
|
||
time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32.
|
||
It is strongly recommended that all vendors begin to set o32 FPXX
|
||
as the default ABI. This will be required to run the generated code
|
||
on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and
|
||
MIPSR6 cores.
|
||
* GCC will now pass all floating-point options to the assembler if
|
||
GNU binutils 2.25 is used. As a result, any inline assembly code
|
||
that uses hard-float instructions should be amended to include a
|
||
.set directive to override the global assembler options when
|
||
compiling for soft-float targets.
|
||
|
||
NDS32
|
||
|
||
* The variadic function ABI implementation is now compatible with
|
||
past Andes toolchains where the caller uses registers to pass
|
||
arguments and the callee is in charge of pushing them on stack.
|
||
* The options -mforce-fp-as-gp, -mforbid-fp-as-gp, and -mex9 have
|
||
been removed since they are not yet available in the nds32 port of
|
||
GNU binutils.
|
||
* A new option -mcmodel=[small|medium|large] supports varied code
|
||
models on code generation. The -mgp-direct option became
|
||
meaningless and can be discarded.
|
||
|
||
RX
|
||
|
||
* A new command line option -mno-allow-string-insns can be used to
|
||
disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
|
||
SWHILE and RMPA instructions. An erratum released by Renesas shows
|
||
that it is unsafe to use these instructions on addresses within the
|
||
I/O space of the processor. The new option can be used when the
|
||
programmer is concerned that the I/O space might be accessed. The
|
||
default is still to enable these instructions.
|
||
|
||
SH
|
||
|
||
* The compiler will now pass the appropriate --isa= option to the
|
||
assembler.
|
||
* The default handling for the GBR has been changed from call
|
||
clobbered to call preserved. The old behavior can be reinstated by
|
||
specifying the option -fcall-used-gbr.
|
||
* Support for the SH4A fpchg instruction has been added which will be
|
||
utilized when switching between single and double precision FPU
|
||
modes.
|
||
* The compiler no longer uses the __fpscr_values array for switching
|
||
between single and double FPU precision modes on non-SH4A targets.
|
||
Instead mode switching will now be performed by storing, modifying
|
||
and reloading the FPSCR, so that other FPSCR bits are preserved
|
||
across mode switches. The __fpscr_values array that is defined in
|
||
libgcc is still present for backwards compatibility, but it will
|
||
not be referenced by compiler generated code anymore.
|
||
* New builtin functions __builtin_sh_get_fpscr and
|
||
__builtin_sh_set_fpscr have been added. The __builtin_sh_set_fpscr
|
||
function will mask the specified bits in such a way that the SZ, PR
|
||
and FR mode bits will be preserved, while changing the other bits.
|
||
These new functions do not reference the __fpscr_values array. The
|
||
old functions __set_fpscr and __get_fpscr in libgcc which access
|
||
the __fpscr_values array are still present for backwards
|
||
compatibility, but their usage is highly discouraged.
|
||
* Some improvements to code generated for __atomic built-in
|
||
functions.
|
||
* When compiling for SH2E the compiler will no longer force the usage
|
||
of delay slots for conditional branch instructions bt and bf. The
|
||
old behavior can be reinstated (e.g. to work around a hardware bug
|
||
in the original SH7055) by specifying the new option
|
||
-mcbranch-force-delay-slot.
|
||
|
||
Operating Systems
|
||
|
||
AIX
|
||
|
||
* GCC now supports stabs debugging continuation lines to allow long
|
||
stabs debug information without overflow that generates AIX linker
|
||
errors.
|
||
|
||
DragonFly BSD
|
||
|
||
* GCC now supports the DragonFly BSD operating system.
|
||
|
||
FreeBSD
|
||
|
||
* GCC now supports the FreeBSD operating system for the arm port
|
||
through the arm*-*-freebsd* target triplets.
|
||
|
||
VxWorks MILS
|
||
|
||
* GCC now supports the MILS (Multiple Independent Levels of Security)
|
||
variant of WindRiver's VxWorks operating system for PowerPC
|
||
targets.
|
||
|
||
Other significant improvements
|
||
|
||
* The gcc-ar, gcc-nm, gcc-ranlib wrappers now understand a -B option
|
||
to set the compiler to use.
|
||
|
||
* When the new command-line option -freport-bug is used, GCC
|
||
automatically generates a developer-friendly reproducer whenever an
|
||
internal compiler error is encountered.
|
||
|
||
GCC 5.2
|
||
|
||
This is the [41]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 5.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for new AMD instructions monitorx and mwaitx has been
|
||
added. This includes new intrinsic and built-in support. It is
|
||
enabled through option -mmwaitx. The instructions monitorx and
|
||
mwaitx implement the same functionality as the old monitor and
|
||
mwait instructions. In addition mwaitx adds a configurable timer.
|
||
The timer value is received as third argument and stored in
|
||
register %ebx.
|
||
|
||
S/390, System z, IBM z Systems
|
||
|
||
* Support for the IBM z13 processor has been added. When using the
|
||
-march=z13 option, the compiler will generate code making use of
|
||
the new instructions and registers introduced with the vector
|
||
extension facility. The -mtune=z13 option enables z13 specific
|
||
instruction scheduling without making use of new instructions.
|
||
Compiling code with -march=z13 reduces the default alignment of
|
||
vector types bigger than 8 bytes to 8. This is an ABI change and
|
||
care must be taken when linking modules compiled with different
|
||
arch levels which interchange variables containing vector type
|
||
values. For newly compiled code the GNU linker will emit a warning.
|
||
* The -mzvector option enables a C/C++ language extension. This
|
||
extension provides a new keyword vector which can be used to define
|
||
vector type variables. (Note: This is not available when enforcing
|
||
strict standard compliance e.g. with -std=c99. Either enable GNU
|
||
extensions with e.g. -std=gnu99 or use __vector instead of vector.)
|
||
Additionally a set of overloaded builtins is provided which is
|
||
partially compatible to the PowerPC Altivec builtins. In order to
|
||
make use of these builtins the vecintrin.h header file needs to be
|
||
included.
|
||
|
||
GCC 5.3
|
||
|
||
This is the [42]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 5.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
* GCC now supports the Intel CPU named Skylake with AVX-512
|
||
extensions through -march=skylake-avx512. The switch enables the
|
||
following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
|
||
AVX-512DQ.
|
||
|
||
S/390, System z, IBM z Systems
|
||
|
||
* With this version of GCC IBM z Systems support has been added to
|
||
the GO runtime environment. GCC 5.3 has proven to be able to
|
||
compile larger GO applications on IBM z Systems.
|
||
|
||
GCC 5.4
|
||
|
||
This is the [43]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 5.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 5.5
|
||
|
||
This is the [44]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 5.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for the [45]deprecated pcommit instruction has been
|
||
removed.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [46]GCC manuals. If that fails, the
|
||
[47]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [48]gcc@gcc.gnu.org. All of [49]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [50]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [51]maintained by the GCC team. Last modified
|
||
2018-09-30[52].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-5/changes.html#libstdcxx
|
||
2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
|
||
3. https://savannah.nongnu.org/bugs/?44574
|
||
4. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
|
||
5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
|
||
6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
|
||
7. https://gcc.gnu.org/wiki/OpenACC
|
||
8. https://gcc.gnu.org/install/configure.html
|
||
9. https://www.cilkplus.org/
|
||
10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
|
||
11. http://gcc.gnu.org/projects/cxx1y.html
|
||
12. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
|
||
13. http://gcc.gnu.org/projects/cxx1y.html
|
||
14. http://gcc.gnu.org/projects/cxx1y.html
|
||
15. http://gcc.gnu.org/projects/cxx1y.html
|
||
16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
|
||
17. http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
|
||
21. https://sourceware.org/gdb/current/onlinedocs/gdb/Xmethods-In-Python.html
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
|
||
23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
|
||
24. https://gcc.gnu.org/install/configure.html
|
||
25. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
|
||
26. https://gcc.gnu.org/wiki/Fortran2003Status
|
||
27. https://gcc.gnu.org/wiki/Fortran2008Status
|
||
28. https://gcc.gnu.org/wiki/Coarray
|
||
29. http://www.opencoarrays.org/
|
||
30. https://golang.org/cmd/go/
|
||
31. https://golang.org/cmd/gofmt/
|
||
32. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
|
||
33. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
|
||
34. https://github.com/davidmalcolm/pygccjit
|
||
35. https://github.com/ibuclaw/gccjitd
|
||
36. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
|
||
37. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
|
||
38. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
|
||
39. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
|
||
40. https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf
|
||
41. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
|
||
42. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
|
||
43. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
|
||
44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
|
||
45. https://software.intel.com/en-us/blogs/2016/09/12/deprecate-pcommit-instruction
|
||
46. https://gcc.gnu.org/onlinedocs/
|
||
47. mailto:gcc-help@gcc.gnu.org
|
||
48. mailto:gcc@gcc.gnu.org
|
||
49. https://gcc.gnu.org/lists.html
|
||
50. https://www.fsf.org/
|
||
51. https://gcc.gnu.org/about.html
|
||
52. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.9/index.html
|
||
GCC 4.9 Release Series
|
||
|
||
Aug 3, 2016
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.9.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.9.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.9.4
|
||
Aug 3, 2016 ([2]changes, [3]documentation)
|
||
|
||
GCC 4.9.3
|
||
June 26, 2015 ([4]changes, [5]documentation)
|
||
|
||
GCC 4.9.2
|
||
October 30, 2014 ([6]changes, [7]documentation)
|
||
|
||
GCC 4.9.1
|
||
July 16, 2014 ([8]changes, [9]documentation)
|
||
|
||
GCC 4.9.0
|
||
April 22, 2014 ([10]changes, [11]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [12]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [13]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [14]GCC
|
||
project web site or contact the [15]GCC development mailing list.
|
||
|
||
To obtain GCC please use [16]our mirror sites or [17]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-09-30[24].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.9/changes.html
|
||
3. http://gcc.gnu.org/onlinedocs/4.9.4/
|
||
4. http://gcc.gnu.org/gcc-4.9/changes.html
|
||
5. http://gcc.gnu.org/onlinedocs/4.9.3/
|
||
6. http://gcc.gnu.org/gcc-4.9/changes.html
|
||
7. http://gcc.gnu.org/onlinedocs/4.9.2/
|
||
8. http://gcc.gnu.org/gcc-4.9/changes.html
|
||
9. http://gcc.gnu.org/onlinedocs/4.9.1/
|
||
10. http://gcc.gnu.org/gcc-4.9/changes.html
|
||
11. https://gcc.gnu.org/onlinedocs/4.9.0/
|
||
12. http://gcc.gnu.org/gcc-4.9/buildstat.html
|
||
13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
14. http://gcc.gnu.org/index.html
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. http://gcc.gnu.org/mirrors.html
|
||
17. http://gcc.gnu.org/svn.html
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.9/changes.html
|
||
GCC 4.9 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* The mudflap run time checker has been removed. The mudflap options
|
||
remain, but do nothing.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.9.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ Solaris 9 (*-*-solaris2.9). Details can be found in the
|
||
[1]announcement.
|
||
* On AArch64, the singleton vector types int64x1_t, uint64x1_t and
|
||
float64x1_t exported by arm_neon.h are defined to be the same as
|
||
their base types. This results in incorrect application of
|
||
parameter passing rules to arguments of types int64x1_t and
|
||
uint64x1_t, with respect to the AAPCS64 ABI specification. In
|
||
addition, names of C++ functions with parameters of these types
|
||
(including float64x1_t) are not mangled correctly. The current
|
||
typedef declarations also unintentionally allow implicit casting
|
||
between singleton vector types and their base types. These issues
|
||
will be resolved in a near future release. See [2]PR60825 for more
|
||
information.
|
||
|
||
More information on porting to GCC 4.9 from previous versions of GCC
|
||
can be found in the [3]porting guide for this release.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* AddressSanitizer, a fast memory error detector, is now available on
|
||
ARM.
|
||
* UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior
|
||
detector, has been added and can be enabled via
|
||
-fsanitize=undefined. Various computations will be instrumented to
|
||
detect undefined behavior at runtime. UndefinedBehaviorSanitizer is
|
||
currently available for the C and C++ languages.
|
||
* Link-time optimization (LTO) improvements:
|
||
+ Type merging was rewritten. The new implementation is
|
||
significantly faster and uses less memory.
|
||
+ Better partitioning algorithm resulting in less streaming
|
||
during link time.
|
||
+ Early removal of virtual methods reduces the size of object
|
||
files and improves link-time memory usage and compile time.
|
||
+ Function bodies are now loaded on-demand and released early
|
||
improving overall memory usage at link time.
|
||
+ C++ hidden keyed methods can now be optimized out.
|
||
+ When using a linker plugin, compiling with the -flto option
|
||
now generates slim object files (.o) which only contain
|
||
intermediate language representation for LTO. Use
|
||
-ffat-lto-objects to create files which contain additionally
|
||
the object code. To generate static libraries suitable for LTO
|
||
processing, use gcc-ar and gcc-ranlib; to list symbols from a
|
||
slim object file use gcc-nm. (This requires that ar, ranlib
|
||
and nm have been compiled with plugin support.)
|
||
Memory usage building Firefox with debug enabled was reduced from
|
||
15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
|
||
* Inter-procedural optimization improvements:
|
||
+ New type inheritance analysis module improving
|
||
devirtualization. Devirtualization now takes into account
|
||
anonymous name-spaces and the C++11 final keyword.
|
||
+ New speculative devirtualization pass (controlled by
|
||
-fdevirtualize-speculatively.
|
||
+ Calls that were speculatively made direct are turned back to
|
||
indirect where direct call is not cheaper.
|
||
+ Local aliases are introduced for symbols that are known to be
|
||
semantically equivalent across shared libraries improving
|
||
dynamic linking times.
|
||
* Feedback directed optimization improvements:
|
||
+ Profiling of programs using C++ inline functions is now more
|
||
reliable.
|
||
+ New time profiling determines typical order in which functions
|
||
are executed.
|
||
+ A new function reordering pass (controlled by
|
||
-freorder-functions) significantly reduces startup time of
|
||
large applications. Until binutils support is completed, it is
|
||
effective only with link-time optimization.
|
||
+ Feedback driven indirect call removal and devirtualization now
|
||
handle cross-module calls when link-time optimization is
|
||
enabled.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* Version 4.0 of the [4]OpenMP specification is now supported in the
|
||
C and C++ compilers and starting with the 4.9.1 release also in the
|
||
Fortran compiler. The new -fopenmp-simd option can be used to
|
||
enable OpenMP's SIMD directives while ignoring other OpenMP
|
||
directives. The new [5]-fsimd-cost-model= option permits to tune
|
||
the vectorization cost model for loops annotated with OpenMP and
|
||
Cilk Plus simd directives. -Wopenmp-simd warns when the current
|
||
cost model overrides simd directives set by the user.
|
||
* The -Wdate-time option has been added for the C, C++ and Fortran
|
||
compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__
|
||
macros are used. Those macros might prevent bit-wise-identical
|
||
reproducible compilations.
|
||
|
||
Ada
|
||
|
||
* GNAT switched to Ada 2012 instead of Ada 2005 by default.
|
||
|
||
C family
|
||
|
||
* Support for colorizing diagnostics emitted by GCC has been added.
|
||
The [6]-fdiagnostics-color=auto will enable it when outputting to
|
||
terminals, -fdiagnostics-color=always unconditionally. The
|
||
GCC_COLORS environment variable can be used to customize the colors
|
||
or disable coloring. If GCC_COLORS variable is present in the
|
||
environment, the default is -fdiagnostics-color=auto, otherwise
|
||
-fdiagnostics-color=never.
|
||
Sample diagnostics output:
|
||
$ g++ -fdiagnostics-color=always -S -Wall test.C
|
||
test.C: In function ‘int foo()’:
|
||
test.C:1:14: warning: no return statement in function returning non-void [-W
|
||
return-type]
|
||
int foo () { }
|
||
^
|
||
test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
|
||
-ftemplate-depth= to increase the maximum) instantiating ‘struct X<100>’
|
||
template <int N> struct X { static const int value = X<N-1>::value; }; temp
|
||
late struct X<1000>;
|
||
^
|
||
test.C:2:46: recursively required from ‘const int X<999>::value’
|
||
test.C:2:46: required from ‘const int X<1000>::value’
|
||
test.C:2:88: required from here
|
||
|
||
test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier
|
||
|
||
* With the new [7]#pragma GCC ivdep, the user can assert that there
|
||
are no loop-carried dependencies which would prevent concurrent
|
||
execution of consecutive iterations using SIMD (single instruction
|
||
multiple data) instructions.
|
||
* Support for [8]Cilk Plus has been added and can be enabled with the
|
||
-fcilkplus option. Cilk Plus is an extension to the C and C++
|
||
languages to support data and task parallelism. The present
|
||
implementation follows ABI version 1.2; all features but _Cilk_for
|
||
have been implemented.
|
||
|
||
C
|
||
|
||
* ISO C11 atomics (the _Atomic type specifier and qualifier and the
|
||
<stdatomic.h> header) are now supported.
|
||
* ISO C11 generic selections (_Generic keyword) are now supported.
|
||
* ISO C11 thread-local storage (_Thread_local, similar to GNU C
|
||
__thread) is now supported.
|
||
* ISO C11 support is now at a similar level of completeness to ISO
|
||
C99 support: substantially complete modulo bugs, extended
|
||
identifiers (supported except for corner cases when
|
||
-fextended-identifiers is used), floating-point issues (mainly but
|
||
not entirely relating to optional C99 features from Annexes F and
|
||
G) and the optional Annexes K (Bounds-checking interfaces) and L
|
||
(Analyzability).
|
||
* A new C extension __auto_type provides a subset of the
|
||
functionality of C++11 auto in GNU C.
|
||
|
||
C++
|
||
|
||
* The G++ implementation of [9]C++1y return type deduction for normal
|
||
functions has been updated to conform to [10]N3638, the proposal
|
||
accepted into the working paper. Most notably, it adds
|
||
decltype(auto) for getting decltype semantics rather than the
|
||
template argument deduction semantics of plain auto:
|
||
|
||
int& f();
|
||
auto i1 = f(); // int
|
||
decltype(auto) i2 = f(); // int&
|
||
|
||
* G++ supports [11]C++1y lambda capture initializers:
|
||
|
||
[x = 42]{ ... };
|
||
|
||
Actually, they have been accepted since GCC 4.5, but now the
|
||
compiler doesn't warn about them with -std=c++1y, and supports
|
||
parenthesized and brace-enclosed initializers as well.
|
||
* G++ supports [12]C++1y variable length arrays. G++ has supported
|
||
GNU/C99-style VLAs for a long time, but now additionally supports
|
||
initializers and lambda capture by reference. In C++1y mode G++
|
||
will complain about VLA uses that are not permitted by the draft
|
||
standard, such as forming a pointer to VLA type or applying sizeof
|
||
to a VLA variable. Note that it now appears that VLAs will not be
|
||
part of C++14, but will be part of a separate document and then
|
||
perhaps C++17.
|
||
|
||
void f(int n) {
|
||
int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
|
||
[&a]{ for (int i : a) { cout << i << endl; } }();
|
||
&a; // error, taking address of VLA
|
||
}
|
||
|
||
* G++ supports the [13]C++1y [[deprecated]] attribute modulo bugs in
|
||
the underlying [[gnu::deprecated]] attribute. Classes and functions
|
||
can be marked deprecated and a diagnostic message added:
|
||
|
||
class A;
|
||
int bar(int n);
|
||
#if __cplusplus > 201103
|
||
class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
|
||
[[deprecated("bar is unsafe; use foo() instead")]]
|
||
int bar(int n);
|
||
|
||
int foo(int n);
|
||
class B;
|
||
#endif
|
||
A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
|
||
int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
|
||
o() instead
|
||
|
||
* G++ supports [14]C++1y digit separators. Long numeric literals can
|
||
be subdivided with a single quote ' to enhance readability:
|
||
|
||
int i = 1048576;
|
||
int j = 1'048'576;
|
||
int k = 0x10'0000;
|
||
int m = 0'004'000'000;
|
||
int n = 0b0001'0000'0000'0000'0000'0000;
|
||
|
||
double x = 1.602'176'565e-19;
|
||
double y = 1.602'176'565e-1'9;
|
||
|
||
* G++ supports [15]C++1y generic (polymorphic) lambdas.
|
||
|
||
// a functional object that will increment any type
|
||
auto incr = [](auto x) { return x++; };
|
||
|
||
* As a GNU extension, G++ supports explicit template parameter syntax
|
||
for generic lambdas. This can be combined in the expected way with
|
||
the standard auto syntax.
|
||
|
||
// a functional object that will add two like-type objects
|
||
auto add = [] <typename T> (T a, T b) { return a + b; };
|
||
|
||
* G++ supports unconstrained generic functions as specified by §4.1.2
|
||
and §5.1.1 of [16]N3889: Concepts Lite Specification. Briefly, auto
|
||
may be used as a type-specifier in a parameter declaration of any
|
||
function declarator in order to introduce an implicit function
|
||
template parameter, akin to generic lambdas.
|
||
|
||
// the following two function declarations are equivalent
|
||
auto incr(auto x) { return x++; }
|
||
template <typename T>
|
||
auto incr(T x) { return x++; }
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* [17]Improved support for C++11, including:
|
||
+ support for <regex>;
|
||
+ The associative containers in <map> and <set> and the
|
||
unordered associative containers in <unordered_map> and
|
||
<unordered_set> meet the allocator-aware container
|
||
requirements;
|
||
* [18]Improved experimental support for the upcoming ISO C++
|
||
standard, C++14, including:
|
||
+ fixing constexpr member functions without const;
|
||
+ implementation of the std::exchange() utility function;
|
||
+ addressing tuples by type;
|
||
+ implemention of std::make_unique;
|
||
+ implemention of std::shared_lock;
|
||
+ making std::result_of SFINAE-friendly;
|
||
+ adding operator() to std::integral_constant;
|
||
+ adding user-defined literals for standard library types
|
||
std::basic_string, std::chrono::duration, and std::complex;
|
||
+ adding two range overloads to non-modifying sequence oprations
|
||
std::equal and std::mismatch;
|
||
+ adding IO manipulators for quoted strings;
|
||
+ adding constexpr members to <utility>, <complex>, <chrono>,
|
||
and some containers;
|
||
+ adding compile-time std::integer_sequence;
|
||
+ adding cleaner transformation traits;
|
||
+ making <functional>s operator functors easier to use and more
|
||
generic;
|
||
* An implementation of std::experimental::optional.
|
||
* An implementation of std::experimental::string_view.
|
||
* The non-standard function std::copy_exception has been deprecated
|
||
and will be removed in a future version. std::make_exception_ptr
|
||
should be used instead.
|
||
|
||
Fortran
|
||
|
||
* Compatibility notice:
|
||
+ Module files: The version of the module files (.mod) has been
|
||
incremented; additionally, module files are now compressed.
|
||
Fortran MODULEs compiled by earlier GCC versions have to be
|
||
recompiled, when they are USEd by files compiled with GCC 4.9.
|
||
GCC 4.9 is not able to read .mod files of earlier GCC
|
||
versions; attempting to do so gives an error message. Note:
|
||
The ABI of the produced assembler data itself has not changed:
|
||
object files and libraries are fully compatible with older
|
||
versions (except as stated below).
|
||
+ ABI changes:
|
||
o The [19]argument passing ABI has changed for scalar dummy
|
||
arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
|
||
which have both the VALUE and the OPTIONAL attributes.
|
||
o To support finalization the virtual table associated with
|
||
polymorphic variables has changed. Code containing CLASS
|
||
should be recompiled, including all files which define
|
||
derived types involved in the type definition used by
|
||
polymorphic variables. (Note: Due to the incremented
|
||
module version, trying to mix old code with new code will
|
||
usually give an error message.)
|
||
+ GNU Fortran no longer deallocates allocatable variables or
|
||
allocatable components of variables declared in the main
|
||
program. Since Fortran 2008, the standard explicitly states
|
||
that variables declared in the Fortran main program
|
||
automatically have the SAVE attribute.
|
||
+ When opening files, the close-on-exec flag is set if the
|
||
system supports such a feature. This is generally considered
|
||
good practice these days, but if there is a need to pass file
|
||
descriptors to child processes the parent process must now
|
||
remember to clear the close-on-exec flag by calling fcntl(),
|
||
e.g. via ISO_C_BINDING, before executing the child process.
|
||
* The deprecated command-line option -fno-whole-file has been
|
||
removed. (-fwhole-file is the default since GCC 4.6.)
|
||
-fwhole-file/-fno-whole-file continue to be accepted but do not
|
||
influence the code generation.
|
||
* The compiler no longer unconditionally warns about DO loops with
|
||
zero iterations. This warning is now controlled by the -Wzerotrip
|
||
option, which is implied by -Wall.
|
||
* The new NO_ARG_CHECK attribute of the [20]!GCC$ directive can be
|
||
used to disable the type-kind-rank (TKR) argument check for a dummy
|
||
argument. The feature is similar to ISO/IEC TS 29133:2012's
|
||
TYPE(*), except that it additionally also disables the rank check.
|
||
Variables with NO_ARG_CHECK have to be dummy arguments and may only
|
||
be used as argument to ISO_C_BINDING's C_LOC and as actual argument
|
||
to another NO_ARG_CHECK dummy argument; also the other constraints
|
||
of TYPE(*) apply. The dummy arguments should be declared as scalar
|
||
or assumed-size variable of type type(*) (recommended) – or of type
|
||
integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
|
||
the data without further type or shape information is passed,
|
||
similar to C's void*. Note that also TS 29113's
|
||
type(*),dimension(..) accepts arguments of any type and rank;
|
||
contrary to NO_ARG_CHECK assumed-rank arguments pass an array
|
||
descriptor which contains the array shape and stride of the
|
||
argument.
|
||
* [21]Fortran 2003:
|
||
+ Finalization is now supported. It is currently only done for a
|
||
subset of those situations in which it should occur.
|
||
+ Experimental support for scalar character components with
|
||
deferred length (i.e. allocatable string length) in derived
|
||
types has been added. (Deferred-length character variables are
|
||
supported since GCC 4.6.)
|
||
* [22]Fortran 2008:
|
||
+ When STOP or ERROR STOP are used to terminate the execution
|
||
and any exception (but inexact) is signaling, a warning is
|
||
printed to ERROR_UNIT, indicating which exceptions are
|
||
signaling. The [23]-ffpe-summary= command-line option can be
|
||
used to fine-tune for which exceptions the warning should be
|
||
shown.
|
||
+ Rounding on input (READ) is now handled on systems where
|
||
strtod honours the rounding mode. (For output, rounding is
|
||
supported since GCC 4.5.) Note that for input, the compatible
|
||
rounding mode is handled as nearest (i.e., rounding to an even
|
||
least significant [cf. IEC 60559:1989] for a tie, while
|
||
compatible rounds away from zero in that case).
|
||
|
||
Go
|
||
|
||
* GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64
|
||
|
||
* The ARMv8-A crypto and CRC instructions are now supported through
|
||
intrinsics. These are enabled when the architecture supports these
|
||
and are available through the -march=armv8-a+crc and
|
||
-march=armv8-a+crypto options.
|
||
* Initial support for ILP32 has now been added to the compiler. This
|
||
is now available through the command-line option -mabi=ilp32.
|
||
Support for ILP32 is considered experimental as the ABI
|
||
specification is still beta.
|
||
* Coverage of more of the ISA including the SIMD extensions has been
|
||
added. The Advanced SIMD intrinsics have also been improved.
|
||
* The new local register allocator (LRA) is now on by default for the
|
||
AArch64 backend.
|
||
* The REE (Redundant extension elimination) pass has now been enabled
|
||
by default for the AArch64 backend.
|
||
* Tuning for the Cortex-A53 and Cortex-A57 has been improved.
|
||
* Initial big.LITTLE tuning support for the combination of Cortex-A57
|
||
and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
|
||
option.
|
||
* A number of structural changes have been made to both the ARM and
|
||
AArch64 backends to facilitate improved code-generation.
|
||
* As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
|
||
has been added and can be enabled by giving the
|
||
-mfix-cortex-a53-835769 option. Alternatively it can be enabled by
|
||
default by configuring GCC with the --enable-fix-cortex-a53-835769
|
||
option.
|
||
|
||
ARC
|
||
|
||
* A port for Synopsys Designware ARC has been contributed by Embecosm
|
||
and Synopsys Inc.
|
||
|
||
ARM
|
||
|
||
* Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
|
||
disabled by default. This was found to generate better code in only
|
||
a small number of cases. It can be turned back on with the
|
||
-mneon-for-64bits option.
|
||
* Further support for the ARMv8-A architecture, notably implementing
|
||
the restriction around IT blocks in the Thumb32 instruction set has
|
||
been added. The -mrestrict-it option can be used with
|
||
-march=armv7-a or the -march=armv7ve options to make code
|
||
generation fully compatible with the deprecated instructions in
|
||
ARMv8-A.
|
||
* Support has now been added for the ARMv7ve variant of the
|
||
architecture. This can be used by the -march=armv7ve option.
|
||
* The ARMv8-A crypto and CRC instructions are now supported through
|
||
intrinsics and are available through the -march=armv8-a+crc and
|
||
mfpu=crypto-neon-fp-armv8 options.
|
||
* LRA is now on by default for the ARM target. This can be turned off
|
||
using the -mno-lra option. This option is a purely transitionary
|
||
command-line option and will be removed in a future release. We are
|
||
interested in any bug reports regarding functional and performance
|
||
regressions with LRA.
|
||
* A new option -mslow-flash-data to improve performance of programs
|
||
fetching data on slow flash memory has now been introduced for the
|
||
ARMv7-M profile cores.
|
||
* A new option -mpic-data-is-text-relative for targets that allows
|
||
data segments to be relative to text segments has been added. This
|
||
is on by default for all targets except VxWorks RTP.
|
||
* A number of infrastructural changes have been made to both the ARM
|
||
and AArch64 backends to facilitate improved code-generation.
|
||
* GCC now supports Cortex-A12 and the Cortex-R7 through the
|
||
-mcpu=cortex-a12 and -mcpu=cortex-r7 options.
|
||
* GCC now has tuning for the Cortex-A57 and Cortex-A53 through the
|
||
-mcpu=cortex-a57 and -mcpu=cortex-a53 options.
|
||
* Initial big.LITTLE tuning support for the combination of Cortex-A57
|
||
and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
|
||
option. Similar support was added for the combination of Cortex-A15
|
||
and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7 option.
|
||
* Further performance optimizations for the Cortex-A15 and the
|
||
Cortex-M4 have been added.
|
||
* A number of code generation improvements for Thumb2 to reduce code
|
||
size when compiling for the M-profile processors.
|
||
|
||
AVR
|
||
|
||
* A new command-line option -mfract-convert-truncate has been added.
|
||
It allows compiler to use truncation instead of rounding towards
|
||
zero for fractional fixed-point types.
|
||
|
||
IA-32/x86-64
|
||
|
||
* -mfpmath=sse is now implied by -ffast-math on all targets where
|
||
SSE2 is supported.
|
||
* Intel AVX-512 support was added to GCC. That includes inline
|
||
assembly support, new registers and extending existing ones, new
|
||
intrinsics (covered by corresponding testsuite), and basic
|
||
autovectorization. AVX-512 instructions are available via the
|
||
following GCC switches: AVX-512 foundation instructions: -mavx512f,
|
||
AVX-512 prefetch instructions: -mavx512pf, AVX-512 exponential and
|
||
reciprocal instructions: -mavx512er, AVX-512 conflict detection
|
||
instructions: -mavx512cd.
|
||
* It is now possible to call x86 intrinsics from select functions in
|
||
a file that are tagged with the corresponding target attribute
|
||
without having to compile the entire file with the -mxxx option.
|
||
This improves the usability of x86 intrinsics and is particularly
|
||
useful when doing [24]Function Multiversioning.
|
||
* GCC now supports the new Intel microarchitecture named Silvermont
|
||
through -march=silvermont.
|
||
* GCC now supports the new Intel microarchitecture named Broadwell
|
||
through -march=broadwell.
|
||
* Optimizing for other Intel microarchitectures have been renamed to
|
||
-march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
|
||
* -march=generic has been retuned for better support of Intel core
|
||
and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel
|
||
Pentium-M, and Pentium4 based CPUs is no longer considered
|
||
important for generic.
|
||
* -mtune=intel can now be used to generate code running well on the
|
||
most current Intel processors, which are Haswell and Silvermont for
|
||
GCC 4.9.
|
||
* Support to encode 32-bit assembly instructions in 16-bit format is
|
||
now available through the -m16 command-line option.
|
||
* Better inlining of memcpy and memset that is aware of value ranges
|
||
and produces shorter alignment prologues.
|
||
* -mno-accumulate-outgoing-args is now honored when unwind
|
||
information is output. Argument accumulation is also now turned off
|
||
for portions of programs optimized for size.
|
||
* Support for new AMD family 15h processors (Excavator core) is now
|
||
available through the -march=bdver4 and -mtune=bdver4 options.
|
||
|
||
MSP430
|
||
|
||
* A new command-line option -mcpu= has been added to the MSP430
|
||
backend. This option is used to specify the ISA to be used.
|
||
Accepted values are msp430 (the default), msp430x and msp430xv2.
|
||
The ISA is no longer deduced from the -mmcu= option as there are
|
||
far too many different MCU names. The -mmcu= option is still
|
||
supported, and this is still used to select linker scripts and
|
||
generate a C preprocessor symbol that will be recognised by the
|
||
msp430.h header file.
|
||
|
||
NDS32
|
||
|
||
* A new nds32 port supports the 32-bit architecture from Andes
|
||
Technology Corporation.
|
||
* The port provides initial support for the V2, V3, V3m instruction
|
||
set architectures.
|
||
|
||
Nios II
|
||
|
||
* A port for the Altera Nios II has been contributed by Mentor
|
||
Graphics.
|
||
|
||
PowerPC / PowerPC64 / RS6000
|
||
|
||
* GCC now supports Power ISA 2.07, which includes support for
|
||
Hardware Transactional Memory (HTM), Quadword atomics and several
|
||
VMX and VSX additions, including Crypto, 64-bit integer, 128-bit
|
||
integer and decimal integer operations.
|
||
* Support for the POWER8 processor is now available through the
|
||
-mcpu=power8 and -mtune=power8 options.
|
||
* The libitm library has been modified to add a HTM fastpath that
|
||
automatically uses POWER's HTM hardware instructions when it is
|
||
executing on a HTM enabled processor.
|
||
* Support for the new powerpc64le-linux platform has been added. It
|
||
defaults to generating code that conforms to the ELFV2 ABI.
|
||
|
||
S/390, System z
|
||
|
||
* Support for the Transactional Execution Facility included with the
|
||
IBM zEnterprise zEC12 processor has been added. A set of GCC style
|
||
builtins as well as XLC style builtins are provided. The builtins
|
||
are enabled by default when using the -march=zEC12 option but can
|
||
explicitly be disabled with -mno-htm. Using the GCC builtins also
|
||
libitm supports hardware transactions on S/390.
|
||
* The hotpatch features allows to prepare functions for hotpatching.
|
||
A certain amount of bytes is reserved before the function entry
|
||
label plus a NOP is inserted at its very beginning to implement a
|
||
backward jump when applying a patch. The feature can either be
|
||
enabled per compilation unit via the command-line option -mhotpatch
|
||
or per function using the hotpatch attribute.
|
||
* The shrink wrap optimization is now supported on S/390 and enabled
|
||
by default.
|
||
* A major rework of the routines to determine which registers need to
|
||
be saved and restored in function prologue/epilogue now allow to
|
||
use floating point registers as save slots. This will happen for
|
||
certain leaf function with -march=z10 or higher.
|
||
* The LRA rtl pass replaces reload by default on S/390.
|
||
|
||
RX
|
||
|
||
* The port now allows to specify the RX100, RX200, and RX600
|
||
processors with the command-line options -mcpu=rx100, -mcpu=rx200
|
||
and -mcpu=rx600.
|
||
|
||
SH
|
||
|
||
* Minor improvements to code generated for integer arithmetic and
|
||
code that involves the T bit.
|
||
* Added support for the SH2A clips and clipu instructions. The
|
||
compiler will now try to utilize them for min/max expressions such
|
||
as max (-128, min (127, x)).
|
||
* Added support for the cmp/str instruction through built-in
|
||
functions such as __builtin_strlen. When not optimizing for size,
|
||
the compiler will now expand calls to e.g. strlen as an inlined
|
||
sequences which utilize the cmp/str instruction.
|
||
* Improved code generated around volatile memory loads and stores.
|
||
* The option -mcbranchdi has been deprecated. Specifying it will
|
||
result in a warning and will not influence code generation.
|
||
* The option -mcmpeqdi has been deprecated. Specifying it will result
|
||
in a warning and will not influence code generation.
|
||
|
||
GCC 4.9.1
|
||
|
||
This is the [25]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.9.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Version 4.0 of the OpenMP specification is supported even in Fortran,
|
||
not just C and C++.
|
||
|
||
GCC 4.9.2
|
||
|
||
This is the [26]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.9.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.9.3
|
||
|
||
This is the [27]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.9.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.9.4
|
||
|
||
This is the [28]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.9.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [29]GCC manuals. If that fails, the
|
||
[30]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [31]gcc@gcc.gnu.org. All of [32]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [33]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [34]maintained by the GCC team. Last modified
|
||
2018-12-01[35].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
|
||
2. https://gcc.gnu.org/PR60825
|
||
3. https://gcc.gnu.org/gcc-4.9/porting_to.html
|
||
4. https://www.openmp.org/specifications/
|
||
5. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
|
||
6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
|
||
7. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
|
||
8. https://www.cilkplus.org/
|
||
9. http://gcc.gnu.org/projects/cxx1y.html
|
||
10. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
|
||
11. http://gcc.gnu.org/projects/cxx1y.html
|
||
12. http://gcc.gnu.org/projects/cxx1y.html
|
||
13. http://gcc.gnu.org/projects/cxx1y.html
|
||
14. http://gcc.gnu.org/projects/cxx1y.html
|
||
15. http://gcc.gnu.org/projects/cxx1y.html
|
||
16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
|
||
17. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
|
||
18. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
|
||
21. https://gcc.gnu.org/wiki/Fortran2003Status
|
||
22. https://gcc.gnu.org/wiki/Fortran2008Status
|
||
23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
|
||
24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
|
||
25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
|
||
26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
|
||
27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
|
||
28. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
|
||
29. https://gcc.gnu.org/onlinedocs/
|
||
30. mailto:gcc-help@gcc.gnu.org
|
||
31. mailto:gcc@gcc.gnu.org
|
||
32. https://gcc.gnu.org/lists.html
|
||
33. https://www.fsf.org/
|
||
34. https://gcc.gnu.org/about.html
|
||
35. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.8/index.html
|
||
GCC 4.8 Release Series
|
||
|
||
June 23, 2015
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.8.5.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.8.4 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.8.5
|
||
June 23, 2015 ([2]changes, [3]documentation)
|
||
|
||
GCC 4.8.4
|
||
December 19, 2014 ([4]changes, [5]documentation)
|
||
|
||
GCC 4.8.3
|
||
May 22, 2014 ([6]changes, [7]documentation)
|
||
|
||
GCC 4.8.2
|
||
October 16, 2013 ([8]changes, [9]documentation)
|
||
|
||
GCC 4.8.1
|
||
May 31, 2013 ([10]changes, [11]documentation)
|
||
|
||
GCC 4.8.0
|
||
March 22, 2013 ([12]changes, [13]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [14]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [15]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [16]GCC
|
||
project web site or contact the [17]GCC development mailing list.
|
||
|
||
To obtain GCC please use [18]our mirror sites or [19]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [20]GCC manuals. If that fails, the
|
||
[21]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [22]gcc@gcc.gnu.org. All of [23]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [25]maintained by the GCC team. Last modified
|
||
2018-09-30[26].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
3. https://gcc.gnu.org/onlinedocs/4.8.5/
|
||
4. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
5. https://gcc.gnu.org/onlinedocs/4.8.4/
|
||
6. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
7. https://gcc.gnu.org/onlinedocs/4.8.3/
|
||
8. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
9. https://gcc.gnu.org/onlinedocs/4.8.2/
|
||
10. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
11. https://gcc.gnu.org/onlinedocs/4.8.1/
|
||
12. http://gcc.gnu.org/gcc-4.8/changes.html
|
||
13. https://gcc.gnu.org/onlinedocs/4.8.0/
|
||
14. http://gcc.gnu.org/gcc-4.8/buildstat.html
|
||
15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
16. http://gcc.gnu.org/index.html
|
||
17. mailto:gcc@gcc.gnu.org
|
||
18. http://gcc.gnu.org/mirrors.html
|
||
19. http://gcc.gnu.org/svn.html
|
||
20. https://gcc.gnu.org/onlinedocs/
|
||
21. mailto:gcc-help@gcc.gnu.org
|
||
22. mailto:gcc@gcc.gnu.org
|
||
23. https://gcc.gnu.org/lists.html
|
||
24. https://www.fsf.org/
|
||
25. https://gcc.gnu.org/about.html
|
||
26. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.8/changes.html
|
||
GCC 4.8 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
GCC now uses C++ as its implementation language. This means that to
|
||
build GCC from sources, you will need a C++ compiler that understands
|
||
C++ 2003. For more details on the rationale and specific changes,
|
||
please refer to the [1]C++ conversion page.
|
||
|
||
To enable the Graphite framework for loop optimizations you now need
|
||
CLooG version 0.18.0 and ISL version 0.11.1. Both can be obtained from
|
||
the [2]GCC infrastructure directory. The installation manual contains
|
||
more information about requirements to build GCC.
|
||
|
||
GCC now uses a more aggressive analysis to derive an upper bound for
|
||
the number of iterations of loops using constraints imposed by language
|
||
standards. This may cause non-conforming programs to no longer work as
|
||
expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new
|
||
option, -fno-aggressive-loop-optimizations, was added to disable this
|
||
aggressive analysis. In some loops that have known constant number of
|
||
iterations, but undefined behavior is known to occur in the loop before
|
||
reaching or during the last iteration, GCC will warn about the
|
||
undefined behavior in the loop instead of deriving lower upper bound of
|
||
the number of iterations for the loop. The warning can be disabled with
|
||
-Wno-aggressive-loop-optimizations.
|
||
|
||
On ARM, a bug has been fixed in GCC's implementation of the AAPCS rules
|
||
for the layout of vectors that could lead to wrong code being
|
||
generated. Vectors larger than 8 bytes in size are now by default
|
||
aligned to an 8-byte boundary. This is an ABI change: code that makes
|
||
explicit use of vector types may be incompatible with binary objects
|
||
built with older versions of GCC. Auto-vectorized code is not affected
|
||
by this change.
|
||
|
||
On AVR, support has been removed for the command-line option
|
||
-mshort-calls deprecated in GCC 4.7.
|
||
|
||
On AVR, the configure option --with-avrlibc supported since GCC 4.7.2
|
||
is turned on per default for all non-RTEMS configurations. This option
|
||
arranges for a better integration of [3]AVR Libc with avr-gcc. For
|
||
technical details, see [4]PR54461. To turn off the option in non-RTEMS
|
||
configurations, use --with-avrlibc=no. If the compiler is configured
|
||
for RTEMS, the option is always turned off.
|
||
|
||
More information on porting to GCC 4.8 from previous versions of GCC
|
||
can be found in the [5]porting guide for this release.
|
||
|
||
General Optimizer Improvements (and Changes)
|
||
|
||
* DWARF4 is now the default when generating DWARF debug information.
|
||
When -g is used on a platform that uses DWARF debugging
|
||
information, GCC will now default to -gdwarf-4
|
||
-fno-debug-types-section.
|
||
GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information
|
||
consumers support DWARF4 by default. Before GCC 4.8 the default
|
||
version used was DWARF2. To make GCC 4.8 generate an older DWARF
|
||
version use -g together with -gdwarf-2 or -gdwarf-3. The default
|
||
for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.
|
||
* A new general optimization level, -Og, has been introduced. It
|
||
addresses the need for fast compilation and a superior debugging
|
||
experience while providing a reasonable level of run-time
|
||
performance. Overall experience for development should be better
|
||
than the default optimization level -O0.
|
||
* A new option -ftree-partial-pre was added to control the partial
|
||
redundancy elimination (PRE) optimization. This option is enabled
|
||
by default at the -O3 optimization level, and it makes PRE more
|
||
aggressive.
|
||
* The option -fconserve-space has been removed; it was no longer
|
||
useful on most targets since GCC supports putting variables into
|
||
BSS without making them common.
|
||
* The struct reorg and matrix reorg optimizations (command-line
|
||
options -fipa-struct-reorg and -fipa-matrix-reorg) have been
|
||
removed. They did not always work correctly, nor did they work with
|
||
link-time optimization (LTO), hence were only applicable to
|
||
programs consisting of a single translation unit.
|
||
* Several scalability bottle-necks have been removed from GCC's
|
||
optimization passes. Compilation of extremely large functions, e.g.
|
||
due to the use of the flatten attribute in the "Eigen" C++ linear
|
||
algebra templates library, is significantly faster than previous
|
||
releases of GCC.
|
||
* Link-time optimization (LTO) improvements:
|
||
+ LTO partitioning has been rewritten for better reliability and
|
||
maintanibility. Several important bugs leading to link
|
||
failures have been fixed.
|
||
* Interprocedural optimization improvements:
|
||
+ A new symbol table has been implemented. It builds on existing
|
||
callgraph and varpool modules and provide a new API. Unusual
|
||
symbol visibilities and aliases are handled more consistently
|
||
leading to, for example, more aggressive unreachable code
|
||
removal with LTO.
|
||
+ The inline heuristic can now bypass limits on the size of of
|
||
inlined functions when the inlining is particularly
|
||
profitable. This happens, for example, when loop bounds or
|
||
array strides get propagated.
|
||
+ Values passed through aggregates (either by value or
|
||
reference) are now propagated at the inter-procedural level
|
||
leading to better inlining decisions (for example in the case
|
||
of Fortran array descriptors) and devirtualization.
|
||
* [6]AddressSanitizer , a fast memory error detector, has been added
|
||
and can be enabled via -fsanitize=address. Memory access
|
||
instructions will be instrumented to detect heap-, stack-, and
|
||
global-buffer overflow as well as use-after-free bugs. To get nicer
|
||
stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
|
||
available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
|
||
x86-64 Darwin.
|
||
* [7]ThreadSanitizer has been added and can be enabled via
|
||
-fsanitize=thread. Instructions will be instrumented to detect data
|
||
races. The ThreadSanitizer is available on x86-64 GNU/Linux.
|
||
* A new local register allocator (LRA) has been implemented, which
|
||
replaces the 26 year old reload pass and improves generated code
|
||
quality. For now it is active on the IA-32 and x86-64 targets.
|
||
* Support for transactional memory has been implemented on the
|
||
following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
|
||
Alpha.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
C family
|
||
|
||
* Each diagnostic emitted now includes the original source line and a
|
||
caret '^' indicating the column. The option
|
||
-fno-diagnostics-show-caret suppresses this information.
|
||
* The option -ftrack-macro-expansion=2 is now enabled by default.
|
||
This allows the compiler to display the macro expansion stack in
|
||
diagnostics. Combined with the caret information, an example
|
||
diagnostic showing these two features is:
|
||
|
||
t.c:1:94: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float
|
||
’)
|
||
#define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
|
||
_b = (B); __a < __b ? __b : __a; })
|
||
|
||
^
|
||
t.c:7:7: note: in expansion of macro 'MYMAX'
|
||
X = MYMAX(P, F);
|
||
^
|
||
|
||
* A new -Wsizeof-pointer-memaccess warning has been added (also
|
||
enabled by -Wall) to warn about suspicious length parameters to
|
||
certain string and memory built-in functions if the argument uses
|
||
sizeof. This warning warns e.g. about memset (ptr, 0, sizeof
|
||
(ptr)); if ptr is not an array, but a pointer, and suggests a
|
||
possible fix, or about memcpy (&foo, ptr, sizeof (&foo));.
|
||
* The new option -Wpedantic is an alias for -pedantic, which is now
|
||
deprecated. The forms -Wno-pedantic, -Werror=pedantic, and
|
||
-Wno-error=pedantic work in the same way as for any other -W
|
||
option. One caveat is that -Werror=pedantic is not equivalent to
|
||
-pedantic-errors, since the latter makes into errors some warnings
|
||
that are not controlled by -Wpedantic, and the former only affects
|
||
diagnostics that are disabled when using -Wno-pedantic.
|
||
* The option -Wshadow no longer warns if a declaration shadows a
|
||
function declaration, unless the former declares a function or
|
||
pointer to function, because this is [8]a common and valid case in
|
||
real-world code.
|
||
|
||
C++
|
||
|
||
* G++ now implements the [9]C++11 thread_local keyword; this differs
|
||
from the GNU __thread keyword primarily in that it allows dynamic
|
||
initialization and destruction semantics. Unfortunately, this
|
||
support requires a run-time penalty for references to
|
||
non-function-local thread_local variables defined in a different
|
||
translation unit even if they don't need dynamic initialization, so
|
||
users may want to continue to use __thread for TLS variables with
|
||
static initialization semantics.
|
||
If the programmer can be sure that no use of the variable in a
|
||
non-defining TU needs to trigger dynamic initialization (either
|
||
because the variable is statically initialized, or a use of the
|
||
variable in the defining TU will be executed before any uses in
|
||
another TU), they can avoid this overhead with the
|
||
-fno-extern-tls-init option.
|
||
OpenMP threadprivate variables now also support dynamic
|
||
initialization and destruction by the same mechanism.
|
||
* G++ now implements the [10]C++11 attribute syntax, e.g.
|
||
|
||
[[noreturn]] void f();
|
||
|
||
and also the alignment specifier, e.g.
|
||
|
||
alignas(double) int i;
|
||
|
||
* G++ now implements [11]C++11 inheriting constructors, e.g.
|
||
|
||
struct A { A(int); };
|
||
struct B: A { using A::A; }; // defines B::B(int)
|
||
B b(42); // OK
|
||
|
||
* As of GCC 4.8.1, G++ implements the change to decltype semantics
|
||
from [12]N3276.
|
||
|
||
struct A f();
|
||
decltype(f()) g(); // OK, return type of f() is not required to be complete.
|
||
|
||
* As of GCC 4.8.1, G++ implements [13]C++11 ref-qualifiers, e.g.
|
||
|
||
struct A { int f() &; };
|
||
int i = A().f(); // error, f() requires an lvalue object
|
||
|
||
* G++ now supports a -std=c++1y option for experimentation with
|
||
features proposed for the next revision of the standard, expected
|
||
around 2014. Currently the only difference from -std=c++11 is
|
||
support for return type deduction in normal functions, as proposed
|
||
in [14]N3386. Status of C++1y features in GCC 4.8 can be found
|
||
[15]here.
|
||
* The G++ namespace association extension, __attribute ((strong)),
|
||
has been deprecated. Inline namespaces should be used instead.
|
||
* G++ now supports a -fext-numeric-literal option to control whether
|
||
GNU numeric literal suffixes are accepted as extensions or
|
||
processed as C++11 user-defined numeric literal suffixes. The flag
|
||
is on (use suffixes for GNU literals) by default for -std=gnu++*,
|
||
and -std=c++98. The flag is off (use suffixes for user-defined
|
||
literals) by default for -std=c++11 and later.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* [16]Improved experimental support for the new ISO C++ standard,
|
||
C++11, including:
|
||
+ forward_list meets the allocator-aware container requirements;
|
||
+ this_thread::sleep_for(), this_thread::sleep_until() and
|
||
this_thread::yield() are defined without requiring the
|
||
configure option --enable-libstdcxx-time;
|
||
* Improvements to <random>:
|
||
+ SSE optimized normal_distribution.
|
||
+ Use of hardware RNG instruction for random_device on new x86
|
||
processors (requires the assembler to support the
|
||
instruction.)
|
||
and <ext/random>:
|
||
+ New random number engine simd_fast_mersenne_twister_engine
|
||
with an optimized SSE implementation.
|
||
+ New random number distributions beta_distribution,
|
||
normal_mv_distribution, rice_distribution,
|
||
nakagami_distribution, pareto_distribution, k_distribution,
|
||
arcsine_distribution, hoyt_distribution.
|
||
* Added --disable-libstdcxx-verbose configure option to disable
|
||
diagnostic messages issued when a process terminates abnormally.
|
||
This may be useful for embedded systems to reduce the size of
|
||
executables that link statically to the library.
|
||
|
||
Fortran
|
||
|
||
* Compatibility notice:
|
||
+ Module files: The version of module files (.mod) has been
|
||
incremented. Fortran MODULEs compiled by earlier GCC versions
|
||
have to be recompiled, when they are USEd by files compiled
|
||
with GCC 4.8. GCC 4.8 is not able to read .mod files created
|
||
by earlier versions; attempting to do so gives an error
|
||
message.
|
||
Note: The ABI of the produced assembler data itself has not
|
||
changed; object files and libraries are fully compatible with
|
||
older versions except as noted below.
|
||
+ ABI: Some internal names (used in the assembler/object file)
|
||
have changed for symbols declared in the specification part of
|
||
a module. If an affected module – or a file using it via use
|
||
association – is recompiled, the module and all files which
|
||
directly use such symbols have to be recompiled as well. This
|
||
change only affects the following kind of module symbols:
|
||
o Procedure pointers. Note: C-interoperable function
|
||
pointers (type(c_funptr)) are not affected nor are
|
||
procedure-pointer components.
|
||
o Deferred-length character strings.
|
||
* The [17]BACKTRACE intrinsic subroutine has been added. It shows a
|
||
backtrace at an arbitrary place in user code; program execution
|
||
continues normally afterwards.
|
||
* The [18]-Wc-binding-type warning option has been added (disabled by
|
||
default). It warns if the a variable might not be C interoperable;
|
||
in particular, if the variable has been declared using an intrinsic
|
||
type with default kind instead of using a kind parameter defined
|
||
for C interoperability in the intrinsic ISO_C_Binding module.
|
||
Before, this warning was always printed. The -Wc-binding-type
|
||
option is enabled by -Wall.
|
||
* The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
|
||
options have been added, which diagnose when code is inserted for
|
||
automatic (re)allocation of a variable during assignment. This
|
||
option can be used to decide whether it is safe to use
|
||
[20]-fno-realloc-lhs. Additionally, it can be used to find
|
||
automatic (re)allocation in hot loops. (For arrays, replacing
|
||
"var=" by "var(:)=" disables the automatic reallocation.)
|
||
* The [21]-Wcompare-reals command-line option has been added. When
|
||
this is set, warnings are issued when comparing REAL or COMPLEX
|
||
types for equality and inequality; consider replacing a == b by
|
||
abs(a−b) < eps with a suitable eps. -Wcompare-reals is enabled by
|
||
-Wextra.
|
||
* The [22]-Wtarget-lifetime command-line option has been added
|
||
(enabled with -Wall), which warns if the pointer in a pointer
|
||
assignment might outlive its target.
|
||
* Reading floating point numbers which use "q" for the exponential
|
||
(such as 4.0q0) is now supported as vendor extension for better
|
||
compatibility with old data files. It is strongly recommended to
|
||
use for I/O the equivalent but standard conforming "e" (such as
|
||
4.0e0).
|
||
(For Fortran source code, consider replacing the "q" in
|
||
floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
|
||
suitable qp). Note that – in Fortran source code – replacing "q" by
|
||
a simple "e" is not equivalent.)
|
||
* The GFORTRAN_TMPDIR environment variable for specifying a
|
||
non-default directory for files opened with STATUS="SCRATCH", is
|
||
not used anymore. Instead gfortran checks the POSIX/GNU standard
|
||
TMPDIR environment variable. If TMPDIR is not defined, gfortran
|
||
falls back to other methods to determine the directory for
|
||
temporary files as documented in the [23]user manual.
|
||
* [24]Fortran 2003:
|
||
+ Support for unlimited polymorphic variables (CLASS(*)) has
|
||
been added. Nonconstant character lengths are not yet
|
||
supported.
|
||
* [25]TS 29113:
|
||
+ Assumed types (TYPE(*)) are now supported.
|
||
+ Experimental support for assumed-rank arrays (dimension(..))
|
||
has been added. Note that currently gfortran's own array
|
||
descriptor is used, which is different from the one defined in
|
||
TS29113, see [26]gfortran's header file or use the [27]Chasm
|
||
Language Interoperability Tools.
|
||
|
||
Go
|
||
|
||
* GCC 4.8.2 provides a complete implementation of the Go 1.1.2
|
||
release.
|
||
* GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
|
||
release. The library support is not quite complete.
|
||
* Go has been tested on GNU/Linux and Solaris platforms for various
|
||
processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
|
||
work on other platforms as well.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AArch64
|
||
|
||
* A new port has been added to support AArch64, the new 64-bit
|
||
architecture from ARM. Note that this is a separate port from the
|
||
existing 32-bit ARM port.
|
||
* The port provides initial support for the Cortex-A53 and the
|
||
Cortex-A57 processors with the command line options
|
||
-mcpu=cortex-a53 and -mcpu=cortex-a57.
|
||
* As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
|
||
has been added and can be enabled by giving the
|
||
-mfix-cortex-a53-835769 option. Alternatively it can be enabled by
|
||
default by configuring GCC with the --enable-fix-cortex-a53-835769
|
||
option.
|
||
|
||
ARM
|
||
|
||
* Initial support has been added for the AArch32 extensions defined
|
||
in the ARMv8 architecture.
|
||
* Code generation improvements for the Cortex-A7 and Cortex-A15 CPUs.
|
||
* A new option, -mcpu=marvell-pj4, has been added to generate code
|
||
for the Marvell PJ4 processor.
|
||
* The compiler can now automatically generate the VFMA, VFMS, REVSH
|
||
and REV16 instructions.
|
||
* A new vectorizer cost model for Advanced SIMD configurations to
|
||
improve the auto-vectorization strategies used.
|
||
* The scheduler now takes into account the number of live registers
|
||
to reduce the amount of spilling that can occur. This should
|
||
improve code performance in large functions. The limit can be
|
||
removed by using the option -fno-sched-pressure.
|
||
* Improvements have been made to the Marvell iWMMX code generation
|
||
and support for the iWMMX2 SIMD unit has been added. The option
|
||
-mcpu=iwmmxt2 can be used to enable code generation for the latter.
|
||
* A number of code generation improvements for Thumb2 to reduce code
|
||
size when compiling for the M-profile processors.
|
||
* The RTEMS (arm-rtems) port has been updated to use the EABI.
|
||
* Code generation support for the old FPA and Maverick floating-point
|
||
architectures has been removed. Ports that previously relied on
|
||
these features have also been removed. This includes the targets:
|
||
+ arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
|
||
+ arm*-*-elf (use arm*-*-eabi)
|
||
+ arm*-*-uclinux* (use arm*-*-uclinux*eabi)
|
||
+ arm*-*-ecos-elf (no alternative)
|
||
+ arm*-*-freebsd (no alternative)
|
||
+ arm*-wince-pe* (no alternative).
|
||
|
||
AVR
|
||
|
||
* Support for the "Embedded C" fixed-point has been added. For
|
||
details, see the [28]GCC wiki and the [29]user manual. The support
|
||
is not complete.
|
||
* A new print modifier %r for register operands in inline assembler
|
||
is supported. It will print the raw register number without the
|
||
register prefix 'r':
|
||
/* Return the most significant byte of 'val', a 64-bit value. */
|
||
|
||
unsigned char msb (long long val)
|
||
{
|
||
unsigned char c;
|
||
__asm__ ("mov %0, %r1+7" : "=r" (c) : "r" (val));
|
||
return c;
|
||
}
|
||
The inline assembler in this example will generate code like
|
||
mov r24, 8+7
|
||
provided c is allocated to R24 and val is allocated to R8…R15. This
|
||
works because the GNU assembler accepts plain register numbers
|
||
without register prefix.
|
||
* Static initializers with 3-byte symbols are supported now:
|
||
extern const __memx char foo;
|
||
const __memx void *pfoo = &foo;
|
||
This requires at least Binutils 2.23.
|
||
|
||
IA-32/x86-64
|
||
|
||
* Allow -mpreferred-stack-boundary=3 for the x86-64 architecture with
|
||
SSE extensions disabled. Since the x86-64 ABI requires 16 byte
|
||
stack alignment, this is ABI incompatible and intended to be used
|
||
in controlled environments where stack space is an important
|
||
limitation. This option will lead to wrong code when functions
|
||
compiled with 16 byte stack alignment (such as functions from a
|
||
standard library) are called with misaligned stack. In this case,
|
||
SSE instructions may lead to misaligned memory access traps. In
|
||
addition, variable arguments will be handled incorrectly for 16
|
||
byte aligned objects (including x87 long double and __int128),
|
||
leading to wrong results. You must build all modules with
|
||
-mpreferred-stack-boundary=3, including any libraries. This
|
||
includes the system libraries and startup modules.
|
||
* Support for the new Intel processor codename Broadwell with RDSEED,
|
||
ADCX, ADOX, PREFETCHW is available through -madx, -mprfchw,
|
||
-mrdseed command-line options.
|
||
* Support for the Intel RTM and HLE intrinsics, built-in functions
|
||
and code generation is available via -mrtm and -mhle.
|
||
* Support for the Intel FXSR, XSAVE and XSAVEOPT instruction sets.
|
||
Intrinsics and built-in functions are available via -mfxsr, -mxsave
|
||
and -mxsaveopt respectively.
|
||
* New -maddress-mode=[short|long] options for x32.
|
||
-maddress-mode=short overrides default 64-bit addresses to 32-bit
|
||
by emitting the 0x67 address-size override prefix. This is the
|
||
default address mode for x32.
|
||
* New built-in functions to detect run-time CPU type and ISA:
|
||
+ A built-in function __builtin_cpu_is has been added to detect
|
||
if the run-time CPU is of a particular type. It returns a
|
||
positive integer on a match and zero otherwise. It accepts one
|
||
string literal argument, the CPU name. For example,
|
||
__builtin_cpu_is("westmere") returns a positive integer if the
|
||
run-time CPU is an Intel Core i7 Westmere processor. Please
|
||
refer to the [30]user manual for the list of valid CPU names
|
||
recognized.
|
||
+ A built-in function __builtin_cpu_supports has been added to
|
||
detect if the run-time CPU supports a particular ISA feature.
|
||
It returns a positive integer on a match and zero otherwise.
|
||
It accepts one string literal argument, the ISA feature. For
|
||
example, __builtin_cpu_supports("ssse3") returns a positive
|
||
integer if the run-time CPU supports SSSE3 instructions.
|
||
Please refer to the [31]user manual for the list of valid ISA
|
||
names recognized.
|
||
Caveat: If these built-in functions are called before any static
|
||
constructors are invoked, like during IFUNC initialization, then
|
||
the CPU detection initialization must be explicitly run using this
|
||
newly provided built-in function, __builtin_cpu_init. The
|
||
initialization needs to be done only once. For example, this is how
|
||
the invocation would look like inside an IFUNC initializer:
|
||
static void (*some_ifunc_resolver(void))(void)
|
||
{
|
||
__builtin_cpu_init();
|
||
if (__builtin_cpu_is("amdfam10h") ...
|
||
if (__builtin_cpu_supports("popcnt") ...
|
||
}
|
||
|
||
* Function Multiversioning Support with G++:
|
||
It is now possible to create multiple function versions each
|
||
targeting a specific processor and/or ISA. Function versions have
|
||
the same signature but different target attributes. For example,
|
||
here is a program with function versions:
|
||
__attribute__ ((target ("default")))
|
||
int foo(void)
|
||
{
|
||
return 1;
|
||
}
|
||
|
||
__attribute__ ((target ("sse4.2")))
|
||
int foo(void)
|
||
{
|
||
return 2;
|
||
}
|
||
|
||
int main (void)
|
||
{
|
||
int (*p) = &foo;
|
||
assert ((*p)() == foo());
|
||
return 0;
|
||
}
|
||
|
||
Please refer to this [32]wiki for more information.
|
||
* The x86 back end has been improved to allow option -fschedule-insns
|
||
to work reliably. This option can be used to schedule instructions
|
||
better and leads to improved performace in certain cases.
|
||
* Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
|
||
from the Mingw-w64 trunk.
|
||
* Support for new AMD family 15h processors (Steamroller core) is now
|
||
available through the -march=bdver3 and -mtune=bdver3 options.
|
||
* Support for new AMD family 16h processors (Jaguar core) is now
|
||
available through the -march=btver2 and -mtune=btver2 options.
|
||
|
||
FRV
|
||
|
||
* This target now supports the -fstack-usage command-line option.
|
||
|
||
MIPS
|
||
|
||
* GCC can now generate code specifically for the R4700, Broadcom XLP
|
||
and MIPS 34kn processors. The associated -march options are
|
||
-march=r4700, -march=xlp and -march=34kn respectively.
|
||
* GCC now generates better DSP code for MIPS 74k cores thanks to
|
||
further scheduling optimizations.
|
||
* The MIPS port now supports the -fstack-check option.
|
||
* GCC now passes the -mmcu and -mno-mcu options to the assembler.
|
||
* Previous versions of GCC would silently accept -fpic and -fPIC for
|
||
-mno-abicalls targets like mips*-elf. This combination was not
|
||
intended or supported, and did not generate position-independent
|
||
code. GCC 4.8 now reports an error when this combination is used.
|
||
|
||
PowerPC / PowerPC64 / RS6000
|
||
|
||
* SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
|
||
restore or update the VRSAVE register by default. The respective
|
||
operating systems manage the VRSAVE register directly.
|
||
* Large TOC support has been added for AIX through the command line
|
||
option -mcmodel=large.
|
||
* Native Thread-Local Storage support has been added for AIX.
|
||
* VMX (Altivec) and VSX instruction sets now are enabled implicitly
|
||
when targetting processors that support those hardware features on
|
||
AIX 6.1 and above.
|
||
|
||
RX
|
||
|
||
* This target will now issue a warning message whenever multiple fast
|
||
interrupt handlers are found in the same compilation unit. This
|
||
feature can be turned off by the new
|
||
-mno-warn-multiple-fast-interrupts command-line option.
|
||
|
||
S/390, System z
|
||
|
||
* Support for the IBM zEnterprise zEC12 processor has been added.
|
||
When using the -march=zEC12 option, the compiler will generate code
|
||
making use of the following new instructions:
|
||
+ load and trap instructions
|
||
+ 2 new compare and trap instructions
|
||
+ rotate and insert selected bits - without CC clobber
|
||
The -mtune=zEC12 option enables zEC12 specific instruction
|
||
scheduling without making use of new instructions.
|
||
* Register pressure sensitive instruction scheduling is enabled by
|
||
default.
|
||
* The ifunc function attribute is enabled by default.
|
||
* memcpy and memcmp invokations on big memory chunks or with run time
|
||
lengths are not generated inline anymore when tuning for z10 or
|
||
higher. The purpose is to make use of the IFUNC optimized versions
|
||
in Glibc.
|
||
|
||
SH
|
||
|
||
* The default alignment settings have been reduced to be less
|
||
aggressive. This results in more compact code for optimization
|
||
levels other than -Os.
|
||
* Improved support for the __atomic built-in functions:
|
||
+ A new option -matomic-model=model selects the model for the
|
||
generated atomic sequences. The following models are
|
||
supported:
|
||
|
||
soft-gusa
|
||
Software gUSA sequences (SH3* and SH4* only). On
|
||
SH4A targets this will now also partially utilize
|
||
the movco.l and movli.l instructions. This is the
|
||
default when the target is sh3*-*-linux* or
|
||
sh4*-*-linux*.
|
||
|
||
hard-llcs
|
||
Hardware movco.l / movli.l sequences (SH4A only).
|
||
|
||
soft-tcb
|
||
Software thread control block sequences.
|
||
|
||
soft-imask
|
||
Software interrupt flipping sequences (privileged
|
||
mode only). This is the default when the target is
|
||
sh1*-*-linux* or sh2*-*-linux*.
|
||
|
||
none
|
||
Generates function calls to the respective __atomic
|
||
built-in functions. This is the default for SH64
|
||
targets or when the target is not sh*-*-linux*.
|
||
|
||
+ The option -msoft-atomic has been deprecated. It is now an
|
||
alias for -matomic-model=soft-gusa.
|
||
+ A new option -mtas makes the compiler generate the tas.b
|
||
instruction for the __atomic_test_and_set built-in function
|
||
regardless of the selected atomic model.
|
||
+ The __sync functions in libgcc now reflect the selected atomic
|
||
model when building the toolchain.
|
||
* Added support for the mov.b and mov.w instructions with
|
||
displacement addressing.
|
||
* Added support for the SH2A instructions movu.b and movu.w.
|
||
* Various improvements to code generated for integer arithmetic.
|
||
* Improvements to conditional branches and code that involves the T
|
||
bit. A new option -mzdcbranch tells the compiler to favor
|
||
zero-displacement branches. This is enabled by default for SH4*
|
||
targets.
|
||
* The pref instruction will now be emitted by the __builtin_prefetch
|
||
built-in function for SH3* targets.
|
||
* The fmac instruction will now be emitted by the fmaf standard
|
||
function and the __builtin_fmaf built-in function.
|
||
* The -mfused-madd option has been deprecated in favor of the
|
||
machine-independent -ffp-contract option. Notice that the fmac
|
||
instruction will now be generated by default for expressions like a
|
||
* b + c. This is due to the compiler default setting
|
||
-ffp-contract=fast.
|
||
* Added new options -mfsrra and -mfsca to allow the compiler using
|
||
the fsrra and fsca instructions on targets other than SH4A (where
|
||
they are already enabled by default).
|
||
* Added support for the __builtin_bswap32 built-in function. It is
|
||
now expanded as a sequence of swap.b and swap.w instructions
|
||
instead of a library function call.
|
||
* The behavior of the -mieee option has been fixed and the negative
|
||
form -mno-ieee has been added to control the IEEE conformance of
|
||
floating point comparisons. By default -mieee is now enabled and
|
||
the option -ffinite-math-only implicitly sets -mno-ieee.
|
||
* Added support for the built-in functions __builtin_thread_pointer
|
||
and __builtin_set_thread_pointer. This assumes that GBR is used to
|
||
hold the thread pointer of the current thread. Memory loads and
|
||
stores relative to the address returned by __builtin_thread_pointer
|
||
will now also utilize GBR based displacement address modes.
|
||
* The -mdiv= option for targets other than SHmedia has been fixed and
|
||
documented.
|
||
|
||
SPARC
|
||
|
||
* Added optimized instruction scheduling for Niagara4.
|
||
|
||
TILE-Gx
|
||
|
||
* Added support for the -mcmodel=MODEL command-line option. The
|
||
models supported are small and large.
|
||
|
||
V850
|
||
|
||
* This target now supports the E3V5 architecture via the use of the
|
||
new -mv850e3v5 command-line option. It also has experimental
|
||
support for the e3v5 LOOP instruction which can be enabled via the
|
||
new -mloop command-line option.
|
||
|
||
XStormy16
|
||
|
||
* This target now supports the -fstack-usage command-line option.
|
||
|
||
Operating Systems
|
||
|
||
OpenBSD
|
||
|
||
* Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
|
||
support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
|
||
|
||
Windows (Cygwin)
|
||
|
||
* Executables are now linked against shared libgcc by default. The
|
||
previous default was to link statically, which can still be done by
|
||
explicitly specifying -static or static-libgcc on the command line.
|
||
However it is strongly advised against, as it will cause problems
|
||
for any application that makes use of DLLs compiled by GCC. It
|
||
should be alright for a monolithic stand-alone application that
|
||
only links against the Windows DLLs, but offers little or no
|
||
benefit.
|
||
|
||
GCC 4.8.1
|
||
|
||
This is the [33]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.8.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
The C++11 <chrono> std::chrono::system_clock and
|
||
std::chrono::steady_clock classes have changed ABI in GCC 4.8.1, they
|
||
both are now separate (never typedefs of each other), both use
|
||
std::chrono::nanoseconds resolution, on most GNU/Linux configurations
|
||
std::chrono::steady_clock is now finally monotonic, and both classes
|
||
are mangled differently than in the previous GCC releases.
|
||
std::chrono::system_clock::now() with std::chrono::microseconds resp.
|
||
std::chrono::seconds resolution is still exported for backwards
|
||
compatibility with default configured libstdc++. Note that libstdc++
|
||
configured with --enable-libstdcxx-time= used to be ABI incompatible
|
||
with default configured libstdc++ for those two classes and no ABI
|
||
compatibility can be offered for those configurations, so any C++11
|
||
code that uses those classes and has been compiled and linked against
|
||
libstdc++ configured with the non-default --enable-libstdcxx-time=
|
||
configuration option needs to be recompiled.
|
||
|
||
GCC 4.8.2
|
||
|
||
This is the [34]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.8.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.8.3
|
||
|
||
This is the [35]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.8.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Support for the new powerpc64le-linux platform has been added. It
|
||
defaults to generating code that conforms to the ELFV2 ABI.
|
||
|
||
GCC 4.8.4
|
||
|
||
This is the [36]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.8.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.8.5
|
||
|
||
This is the [37]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.8.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [38]GCC manuals. If that fails, the
|
||
[39]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [40]gcc@gcc.gnu.org. All of [41]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [42]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [43]maintained by the GCC team. Last modified
|
||
2018-09-30[44].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/wiki/cxx-conversion
|
||
2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
|
||
3. http://www.nongnu.org/avr-libc/
|
||
4. https://gcc.gnu.org/PR54461
|
||
5. https://gcc.gnu.org/gcc-4.8/porting_to.html
|
||
6. https://github.com/google/sanitizers
|
||
7. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
|
||
8. https://lkml.org/lkml/2006/11/28/239
|
||
9. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
|
||
10. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
|
||
11. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
|
||
12. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
|
||
13. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
|
||
14. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
|
||
15. http://gcc.gnu.org/projects/cxx1y.html
|
||
16. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
|
||
17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
|
||
18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
|
||
19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
|
||
20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
|
||
21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
|
||
22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
|
||
23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
|
||
24. https://gcc.gnu.org/wiki/Fortran2003Status
|
||
25. https://gcc.gnu.org/wiki/TS29113Status
|
||
26. https://gcc.gnu.org/viewcvs/trunk/libgfortran/libgfortran.h?content-type=text/plain&view=co
|
||
27. http://chasm-interop.sourceforge.net/
|
||
28. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
|
||
29. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
|
||
30. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
|
||
31. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
|
||
32. https://gcc.gnu.org/wiki/FunctionMultiVersioning
|
||
33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
|
||
34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
|
||
35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
|
||
36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
|
||
37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
|
||
38. https://gcc.gnu.org/onlinedocs/
|
||
39. mailto:gcc-help@gcc.gnu.org
|
||
40. mailto:gcc@gcc.gnu.org
|
||
41. https://gcc.gnu.org/lists.html
|
||
42. https://www.fsf.org/
|
||
43. https://gcc.gnu.org/about.html
|
||
44. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.7/index.html
|
||
GCC 4.7 Release Series
|
||
|
||
June 12, 2014
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.7.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.7.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.7.4
|
||
June 12, 2014 ([2]changes, [3]documentation)
|
||
|
||
GCC 4.7.3
|
||
April 11, 2013 ([4]changes, [5]documentation)
|
||
|
||
GCC 4.7.2
|
||
September 20, 2012 ([6]changes, [7]documentation)
|
||
|
||
GCC 4.7.1
|
||
June 14, 2012 ([8]changes, [9]documentation)
|
||
|
||
GCC 4.7.0
|
||
March 22, 2012 ([10]changes, [11]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [12]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [13]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [14]GCC
|
||
project web site or contact the [15]GCC development mailing list.
|
||
|
||
To obtain GCC please use [16]our mirror sites or [17]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-09-30[24].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.7/changes.html
|
||
3. https://gcc.gnu.org/onlinedocs/4.7.4/
|
||
4. http://gcc.gnu.org/gcc-4.7/changes.html
|
||
5. https://gcc.gnu.org/onlinedocs/4.7.3/
|
||
6. http://gcc.gnu.org/gcc-4.7/changes.html
|
||
7. https://gcc.gnu.org/onlinedocs/4.7.2/
|
||
8. http://gcc.gnu.org/gcc-4.7/changes.html
|
||
9. https://gcc.gnu.org/onlinedocs/4.7.1/
|
||
10. http://gcc.gnu.org/gcc-4.7/changes.html
|
||
11. https://gcc.gnu.org/onlinedocs/4.7.0/
|
||
12. http://gcc.gnu.org/gcc-4.7/buildstat.html
|
||
13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
14. http://gcc.gnu.org/index.html
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. http://gcc.gnu.org/mirrors.html
|
||
17. http://gcc.gnu.org/svn.html
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.7/changes.html
|
||
GCC 4.7 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* The -fconserve-space flag has been deprecated. The flag had no
|
||
effect for most targets: only targets without a global .bss section
|
||
and without support for switchable sections. Furthermore, the flag
|
||
only had an effect for G++, where it could result in wrong
|
||
semantics (please refer to the GCC manual for further details). The
|
||
flag will be removed in GCC 4.8
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.7.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
All GCC ports for the following processor architectures have been
|
||
declared obsolete:
|
||
+ picoChip (picochip-*)
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ IRIX 6.5 (mips-sgi-irix6.5)
|
||
+ MIPS OpenBSD (mips*-*-openbsd*)
|
||
+ Solaris 8 (*-*-solaris2.8). Details can be found in the
|
||
[1]announcement.
|
||
+ Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
|
||
* On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
|
||
ARMv7-R, or ARMv7-M, the new option -munaligned-access is active by
|
||
default, which for some sources generates code that accesses memory
|
||
on unaligned addresses. This requires the kernel of those systems
|
||
to enable such accesses (controlled by CP15 register c1, refer to
|
||
ARM documentation). Alternatively, or for compatibility with
|
||
kernels where unaligned accesses are not supported, all code has to
|
||
be compiled with -mno-unaligned-access. Upstream Linux kernel
|
||
releases have automatically and unconditionally supported unaligned
|
||
accesses as emitted by GCC due to this option being active since
|
||
version 2.6.28.
|
||
* Support on ARM for the legacy floating-point accelerator (FPA) and
|
||
the mixed-endian floating-point format that it used has been
|
||
obsoleted. The ports that still use this format have been obsoleted
|
||
as well. Many legacy ARM ports already provide an alternative that
|
||
uses the VFP floating-point format. The obsolete ports will be
|
||
deleted in the next release.
|
||
The obsolete ports with alternatives are:
|
||
+ arm*-*-rtems (use arm*-*-rtemseabi)
|
||
+ arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
|
||
+ arm*-*-elf (use arm*-*-eabi)
|
||
+ arm*-*-uclinux* (use arm*-*-uclinux*eabi)
|
||
Note, however, that these alternatives are not binary compatible
|
||
with their legacy counterparts (although some can support running
|
||
legacy applications).
|
||
The obsolete ports that currently lack a modern alternative are:
|
||
+ arm*-*-ecos-elf
|
||
+ arm*-*-freebsd
|
||
+ arm*-wince-pe*
|
||
New ports that support more recent versions of the architecture are
|
||
welcome.
|
||
* Support for the Maverick co-processor on ARM has been obsoleted.
|
||
Code to support it will be deleted in the next release.
|
||
* Support has been removed for Unix International threads on Solaris
|
||
2, so the --enable-threads=solaris configure option and the
|
||
-threads compiler option don't work any longer.
|
||
* Support has been removed for the Solaris BSD Compatibility Package,
|
||
which lives in /usr/ucbinclude and /usr/ucblib. It has been removed
|
||
from Solaris 11, and was only intended as a migration aid from
|
||
SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
|
||
recognized any longer.
|
||
* The AVR port's libgcc has been improved and its multilib structure
|
||
has been enhanced. As a result, all objects contributing to an
|
||
application must either be compiled with GCC versions up to 4.6.x
|
||
or with GCC versions 4.7.1 or later. If the compiler is used with
|
||
AVR Libc, you need a version that supports the new layout, i.e.
|
||
implements [2]#35407.
|
||
* The AVR port's -mshort-calls command-line option has been
|
||
deprecated. It will be removed in the GCC 4.8 release. See -mrelax
|
||
for a replacement.
|
||
* The AVR port only references startup code that clears .bss and the
|
||
common section resp. initializes the .data and .rodata section
|
||
provided respective sections (or subsections thereof) are not
|
||
empty, see [3]PR18145. Applications that put all static storage
|
||
objects into non-standard sections and / or define all static
|
||
storage objects in assembler modules, must reference __do_clear_bss
|
||
resp. __do_copy_data by hand or undefine the symbol(s) by means of
|
||
-Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
|
||
* The ARM port's -mwords-little-endian option has been deprecated. It
|
||
will be removed in a future release.
|
||
* Support has been removed for the NetWare x86 configuration
|
||
obsoleted in GCC 4.6.
|
||
* It is no longer possible to use the "l" constraint in MIPS16 asm
|
||
statements.
|
||
* GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard
|
||
library which affected the ABI in C++11 mode: a data member was
|
||
added to std::list changing its size and altering the definitions
|
||
of some member functions, and std::pair's move constructor was
|
||
non-trivial which altered the calling convention for functions with
|
||
std::pair arguments or return types. The ABI incompatibilities have
|
||
been fixed for GCC version 4.7.2 but as a result C++11 code
|
||
compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11
|
||
code compiled with different GCC versions and with C++98/C++03 code
|
||
compiled with any version.
|
||
* On ARM, a bug has been fixed in GCC's implementation of the AAPCS
|
||
rules for the layout of vectors that could lead to wrong code being
|
||
generated. Vectors larger than 8 bytes in size are now by default
|
||
aligned to an 8-byte boundary. This is an ABI change: code that
|
||
makes explicit use of vector types may be incompatible with binary
|
||
objects built with older versions of GCC. Auto-vectorized code is
|
||
not affected by this change. (This change affects GCC versions
|
||
4.7.2 and later.)
|
||
* More information on porting to GCC 4.7 from previous versions of
|
||
GCC can be found in the [4]porting guide for this release.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* Support for a new parameter --param case-values-threshold=n was
|
||
added to allow users to control the cutoff between doing switch
|
||
statements as a series of if statements and using a jump table.
|
||
* Link-time optimization (LTO) improvements:
|
||
+ Improved scalability and reduced memory usage. Link time
|
||
optimization of Firefox now requires 3GB of RAM on a 64-bit
|
||
system, while over 8GB was needed previously. Linking time has
|
||
been improved, too. The serial stage of linking Firefox has
|
||
been sped up by about a factor of 10.
|
||
+ Reduced size of object files and temporary storage used during
|
||
linking.
|
||
+ Streaming performance (both outbound and inbound) has been
|
||
improved.
|
||
+ ld -r is now supported with LTO.
|
||
+ Several bug fixes, especially in symbol table handling and
|
||
merging.
|
||
* Interprocedural optimization improvements:
|
||
+ Heuristics now take into account that after inlining code will
|
||
be optimized out because of known values (or properties) of
|
||
function parameters. For example:
|
||
void foo(int a)
|
||
{
|
||
if (a > 10)
|
||
... huge code ...
|
||
}
|
||
void bar (void)
|
||
{
|
||
foo (0);
|
||
}
|
||
|
||
The call of foo will be inlined into bar even when optimizing
|
||
for code size. Constructs based on __builtin_constant_p are
|
||
now understood by the inliner and code size estimates are
|
||
evaluated a lot more realistically.
|
||
+ The representation of C++ virtual thunks and aliases (both
|
||
implicit and defined via the alias attribute) has been
|
||
re-engineered. Aliases no longer pose optimization barriers
|
||
and calls to an alias can be inlined and otherwise optimized.
|
||
+ The inter-procedural constant propagation pass has been
|
||
rewritten. It now performs generic function specialization.
|
||
For example when compiling the following:
|
||
void foo(bool flag)
|
||
{
|
||
if (flag)
|
||
... do something ...
|
||
else
|
||
... do something else ...
|
||
}
|
||
void bar (void)
|
||
{
|
||
foo (false);
|
||
foo (true);
|
||
foo (false);
|
||
foo (true);
|
||
foo (false);
|
||
foo (true);
|
||
}
|
||
|
||
GCC will now produce two copies of foo. One with flag being
|
||
true, while other with flag being false. This leads to
|
||
performance improvements previously possible only by inlining
|
||
all calls. Cloning causes a lot less code size growth.
|
||
* A string length optimization pass has been added. It attempts to
|
||
track string lengths and optimize various standard C string
|
||
functions like strlen, strchr, strcpy, strcat, stpcpy and their
|
||
_FORTIFY_SOURCE counterparts into faster alternatives. This pass is
|
||
enabled by default at -O2 or above, unless optimizing for size, and
|
||
can be disabled by the -fno-optimize-strlen option. The pass can
|
||
e.g. optimize
|
||
char *bar (const char *a)
|
||
{
|
||
size_t l = strlen (a) + 2;
|
||
char *p = malloc (l); if (p == NULL) return p;
|
||
strcpy (p, a); strcat (p, "/"); return p;
|
||
}
|
||
|
||
into:
|
||
char *bar (const char *a)
|
||
{
|
||
size_t tmp = strlen (a);
|
||
char *p = malloc (tmp + 2); if (p == NULL) return p;
|
||
memcpy (p, a, tmp); memcpy (p + tmp, "/", 2); return p;
|
||
}
|
||
|
||
or for hosted compilations where stpcpy is available in the runtime
|
||
and headers provide its prototype, e.g.
|
||
void foo (char *a, const char *b, const char *c, const char *d)
|
||
{
|
||
strcpy (a, b); strcat (a, c); strcat (a, d);
|
||
}
|
||
|
||
can be optimized into:
|
||
void foo (char *a, const char *b, const char *c, const char *d)
|
||
{
|
||
strcpy (stpcpy (stpcpy (a, b), c), d);
|
||
}
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* Version 3.1 of the OpenMP specification is now supported for the C,
|
||
C++, and Fortran compilers.
|
||
|
||
Ada
|
||
|
||
* The command-line option -feliminate-unused-debug-types has been
|
||
re-enabled by default, as it is for the other languages, leading to
|
||
a reduction in debug info size of 12.5% and more for relevant
|
||
cases, as well as to a small compilation speedup.
|
||
|
||
C family
|
||
|
||
* A new built-in, __builtin_assume_aligned, has been added, through
|
||
which the compiler can be hinted about pointer alignment and can
|
||
use it to improve generated code.
|
||
* A new warning option -Wunused-local-typedefs was added for C, C++,
|
||
Objective-C and Objective-C++. This warning diagnoses typedefs
|
||
locally defined in a function, and otherwise not used.
|
||
* A new experimental command-line option -ftrack-macro-expansion was
|
||
added for C, C++, Objective-C, Objective-C++ and Fortran. It allows
|
||
the compiler to emit diagnostic about the current macro expansion
|
||
stack when a compilation error occurs in a macro expansion.
|
||
* Experimental support for transactional memory has been added. It
|
||
includes support in the compiler, as well as a supporting runtime
|
||
library called libitm. To compile code with transactional memory
|
||
constructs, use the -fgnu-tm option.
|
||
Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
|
||
and 32-bit/64-bit x86 platforms.
|
||
For more details on transactional memory see [5]the GCC WiKi.
|
||
* Support for atomic operations specifying the C++11/C11 memory model
|
||
has been added. These new __atomic routines replace the existing
|
||
__sync built-in routines.
|
||
Atomic support is also available for memory blocks. Lock-free
|
||
instructions will be used if a memory block is the same size and
|
||
alignment as a supported integer type. Atomic operations which do
|
||
not have lock-free support are left as function calls. A set of
|
||
library functions is available on the GCC atomic wiki in the
|
||
"External Atomics Library" section.
|
||
For more details on the memory models and features, see the
|
||
[6]atomic wiki.
|
||
* When a binary operation is performed on vector types and one of the
|
||
operands is a uniform vector, it is possible to replace the vector
|
||
with the generating element. For example:
|
||
typedef int v4si __attribute__ ((vector_size (16)));
|
||
v4si res, a = {1,2,3,4};
|
||
int x;
|
||
|
||
res = 2 + a; /* means {2,2,2,2} + a */
|
||
res = a - x; /* means a - {x,x,x,x} */
|
||
|
||
C
|
||
|
||
* There is support for some more features from the C11 revision of
|
||
the ISO C standard. GCC now accepts the options -std=c11 and
|
||
-std=gnu11, in addition to the previous -std=c1x and -std=gnu1x.
|
||
+ Unicode strings (previously supported only with options such
|
||
as -std=gnu11, now supported with -std=c11), and the
|
||
predefined macros __STDC_UTF_16__ and __STDC_UTF_32__.
|
||
+ Nonreturning functions (_Noreturn and <stdnoreturn.h>).
|
||
+ Alignment support (_Alignas, _Alignof, max_align_t,
|
||
<stdalign.h>).
|
||
+ A built-in function __builtin_complex is provided to support C
|
||
library implementation of the CMPLX family of macros.
|
||
|
||
C++
|
||
|
||
* G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
|
||
options, which are equivalent to -std=c++0x, -std=gnu++0x, and
|
||
-Wc++0x-compat, respectively.
|
||
* G++ now implements [7]C++11 extended friend syntax:
|
||
|
||
template<class W>
|
||
class Q
|
||
{
|
||
static const int I = 2;
|
||
public:
|
||
friend W;
|
||
};
|
||
|
||
struct B
|
||
{
|
||
int ar[Q<B>::I];
|
||
};
|
||
|
||
* Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
|
||
override control.
|
||
|
||
struct B {
|
||
virtual void f() const final;
|
||
virtual void f(int);
|
||
};
|
||
|
||
struct D : B {
|
||
void f() const; // error: D::f attempts to override final B::f
|
||
void f(long) override; // error: doesn't override anything
|
||
void f(int) override; // ok
|
||
};
|
||
|
||
struct E final { };
|
||
struct F: E { }; // error: deriving from final class
|
||
|
||
* G++ now implements [9]C++11 non-static data member initializers.
|
||
|
||
struct A {
|
||
int i = 42;
|
||
} a; // initializes a.i to 42
|
||
|
||
* Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
|
||
user-defined literals.
|
||
|
||
// Not actually a good approximation. :)
|
||
constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
|
||
long double pi = 180.0_degrees;
|
||
|
||
* G++ now implements [11]C++11 alias-declarations.
|
||
|
||
template <class T> using Ptr = T*;
|
||
Ptr<int> ip; // decltype(ip) is int*
|
||
|
||
* Thanks to Ville Voutilainen and Pedro Lamarão, G++ now implements
|
||
[12]C++11 delegating constructors.
|
||
|
||
struct A {
|
||
A(int);
|
||
A(): A(42) { } // delegate to the A(int) constructor
|
||
};
|
||
|
||
* G++ now fully implements C++11 atomic classes rather than just
|
||
integer derived classes.
|
||
|
||
class POD {
|
||
int a;
|
||
int b;
|
||
};
|
||
std::atomic<POD> my_atomic_POD;
|
||
|
||
* G++ now sets the predefined macro __cplusplus to the correct value,
|
||
199711L for C++98/03, and 201103L for C++11.
|
||
* G++ now correctly implements the two-phase lookup rules such that
|
||
an unqualified name used in a template must have an appropriate
|
||
declaration found either in scope at the point of definition of the
|
||
template or by argument-dependent lookup at the point of
|
||
instantiation. As a result, code that relies on a second
|
||
unqualified lookup at the point of instantiation to find functions
|
||
declared after the template or in dependent bases will be rejected.
|
||
The compiler will suggest ways to fix affected code, and using the
|
||
-fpermissive compiler flag will allow the code to compile with a
|
||
warning.
|
||
|
||
template <class T>
|
||
void f() { g(T()); } // error, g(int) not found by argument-dependent lookup
|
||
void g(int) { } // fix by moving this declaration before the declaration of f
|
||
|
||
template <class T>
|
||
struct A: T {
|
||
// error, B::g(B) not found by argument-dependent lookup
|
||
void f() { g(T()); } // fix by using this->g or A::g
|
||
};
|
||
|
||
struct B { void g(B); };
|
||
|
||
int main()
|
||
{
|
||
f<int>();
|
||
A<B>().f();
|
||
}
|
||
|
||
* G++ now properly re-uses stack space allocated for temporary
|
||
objects when their lifetime ends, which can significantly lower
|
||
stack consumption for some C++ functions. As a result of this, some
|
||
code with undefined behavior will now break:
|
||
|
||
const int &f(const int &i) { return i; }
|
||
....
|
||
const int &x = f(1);
|
||
const int &y = f(2);
|
||
|
||
Here, x refers to the temporary allocated to hold the 1 argument,
|
||
which only lives until the end of the initialization; it
|
||
immediately becomes a dangling reference. So the next statement
|
||
re-uses the stack slot to hold the 2 argument, and users of x get
|
||
that value instead.
|
||
Note that this should not cause any change of behavior for
|
||
temporaries of types with non-trivial destructors, as they are
|
||
already destroyed at end of full-expression; the change is that now
|
||
the storage is released as well.
|
||
* A new command-line option -Wdelete-non-virtual-dtor has been added
|
||
to warn when delete is used to destroy an instance of a class which
|
||
has virtual functions and non-virtual destructor. It is unsafe to
|
||
delete an instance of a derived class through a pointer to a base
|
||
class if the base class does not have a virtual destructor. This
|
||
warning is enabled by -Wall.
|
||
* A new command-line option -Wzero-as-null-pointer-constant has been
|
||
added to warn when a literal '0' is used as null pointer constant.
|
||
It can be useful to facilitate the conversion to nullptr in C++11.
|
||
* As per C++98, access-declarations are now deprecated by G++.
|
||
Using-declarations are to be used instead. Furthermore, some
|
||
efforts have been made to improve the support of class scope
|
||
using-declarations. In particular, using-declarations referring to
|
||
a dependent type now work as expected ([13]bug c++/14258).
|
||
* The ELF symbol visibility of a template instantiation is now
|
||
properly constrained by the visibility of its template arguments
|
||
([14]bug c++/35688).
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* [15]Improved experimental support for the new ISO C++ standard,
|
||
C++11, including:
|
||
+ using noexcept in most of the library;
|
||
+ implementations of pointer_traits, allocator_traits and
|
||
scoped_allocator_adaptor;
|
||
+ uses-allocator construction for tuple;
|
||
+ vector meets the allocator-aware container requirements;
|
||
+ replacing monotonic_clock with steady_clock;
|
||
+ enabling the thread support library on most POSIX targets;
|
||
+ many small improvements to conform to the FDIS.
|
||
* Added --enable-clocale=newlib configure option.
|
||
* Debug Mode iterators for unordered associative containers.
|
||
* Avoid polluting the global namespace and do not include <unistd.h>.
|
||
|
||
Fortran
|
||
|
||
* The compile flag [16]-fstack-arrays has been added, which causes
|
||
all local arrays to be put on stack memory. For some programs this
|
||
will improve the performance significantly. If your program uses
|
||
very large local arrays, it is possible that you will have to
|
||
extend your runtime limits for stack memory.
|
||
* The [17]-Ofast flag now also implies [18]-fno-protect-parens and
|
||
[19]-fstack-arrays.
|
||
* Front-end optimizations can now be selected by the
|
||
[20]-ffrontend-optimize option and deselected by the
|
||
-fno-frontend-optimize option.
|
||
* When front-end optimization removes a function call,
|
||
[21]-Wfunction-elimination warns about that.
|
||
* When performing front-end-optimization, the
|
||
[22]-faggressive-function-elimination option allows the removal of
|
||
duplicate function calls even for impure functions.
|
||
* The flag [23]-Wreal-q-constant has been added, which warns if
|
||
floating-point literals have been specified using q (such as
|
||
1.0q0); the q marker is now supported as a vendor extension to
|
||
denote quad precision (REAL(16) or, if not available, REAL(10)).
|
||
Consider using a kind parameter (such as in 1.0_qp) instead, which
|
||
can be obtained via [24]SELECTED_REAL_KIND.
|
||
* The GFORTRAN_USE_STDERR environment variable has been removed. GNU
|
||
Fortran now always prints error messages to standard error. If you
|
||
wish to redirect standard error, please consult the manual for your
|
||
OS, shell, batch environment etc. as appropriate.
|
||
* The -fdump-core option and GFORTRAN_ERROR_DUMPCORE environment
|
||
variable have been removed. When encountering a serious error,
|
||
gfortran will now always abort the program. Whether a core dump is
|
||
generated depends on the user environment settings; see the ulimit
|
||
-c setting for POSIX shells, limit coredumpsize for C shells, and
|
||
the [25]WER user-mode dumps settings on Windows.
|
||
* The [26]-fbacktrace option is now enabled by default. When
|
||
encountering a fatal error, gfortran will attempt to print a
|
||
backtrace to standard error before aborting. It can be disabled
|
||
with -fno-backtrace. Note: On POSIX targets with the addr2line
|
||
utility from GNU binutils, GNU Fortran can print a backtrace with
|
||
function name, file name, line number information in addition to
|
||
the addresses; otherwise only the addresses are printed.
|
||
* [27]Fortran 2003:
|
||
+ Generic interface names which have the same name as derived
|
||
types are now supported, which allows to write constructor
|
||
functions. Note that Fortran does not support static
|
||
constructor functions; only default initialization or an
|
||
explicit structure-constructor initialization are available.
|
||
+ [28]Polymorphic (class) arrays are now supported.
|
||
* [29]Fortran 2008:
|
||
+ Support for the DO CONCURRENT construct has been added, which
|
||
allows the user to specify that individual loop iterations
|
||
have no interdependencies.
|
||
+ [30]Coarrays: Full single-image support except for polymorphic
|
||
coarrays. Additionally, preliminary support for multiple
|
||
images via an MPI-based [31]coarray communication library has
|
||
been added. Note: The library version is not yet usable as
|
||
remote coarray access is not yet possible.
|
||
* [32]TS 29113:
|
||
+ New flag [33]-std=f2008ts permits programs that are expected
|
||
to conform to the Fortran 2008 standard and the draft
|
||
Technical Specification (TS) 29113 on Further Interoperability
|
||
of Fortran with C.
|
||
+ The OPTIONAL attribute is now allowed for dummy arguments of
|
||
BIND(C) procedures.
|
||
+ The RANK intrinsic has been added.
|
||
+ The implementation of the ASYNCHRONOUS attribute in GCC is
|
||
compatible with the candidate draft of TS 29113 (since GCC
|
||
4.6).
|
||
|
||
Go
|
||
|
||
* GCC 4.7 implements the [34]Go 1 language standard. The library
|
||
support in 4.7.0 is not quite complete, due to release timing.
|
||
Release 4.7.1 includes complete support for Go 1. The Go library is
|
||
from the Go 1.0.1 release.
|
||
* Go has been tested on GNU/Linux and Solaris platforms. It may work
|
||
on other platforms as well.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
ARM
|
||
|
||
* GCC now supports the Cortex-A7 processor implementing the v7-a
|
||
version of the architecture using the option -mcpu=cortex-a7.
|
||
* The default vector size in auto-vectorization for NEON is now 128
|
||
bits. If vectorization fails thusly, the vectorizer tries again
|
||
with 64-bit vectors.
|
||
* A new option -mvectorize-with-neon-double was added to allow users
|
||
to change the vector size to 64 bits.
|
||
|
||
AVR
|
||
|
||
* GCC now supports the XMEGA architecture. This requires GNU binutils
|
||
2.22 or later.
|
||
* Support for the [35]named address spaces __flash, __flash1, …,
|
||
__flash5 and __memx has been added. These address spaces locate
|
||
read-only data in flash memory and allow reading from flash memory
|
||
by means of ordinary C code, i.e. without the need of (inline)
|
||
assembler code:
|
||
|
||
const __flash int values[] = { 42, 31 };
|
||
|
||
int add_values (const __flash int *p, int i)
|
||
{
|
||
return values[i] + *p;
|
||
}
|
||
|
||
* Support has been added for the AVR-specific configure option
|
||
--with-avrlibc=yes in order to arrange for better integration of
|
||
[36]AVR-Libc. This configure option is supported in avr-gcc 4.7.2
|
||
and newer and will only take effect in non-RTEMS configurations. If
|
||
avr-gcc is configured for RTEMS, the option will be ignored which
|
||
is the same as specifying --with-avrlibc=no. See [37]PR54461 for
|
||
more technical details.
|
||
* Support for AVR-specific [38]built-in functions has been added.
|
||
* Support has been added for the signed and unsigned 24-bit scalar
|
||
integer types __int24 and __uint24.
|
||
* New command-line options -maccumulate-args, -mbranch-cost=cost and
|
||
-mstrict-X were added to allow better fine-tuning of code
|
||
optimization.
|
||
* The command-line option -fdata-sections now also takes affect on
|
||
the section names of variables with the progmem attribute.
|
||
* A new inline assembler print modifier %i to print a RAM address as
|
||
I/O address has been added:
|
||
|
||
#include <avr/io.h> /* Port Definitions from AVR-LibC */
|
||
|
||
void set_portb (uint8_t value)
|
||
{
|
||
asm volatile ("out %i0, %1" :: "n" (&PORTB), "r" (value) : "memory");
|
||
}
|
||
|
||
The offset between an I/O address and the RAM address for that I/O
|
||
location is device-specific. This offset is taken into account when
|
||
printing a RAM address with the %i modifier so that the address is
|
||
suitable to be used as operand in an I/O command. The address must
|
||
be a constant integer known at compile time.
|
||
* The inline assembler constraint "R" to represent integers in the
|
||
range −6 … 5 has been removed without replacement.
|
||
* Many optimizations to:
|
||
+ 64-bit integer arithmetic
|
||
+ Widening multiplication
|
||
+ Integer division by a constant
|
||
+ Avoid constant reloading in multi-byte instructions.
|
||
+ Micro-optimizations for special instruction sequences.
|
||
+ Generic built-in functions like __builtin_ffs*,
|
||
__builtin_clz*, etc.
|
||
+ If-else decision trees generated by switch instructions
|
||
+ Merging of data located in flash memory
|
||
+ New libgcc variants for devices with 8-bit wide stack pointer
|
||
+ …
|
||
* Better documentation:
|
||
+ Handling of EIND and indirect jumps on devices with more than
|
||
128 KiB of program memory.
|
||
+ Handling of the RAMPD, RAMPX, RAMPY and RAMPZ special function
|
||
registers.
|
||
+ Function attributes OS_main and OS_task.
|
||
+ AVR-specific built-in macros.
|
||
|
||
C6X
|
||
|
||
* Support has been added for the Texas Instruments C6X family of
|
||
processors.
|
||
|
||
CR16
|
||
|
||
* Support has been added for National Semiconductor's CR16
|
||
architecture.
|
||
|
||
Epiphany
|
||
|
||
* Support has been added for Adapteva's Epiphany architecture.
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for Intel AVX2 intrinsics, built-in functions and code
|
||
generation is available via -mavx2.
|
||
* Support for Intel BMI2 intrinsics, built-in functions and code
|
||
generation is available via -mbmi2.
|
||
* Implementation and automatic generation of __builtin_clz* using the
|
||
lzcnt instruction is available via -mlzcnt.
|
||
* Support for Intel FMA3 intrinsics and code generation is available
|
||
via -mfma.
|
||
* A new -mfsgsbase command-line option is available that makes GCC
|
||
generate new segment register read/write instructions through
|
||
dedicated built-ins.
|
||
* Support for the new Intel rdrnd instruction is available via
|
||
-mrdrnd.
|
||
* Two additional AVX vector conversion instructions are available via
|
||
-mf16c.
|
||
* Support for new Intel processor codename IvyBridge with RDRND,
|
||
FSGSBASE and F16C is available through -march=core-avx-i.
|
||
* Support for the new Intel processor codename Haswell with AVX2,
|
||
FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
|
||
* Support for new AMD family 15h processors (Piledriver core) is now
|
||
available through -march=bdver2 and -mtune=bdver2 options.
|
||
* Support for [39]the x32 psABI is now available through the -mx32
|
||
option.
|
||
* Windows mingw targets are using the -mms-bitfields option by
|
||
default.
|
||
* Windows x86 targets are using the __thiscall calling convention for
|
||
C++ class-member functions.
|
||
* Support for the configure option --with-threads=posix for Windows
|
||
mingw targets.
|
||
|
||
MIPS
|
||
|
||
* GCC now supports thread-local storage (TLS) for MIPS16. This
|
||
requires GNU binutils 2.22 or later.
|
||
* GCC can now generate code specifically for the Cavium Octeon+ and
|
||
Octeon2 processors. The associated command-line options are
|
||
-march=octeon+ and -march=octeon2 respectively. Both options
|
||
require GNU binutils 2.22 or later.
|
||
* GCC can now work around certain 24k errata, under the control of
|
||
the command-line option -mfix-24k. These workarounds require GNU
|
||
binutils 2.20 or later.
|
||
* 32-bit MIPS GNU/Linux targets such as mips-linux-gnu can now build
|
||
n32 and n64 multilibs. The result is effectively a 64-bit GNU/Linux
|
||
toolchain that generates 32-bit code by default. Use the
|
||
configure-time option --enable-targets=all to select these extra
|
||
multilibs.
|
||
* Passing -fno-delayed-branch now also stops the assembler from
|
||
automatically filling delay slots.
|
||
|
||
PowerPC/PowerPC64
|
||
|
||
* Vectors of type vector long long or vector long are passed and
|
||
returned using the same method as other vectors with the VSX
|
||
instruction set. Previously GCC did not adhere to the ABI for
|
||
128-bit vectors with 64-bit integer base types (PR 48857). This
|
||
will also be fixed in the GCC 4.6.1 and 4.5.4 releases.
|
||
* A new option -mno-pointers-to-nested-functions was added to allow
|
||
AIX 32-bit/64-bit and GNU/Linux 64-bit PowerPC users to specify
|
||
that the compiler should not load up the chain register (r11)
|
||
before calling a function through a pointer. If you use this
|
||
option, you cannot call nested functions through a pointer, or call
|
||
other languages that might use the static chain.
|
||
* A new option msave-toc-indirect was added to allow AIX
|
||
32-bit/64-bit and GNU/Linux 64-bit PowerPC users control whether we
|
||
save the TOC in the prologue for indirect calls or generate the
|
||
save inline. This can speed up some programs that call through a
|
||
function pointer a lot, but it can slow down other functions that
|
||
only call through a function pointer in exceptional cases.
|
||
* The PowerPC port will now enable machine-specific built-in
|
||
functions when the user switches the target machine using the
|
||
#pragma GCC target or __attribute__ ((__target__ ("target"))) code
|
||
sequences. In addition, the target macros are updated. However, due
|
||
to the way the -save-temps switch is implemented, you won't see the
|
||
effect of these additional macros being defined in preprocessor
|
||
output.
|
||
|
||
SH
|
||
|
||
* A new option -msoft-atomic has been added. When it is specified,
|
||
GCC will generate GNU/Linux-compatible gUSA atomic sequences for
|
||
the new __atomic routines.
|
||
* Since it is neither supported by GAS nor officially documented,
|
||
code generation for little endian SH2A has been disabled.
|
||
Specifying -ml with -m2a* will now result in a compiler error.
|
||
* The defunct -mbranch-cost option has been fixed.
|
||
* Some improvements to the generated code of:
|
||
+ Utilization of the tst #imm,R0 instruction.
|
||
+ Dynamic shift instructions on SH2A.
|
||
+ Integer absolute value calculations.
|
||
* The -mdiv= option for targets other than SHmedia has been fixed and
|
||
documented.
|
||
|
||
SPARC
|
||
|
||
* The option -mflat has been reinstated. When it is specified, the
|
||
compiler will generate code for a single register window model.
|
||
This is essentially a new implementation and the corresponding
|
||
debugger support has been added to GDB 7.4.
|
||
* Support for the options -mtune=native and -mcpu=native has been
|
||
added on selected native platforms (GNU/Linux and Solaris).
|
||
* Support for the SPARC T3 (Niagara 3) processor has been added.
|
||
* VIS:
|
||
+ An intrinsics header visintrin.h has been added.
|
||
+ Builtin intrinsics for the VIS 1.0 edge handling and pixel
|
||
compare instructions have been added.
|
||
+ The little-endian version of alignaddr is now supported.
|
||
+ When possible, VIS builtins are marked const, which should
|
||
increase the compiler's ability to optimize VIS operations.
|
||
+ The compiler now properly tracks the %gsr register and how it
|
||
behaves as an input for various VIS instructions.
|
||
+ Akin to fzero, the compiler can now generate fone instructions
|
||
in order to set all of the bits of a floating-point register
|
||
to 1.
|
||
+ The documentation for the VIS intrinsics in the GCC manual has
|
||
been brought up to date and many inaccuracies were fixed.
|
||
+ Intrinsics for the VIS 2.0 bmask, bshuffle, and
|
||
non-condition-code setting edge instructions have been added.
|
||
Their availability is controlled by the new -mvis2 and
|
||
-mno-vis2 options. They are enabled by default on
|
||
UltraSPARC-III and later CPUs.
|
||
* Support for UltraSPARC Fused Multiply-Add floating-point extensions
|
||
has been added. These instructions are enabled by default on SPARC
|
||
T3 (Niagara 3) and later CPUs.
|
||
|
||
TILE-Gx/TILEPro
|
||
|
||
* Support has been added for the Tilera TILE-Gx and TILEPro families
|
||
of processors.
|
||
|
||
Other significant improvements
|
||
|
||
* A new option (-grecord-gcc-switches) was added that appends
|
||
compiler command-line options that might affect code generation to
|
||
the DW_AT_producer attribute string in the DWARF debugging
|
||
information.
|
||
* GCC now supports various new GNU extensions to the DWARF debugging
|
||
information format, like [40]entry value and [41]call site
|
||
information, [42]typed DWARF stack or [43]a more compact macro
|
||
representation. Support for these extensions has been added to GDB
|
||
7.4. They can be disabled through the -gstrict-dwarf command-line
|
||
option.
|
||
|
||
GCC 4.7.1
|
||
|
||
This is the [44]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.7.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
The Go front end in the 4.7.1 release fully supports the [45]Go 1
|
||
language standard.
|
||
|
||
GCC 4.7.2
|
||
|
||
This is the [46]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.7.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.7.3
|
||
|
||
This is the [47]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.7.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.7.4
|
||
|
||
This is the [48]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.7.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [49]GCC manuals. If that fails, the
|
||
[50]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [51]gcc@gcc.gnu.org. All of [52]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [53]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [54]maintained by the GCC team. Last modified
|
||
2018-12-11[55].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
|
||
2. http://savannah.nongnu.org/bugs/?35407
|
||
3. https://gcc.gnu.org/PR18145
|
||
4. https://gcc.gnu.org/gcc-4.7/porting_to.html
|
||
5. https://gcc.gnu.org/wiki/TransactionalMemory
|
||
6. https://gcc.gnu.org/wiki/Atomic/GCCMM
|
||
7. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
8. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
9. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
10. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
11. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
12. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
|
||
13. https://gcc.gnu.org/PR14258
|
||
14. https://gcc.gnu.org/PR35688
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
|
||
16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
|
||
17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
|
||
21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
|
||
23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
|
||
24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
|
||
25. https://docs.microsoft.com/en-us/windows/desktop/wer/collecting-user-mode-dumps
|
||
26. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
|
||
27. https://gcc.gnu.org/wiki/Fortran2003Status
|
||
28. https://gcc.gnu.org/wiki/OOP
|
||
29. https://gcc.gnu.org/wiki/Fortran2008Status
|
||
30. https://gcc.gnu.org/wiki/Coarray
|
||
31. https://gcc.gnu.org/wiki/CoarrayLib
|
||
32. https://gcc.gnu.org/wiki/TS29113Status
|
||
33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
|
||
34. https://golang.org/doc/go1
|
||
35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
|
||
36. http://nongnu.org/avr-libc/
|
||
37. https://gcc.gnu.org/PR54461
|
||
38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
|
||
39. https://sites.google.com/site/x32abi/
|
||
40. http://www.dwarfstd.org/ShowIssue.php?issue=100909.1
|
||
41. http://www.dwarfstd.org/ShowIssue.php?issue=100909.2
|
||
42. http://www.dwarfstd.org/ShowIssue.php?issue=140425.1
|
||
43. http://www.dwarfstd.org/ShowIssue.php?issue=110722.1
|
||
44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
|
||
45. https://golang.org/doc/go1
|
||
46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
|
||
47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
|
||
48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
|
||
49. https://gcc.gnu.org/onlinedocs/
|
||
50. mailto:gcc-help@gcc.gnu.org
|
||
51. mailto:gcc@gcc.gnu.org
|
||
52. https://gcc.gnu.org/lists.html
|
||
53. https://www.fsf.org/
|
||
54. https://gcc.gnu.org/about.html
|
||
55. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.6/index.html
|
||
GCC 4.6 Release Series
|
||
|
||
April 12, 2013
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.6.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.6.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.6.4
|
||
April 12, 2013 ([2]changes, [3]documentation)
|
||
|
||
GCC 4.6.3
|
||
March 1, 2012 ([4]changes, [5]documentation)
|
||
|
||
GCC 4.6.2
|
||
October 26, 2011 ([6]changes, [7]documentation)
|
||
|
||
GCC 4.6.1
|
||
June 27, 2011 ([8]changes, [9]documentation)
|
||
|
||
GCC 4.6.0
|
||
March 25, 2011 ([10]changes, [11]documentation)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [12]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [13]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [14]GCC
|
||
project web site or contact the [15]GCC development mailing list.
|
||
|
||
To obtain GCC please use [16]our mirror sites or [17]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-09-30[24].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.6/changes.html
|
||
3. https://gcc.gnu.org/onlinedocs/4.6.4/
|
||
4. http://gcc.gnu.org/gcc-4.6/changes.html
|
||
5. https://gcc.gnu.org/onlinedocs/4.6.3/
|
||
6. http://gcc.gnu.org/gcc-4.6/changes.html
|
||
7. https://gcc.gnu.org/onlinedocs/4.6.2/
|
||
8. http://gcc.gnu.org/gcc-4.6/changes.html
|
||
9. https://gcc.gnu.org/onlinedocs/4.6.1/
|
||
10. http://gcc.gnu.org/gcc-4.6/changes.html
|
||
11. https://gcc.gnu.org/onlinedocs/4.6.0/
|
||
12. http://gcc.gnu.org/gcc-4.6/buildstat.html
|
||
13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
14. http://gcc.gnu.org/index.html
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. http://gcc.gnu.org/mirrors.html
|
||
17. http://gcc.gnu.org/svn.html
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.6/changes.html
|
||
GCC 4.6 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* The options -b <machine> and -V <version> have been removed because
|
||
they were unreliable. Instead, users should directly run
|
||
<machine>-gcc when cross-compiling, or <machine>-gcc-<version> to
|
||
run a different version of gcc.
|
||
* GCC now has stricter checks for invalid command-line options. In
|
||
particular, when gcc was called to link object files rather than
|
||
compile source code, it would previously accept and ignore all
|
||
options starting with --, including linker options such as
|
||
--as-needed and --export-dynamic, although such options would
|
||
result in errors if any source code was compiled. Such options, if
|
||
unknown to the compiler, are now rejected in all cases; if the
|
||
intent was to pass them to the linker, options such as
|
||
-Wl,--as-needed should be used.
|
||
* Versions of the GNU C library up to and including 2.11.1 included
|
||
an [1]incorrect implementation of the cproj function. GCC optimizes
|
||
its builtin cproj according to the behavior specified and allowed
|
||
by the ISO C99 standard. If you want to avoid discrepancies between
|
||
the C library and GCC's builtin transformations when using cproj in
|
||
your code, use GLIBC 2.12 or later. If you are using an older GLIBC
|
||
and actually rely on the incorrect behavior of cproj, then you can
|
||
disable GCC's transformations using -fno-builtin-cproj.
|
||
* The C-only intermodule optimization framework (IMA, enabled by
|
||
-combine) has been removed in favor of the new generic link-time
|
||
optimization framework (LTO) introduced in [2]GCC 4.5.0.
|
||
* GCC now ships with the LGPL-licensed libquadmath library, which
|
||
provides quad-precision mathematical functions for targets with a
|
||
__float128 datatype. __float128 is available for targets on 32-bit
|
||
x86, x86-64 and Itanium architectures. The libquadmath library is
|
||
automatically built on such targets when building the Fortran
|
||
compiler.
|
||
* New -Wunused-but-set-variable and -Wunused-but-set-parameter
|
||
warnings were added for C, C++, Objective-C and Objective-C++.
|
||
These warnings diagnose variables respective parameters which are
|
||
only set in the code and never otherwise used. Usually such
|
||
variables are useless and often even the value assigned to them is
|
||
computed needlessly, sometimes expensively. The
|
||
-Wunused-but-set-variable warning is enabled by default by -Wall
|
||
flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
|
||
* On ARM, a bug has been fixed in GCC's implementation of the AAPCS
|
||
rules for the layout of vectors that could lead to wrong code being
|
||
generated. Vectors larger than 8 bytes in size are now by default
|
||
aligned to an 8-byte boundary. This is an ABI change: code that
|
||
makes explicit use of vector types may be incompatible with binary
|
||
objects built with older versions of GCC. Auto-vectorized code is
|
||
not affected by this change. (This change affects GCC versions
|
||
4.6.4 and later, with the exception of versions 4.7.0 and 4.7.1.)
|
||
* On AVR, variables with the progmem attribute to locate data in
|
||
flash memory must be qualified as const.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.6.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
All GCC ports for the following processor architectures have been
|
||
declared obsolete:
|
||
+ Argonaut ARC (arc-*)
|
||
+ National Semiconductor CRX (crx-*)
|
||
+ Motorola 68HC11 and 68HC12 (m68hc11-*-*, m6811-*-*,
|
||
m68hc12-*-*, m6812-*-*)
|
||
+ Sunplus S+core (score-*)
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ Interix (i[34567]86-*-interix3*)
|
||
+ NetWare x86 (i[3456x]86-*-netware*)
|
||
+ Generic ARM PE (arm-*-pe* other than arm*-wince-pe*)
|
||
+ MCore PE (mcore-*-pe*)
|
||
+ SH SymbianOS (sh*-*-symbianelf*)
|
||
+ GNU Hurd on Alpha and PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
|
||
+ M68K uClinux old ABI (m68k-*-uclinuxoldabi*)
|
||
+ a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*,
|
||
vax-*-netbsd*, but not *-*-netbsdelf*)
|
||
The i[34567]86-*-pe alias for Cygwin targets has also been
|
||
obsoleted; users should configure for i[34567]86-*-cygwin* instead.
|
||
Certain configure options to control the set of libraries built
|
||
with GCC on some targets have been obsoleted. On ARM targets, the
|
||
options --disable-fpu, --disable-26bit, --disable-underscore,
|
||
--disable-interwork, --disable-biendian and --disable-nofmult have
|
||
been obsoleted. On MIPS targets, the options
|
||
--disable-single-float, --disable-biendian and --disable-softfloat
|
||
have been obsoleted.
|
||
* Support has been removed for all the [3]configurations obsoleted in
|
||
GCC 4.5.
|
||
* More information on porting to GCC 4.6 from previous versions of
|
||
GCC can be found in the [4]porting guide for this release.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* A new general optimization level, -Ofast, has been introduced. It
|
||
combines the existing optimization level -O3 with options that can
|
||
affect standards compliance but result in better optimized code.
|
||
For example, -Ofast enables -ffast-math.
|
||
* Link-time optimization improvements:
|
||
+ The [5]Scalable Whole Program Optimizer (WHOPR) project has
|
||
stabilized to the point of being usable. It has become the
|
||
default mode when using the LTO optimization model. Link time
|
||
optimization can now split itself into multiple parallel
|
||
compilations. Parallelism is controlled with -flto=n (where n
|
||
specifies the number of compilations to execute in parallel).
|
||
GCC can also cooperate with a GNU make job server by
|
||
specifying the -flto=jobserver option and adding + to the
|
||
beginning of the Makefile rule executing the linker.
|
||
Classical LTO mode can be enforced by -flto-partition=none.
|
||
This may result in small code quality improvements.
|
||
+ A large number of bugs were fixed. GCC itself, Mozilla Firefox
|
||
and other large applications can be built with LTO enabled.
|
||
+ The linker plugin support improvements
|
||
o Linker plugin is now enabled by default when the linker
|
||
is detected to have plugin support. This is the case for
|
||
GNU ld 2.21.51 or newer (on ELF and Cygwin targets) and
|
||
the Gold linker on ELF targets. Plugin support of the
|
||
Apple linker on Darwin is not compatible with GCC. The
|
||
linker plugin can also be controlled by the
|
||
-fuse-linker-plugin command-line option.
|
||
o Resolution information from the linker plugin is used to
|
||
drive whole program assumptions. Use of the linker plugin
|
||
results in more aggressive optimization on binaries and
|
||
on shared libraries that use the hidden visibility
|
||
attribute. Consequently the use of -fwhole-program is not
|
||
necessary in addition to LTO.
|
||
+ Hidden symbols used from non-LTO objects now have to be
|
||
explicitly annotated with externally_visible when the linker
|
||
plugin is not used.
|
||
+ C++ inline functions and virtual tables are now privatized
|
||
more aggressively, leading to better inter-procedural
|
||
optimization and faster dynamic linking.
|
||
+ Memory usage and intermediate language streaming performance
|
||
have been improved.
|
||
+ Static constructors and destructors from individual units are
|
||
inlined into a single function. This can significantly improve
|
||
startup times of large C++ applications where static
|
||
constructors are very common. For example, static constructors
|
||
are used when including the iostream header.
|
||
+ Support for the Ada language has been added.
|
||
* Interprocedural optimization improvements
|
||
+ The interprocedural framework was re-tuned for link time
|
||
optimization. Several scalability issues were resolved.
|
||
+ Improved auto-detection of const and pure functions. Newly,
|
||
noreturn functions are auto-detected.
|
||
The [6]-Wsuggest-attribute=[const|pure|noreturn] flag is
|
||
available that informs users when adding attributes to headers
|
||
might improve code generation.
|
||
+ A number of inlining heuristic improvements. In particular:
|
||
o Partial inlining is now supported and enabled by default
|
||
at -O2 and greater. The feature can be controlled via
|
||
-fpartial-inlining.
|
||
Partial inlining splits functions with short hot path to
|
||
return. This allows more aggressive inlining of the hot
|
||
path leading to better performance and often to code size
|
||
reductions (because cold parts of functions are not
|
||
duplicated).
|
||
o Scalability for large compilation units was improved
|
||
significantly.
|
||
o Inlining of callbacks is now more aggressive.
|
||
o Virtual methods are considered for inlining when the
|
||
caller is inlined and devirtualization is then possible.
|
||
o Inlining when optimizing for size (either in cold regions
|
||
of a program or when compiling with -Os) was improved to
|
||
better handle C++ programs with larger abstraction
|
||
penalty, leading to smaller and faster code.
|
||
+ The IPA reference optimization pass detecting global variables
|
||
used or modified by functions was strengthened and sped up.
|
||
+ Functions whose address was taken are now optimized out when
|
||
all references to them are dead.
|
||
+ A new inter-procedural static profile estimation pass detects
|
||
functions that are executed once or unlikely to be executed.
|
||
Unlikely executed functions are optimized for size. Functions
|
||
executed once are optimized for size except for the inner
|
||
loops.
|
||
+ On most targets with named section support, functions used
|
||
only at startup (static constructors and main), functions used
|
||
only at exit and functions detected to be cold are placed into
|
||
separate text segment subsections. This extends the
|
||
-freorder-functions feature and is controlled by the same
|
||
switch. The goal is to improve the startup time of large C++
|
||
programs.
|
||
Proper function placement requires linker support. GNU ld
|
||
2.21.51 on ELF targets was updated to place those functions
|
||
together within the text section leading to better code
|
||
locality and faster startup times of large C++ programs. The
|
||
feature is also supported in the Apple linker. Support in the
|
||
gold linker is planned.
|
||
* A new switch -fstack-usage has been added. It makes the compiler
|
||
output stack usage information for the program, on a per-function
|
||
basis, in an auxiliary file.
|
||
* A new switch -fcombine-stack-adjustments has been added. It can be
|
||
used to enable or disable the compiler's stack-slot combining pass
|
||
which before was enabled automatically at -O1 and above, but could
|
||
not be controlled on its own.
|
||
* A new switch -fstrict-volatile-bitfields has been added. Using it
|
||
indicates that accesses to volatile bitfields should use a single
|
||
access of the width of the field's type. This option can be useful
|
||
for precisely defining and accessing memory-mapped peripheral
|
||
registers from C or C++.
|
||
|
||
Compile time and memory usage improvements
|
||
|
||
* Datastructures used by the dataflow framework in GCC were
|
||
reorganized for better memory usage and more cache locality.
|
||
Compile time is improved especially on units with large functions
|
||
(possibly resulting from a lot of inlining) not fitting into the
|
||
processor cache. The compile time of the GCC C compiler binary with
|
||
link-time optimization went down by over 10% (benchmarked on x86-64
|
||
target).
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
Ada
|
||
|
||
* Stack checking has been improved on selected architectures (Alpha,
|
||
IA-32/x86-64, RS/6000 and SPARC): it now will detect stack
|
||
overflows in all cases on these architectures.
|
||
* Initial support for Ada 2012 has been added.
|
||
|
||
C family
|
||
|
||
* A new warning, enabled by -Wdouble-promotion, has been added that
|
||
warns about cases where a value of type float is implicitly
|
||
promoted to double. This is especially helpful for CPUs that handle
|
||
the former in hardware, but emulate the latter in software.
|
||
* A new function attribute leaf was introduced. This attribute allows
|
||
better inter-procedural optimization across calls to functions that
|
||
return to the current unit only via returning or exception
|
||
handling. This is the case for most library functions that have no
|
||
callbacks.
|
||
* Support for a new data type __int128 for targets having wide enough
|
||
machine-mode support.
|
||
* The new function attribute callee_pop_aggregate allows to specify
|
||
if the caller or callee is responsible for popping the aggregate
|
||
return pointer value from the stack.
|
||
* Support for selectively enabling and disabling warnings via #pragma
|
||
GCC diagnostic has been added. For instance:
|
||
#pragma GCC diagnostic error "-Wuninitialized"
|
||
foo(a); /* error is given for this one */
|
||
#pragma GCC diagnostic push
|
||
#pragma GCC diagnostic ignored "-Wuninitialized"
|
||
foo(b); /* no diagnostic for this one */
|
||
#pragma GCC diagnostic pop
|
||
foo(c); /* error is given for this one */
|
||
#pragma GCC diagnostic pop
|
||
foo(d); /* depends on command-line options */
|
||
|
||
* The -fmax-errors=N option is now supported. Using this option
|
||
causes the compiler to exit after N errors have been issued.
|
||
|
||
C
|
||
|
||
* There is now experimental support for some features from the
|
||
upcoming C1X revision of the ISO C standard. This support may be
|
||
selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
|
||
Note that this support is experimental and may change incompatibly
|
||
in future releases for consistency with changes to the C1X standard
|
||
draft. The following features are newly supported as described in
|
||
the N1539 draft of C1X (with changes agreed at the March 2011 WG14
|
||
meeting); some other features were already supported with no
|
||
compiler changes being needed, or have some support but not in full
|
||
accord with N1539 (as amended).
|
||
+ Static assertions (_Static_assert keyword)
|
||
+ Typedef redefinition
|
||
+ New macros in <float.h>
|
||
+ Anonymous structures and unions
|
||
* The new -fplan9-extensions option directs the compiler to support
|
||
some extensions for anonymous struct fields which are implemented
|
||
by the Plan 9 compiler. A pointer to a struct may be automatically
|
||
converted to a pointer to an anonymous field when calling a
|
||
function, in order to make the types match. An anonymous struct
|
||
field whose type is a typedef name may be referred to using the
|
||
typedef name.
|
||
|
||
C++
|
||
|
||
* Improved [7]experimental support for the upcoming C++0x ISO C++
|
||
standard, including support for constexpr (thanks to Gabriel Dos
|
||
Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
|
||
noexcept, unrestricted unions, range-based for loops (thanks to
|
||
Rodrigo Rivas Costa), opaque enum declarations (thanks also to
|
||
Rodrigo), implicitly deleted functions and implicit move
|
||
constructors.
|
||
* When an extern declaration within a function does not match a
|
||
declaration in the enclosing context, G++ now properly declares the
|
||
name within the namespace of the function rather than the namespace
|
||
which was open just before the function definition ([8]c++/43145).
|
||
* GCC now warns by default when casting integers to larger pointer
|
||
types. These warnings can be disabled with the option
|
||
-Wno-int-to-pointer-cast, which is now also available in C++.
|
||
* G++ no longer optimizes using the assumption that a value of
|
||
enumeration type will fall within the range specified by the
|
||
standard, since that assumption is easily violated with a
|
||
conversion from integer type ([9]c++/43680). The old behavior can
|
||
be restored with -fstrict-enums.
|
||
* The new -fnothrow-opt flag changes the semantics of a throw()
|
||
exception specification to match the proposed semantics of the
|
||
noexcept specification: just call terminate if an exception tries
|
||
to propagate out of a function with such an exception
|
||
specification. This dramatically reduces or eliminates the code
|
||
size overhead from adding the exception specification.
|
||
* The new -Wnoexcept flag will suggest adding a noexcept qualifier to
|
||
a function that the compiler can tell doesn't throw if it would
|
||
change the value of a noexcept expression.
|
||
* The -Wshadow option now warns if a local variable or type
|
||
declaration shadows another type in C++. Note that the compiler
|
||
will not warn if a local variable shadows a struct/class/enum, but
|
||
will warn if it shadows an explicit typedef.
|
||
* When an identifier is not found in the current scope, G++ now
|
||
offers suggestions about which identifier might have been intended.
|
||
* G++ now issues clearer diagnostics for missing semicolons after
|
||
class, struct, and union definitions.
|
||
* G++ now issues clearer diagnostics for missing semicolons after
|
||
class member declarations.
|
||
* G++ now issues clearer diagnostics when a colon is used in a place
|
||
where a double-colon was intended.
|
||
* G++ no longer accepts mutable on reference members ([10]c++/33558).
|
||
Use -fpermissive to allow the old, non-conforming behaviour.
|
||
* A few mangling fixes have been made, to attribute const/volatile on
|
||
function pointer types, decltype of a plain decl, and use of a
|
||
function parameter in the declaration of another parameter. By
|
||
default the compiler still uses the old mangling, but emits aliases
|
||
with the new mangling on targets that support strong aliases. Users
|
||
can switch over entirely to the new mangling with -fabi-version=5
|
||
or -fabi-version=0. -Wabi will now warn about code that uses the
|
||
old mangling.
|
||
* In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
|
||
type to be default initialized unless the type has a user-declared
|
||
default constructor. In 4.6.2 G++ implements the proposed
|
||
resolution of [11]DR 253, so default initialization is allowed if
|
||
it initializes all subobjects. Code that fails to compile can be
|
||
fixed by providing an initializer e.g.
|
||
struct A { A(); };
|
||
struct B : A { int i; };
|
||
const B b = B();
|
||
Use -fpermissive to allow the old, non-conforming behaviour.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* [12]Improved experimental support for the upcoming ISO C++
|
||
standard, C++0x, including using constexpr and nullptr.
|
||
* Performance improvements to the [13]Debug Mode, thanks to François
|
||
Dumont.
|
||
* Atomic operations used for reference-counting are annotated so that
|
||
they can be understood by race detectors such as Helgrind, see
|
||
[14]Data Race Hunting.
|
||
* Most libstdc++ standard headers have been changed to no longer
|
||
include the cstddef header as an implementation detail. Code that
|
||
relied on that header being included as side-effect of including
|
||
other standard headers will need to include cstddef explicitly.
|
||
|
||
Fortran
|
||
|
||
* On systems supporting the libquadmath library, GNU Fortran now also
|
||
supports a quad-precision, kind=16 floating-point data type
|
||
(REAL(16), COMPLEX(16)). As the data type is not fully supported in
|
||
hardware, calculations might be one to two orders of magnitude
|
||
slower than with the 4, 8 or 10 bytes floating-point data types.
|
||
This change does not affect systems which support REAL(16) in
|
||
hardware nor those which do not support libquadmath.
|
||
* Much improved compile time for large array constructors.
|
||
* In order to reduce execution time and memory consumption, use of
|
||
temporary arrays in assignment expressions is avoided for many
|
||
cases. The compiler now reverses loops in order to avoid generating
|
||
a temporary array where possible.
|
||
* Improved diagnostics, especially with -fwhole-file.
|
||
* The -fwhole-file flag is now enabled by default. This improves code
|
||
generation and diagnostics. It can be disabled using the deprecated
|
||
-fno-whole-file flag.
|
||
* Support the generation of Makefile dependencies via the [15]-M...
|
||
flags of GCC; you may need to specify the -cpp option in addition.
|
||
The dependencies take modules, Fortran's include, and CPP's
|
||
#include into account. Note: Using -M for the module path is no
|
||
longer supported, use -J instead.
|
||
* The flag -Wconversion has been modified to only issue warnings
|
||
where a conversion leads to information loss. This drastically
|
||
reduces the number of warnings; -Wconversion is thus now enabled
|
||
with -Wall. The flag -Wconversion-extra has been added and also
|
||
warns about other conversions; -Wconversion-extra typically issues
|
||
a huge number of warnings, most of which can be ignored.
|
||
* A new command-line option -Wunused-dummy-argument warns about
|
||
unused dummy arguments and is included in -Wall. Before,
|
||
-Wunused-variable also warned about unused dummy arguments.
|
||
* Fortran 2003 support has been extended:
|
||
+ Improved support for polymorphism between libraries and
|
||
programs and for complicated inheritance patterns (cf.
|
||
[16]object-oriented programming).
|
||
+ Experimental support of the ASSOCIATE construct.
|
||
+ In pointer assignments it is now possible to specify the lower
|
||
bounds of the pointer and, for a rank-1 or a simply contiguous
|
||
data-target, to remap the bounds.
|
||
+ Automatic (re)allocation: In intrinsic assignments to
|
||
allocatable variables the left-hand side will be automatically
|
||
allocated (if unallocated) or reallocated (if the shape or
|
||
type parameter is different). To avoid the small performance
|
||
penalty, you can use a(:) = ... instead of a = ... for arrays
|
||
and character strings – or disable the feature using -std=f95
|
||
or -fno-realloc-lhs.
|
||
+ Deferred type parameter: For scalar allocatable and pointer
|
||
variables the character length can be deferred.
|
||
+ Namelist variables with allocatable and pointer attribute and
|
||
nonconstant length type parameter are supported.
|
||
* Fortran 2008 support has been extended:
|
||
+ Experimental [17]coarray support (for one image only, i.e.
|
||
num_images() == 1); use the [18]-fcoarray=single flag to
|
||
enable it.
|
||
+ The STOP and the new ERROR STOP statements now support all
|
||
constant expressions.
|
||
+ Support for the CONTIGUOUS attribute.
|
||
+ Support for ALLOCATE with MOLD.
|
||
+ Support for the STORAGE_SIZE intrinsic inquiry function.
|
||
+ Support of the NORM2 and PARITY intrinsic functions.
|
||
+ The following bit intrinsics were added: POPCNT and POPPAR for
|
||
counting the number of 1 bits and returning the parity; BGE,
|
||
BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR
|
||
for combined left and right shifts, MASKL and MASKR for simple
|
||
left and right justified masks, MERGE_BITS for a bitwise merge
|
||
using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations,
|
||
and the transformational bit intrinsics IALL, IANY and
|
||
IPARITY.
|
||
+ Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
|
||
+ Support for the IMPURE attribute for procedures, which allows
|
||
for ELEMENTAL procedures without the restrictions of PURE.
|
||
+ Null pointers (including NULL()) and not allocated variables
|
||
can be used as actual argument to optional non-pointer,
|
||
non-allocatable dummy arguments, denoting an absent argument.
|
||
+ Non-pointer variables with TARGET attribute can be used as
|
||
actual argument to POINTER dummies with INTENT(IN)
|
||
+ Pointers including procedure pointers and those in a derived
|
||
type (pointer components) can now be initialized by a target
|
||
instead of only by NULL.
|
||
+ The EXIT statement (with construct-name) can now be used to
|
||
leave not only the DO but also the ASSOCIATE, BLOCK, IF,
|
||
SELECT CASE and SELECT TYPE constructs.
|
||
+ Internal procedures can now be used as actual argument.
|
||
+ The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS
|
||
and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV
|
||
have been added; these arrays contain the supported kind
|
||
values for the respective types.
|
||
+ The module procedures C_SIZEOF of the intrinsic module
|
||
ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
|
||
ISO_FORTRAN_ENV have been implemented.
|
||
+ Minor changes: obsolescence diagnostics for ENTRY was added
|
||
for -std=f2008; a line may start with a semicolon; for
|
||
internal and module procedures END can be used instead of END
|
||
SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes
|
||
a RADIX argument; intrinsic types are supported for
|
||
TYPE(intrinsic-type-spec); multiple type-bound procedures can
|
||
be declared in a single PROCEDURE statement; implied-shape
|
||
arrays are supported for named constants (PARAMETER). The
|
||
transformational, three argument versions of BESSEL_JN and
|
||
BESSEL_YN were added – the elemental, two-argument version had
|
||
been added in GCC 4.4; note that the transformational
|
||
functions use a recurrence algorithm.
|
||
|
||
Go
|
||
|
||
Support for the [19]Go programming language has been added to GCC. It
|
||
is not enabled by default when you build GCC; use the
|
||
--enable-languages configure option to build it. The driver program for
|
||
compiling Go code is gccgo.
|
||
|
||
Go is currently known to work on GNU/Linux and RTEMS. Solaris support
|
||
is in progress. It may or may not work on other platforms.
|
||
|
||
Objective-C and Objective-C++
|
||
|
||
* The -fobjc-exceptions flag is now required to enable Objective-C
|
||
exception and synchronization syntax (introduced by the keywords
|
||
@try, @catch, @finally and @synchronized).
|
||
* A number of Objective-C 2.0 features and extensions are now
|
||
supported by GCC. These features are enabled by default; you can
|
||
disable them by using the new -fobjc-std=objc1 command-line option.
|
||
* The Objective-C 2.0 dot-syntax is now supported. It is an
|
||
alternative syntax for using getters and setters; object.count is
|
||
automatically converted into [object count] or [object setCount:
|
||
...] depending on context; for example if (object.count > 0) is
|
||
automatically compiled into the equivalent of if ([object count] >
|
||
0) while object.count = 0; is automatically compiled into the
|
||
equivalent ot [object setCount: 0];. The dot-syntax can be used
|
||
with instance and class objects and with any setters or getters, no
|
||
matter if they are part of a declared property or not.
|
||
* Objective-C 2.0 declared properties are now supported. They are
|
||
declared using the new @property keyword, and are most commonly
|
||
used in conjunction with the new Objective-C 2.0 dot-syntax. The
|
||
nonatomic, readonly, readwrite, assign, retain, copy, setter and
|
||
getter attributes are all supported. Marking declared properties
|
||
with __attribute__ ((deprecated)) is supported too.
|
||
* The Objective-C 2.0 @synthesize and @dynamic keywords are
|
||
supported. @synthesize causes the compiler to automatically
|
||
synthesize a declared property, while @dynamic is used to disable
|
||
all warnings for a declared property for which no implementation is
|
||
provided at compile time. Synthesizing declared properties requires
|
||
runtime support in most useful cases; to be able to use it with the
|
||
GNU runtime, appropriate helper functions have been added to the
|
||
GNU Objective-C runtime ABI, and are implemented by the GNU
|
||
Objective-C runtime library shipped with GCC.
|
||
* The Objective-C 2.0 fast enumeration syntax is supported in
|
||
Objective-C. This is currently not yet available in Objective-C++.
|
||
Fast enumeration requires support in the runtime, and such support
|
||
has been added to the GNU Objective-C runtime library (shipped with
|
||
GCC).
|
||
* The Objective-C 2.0 @optional keyword is supported. It allows you
|
||
to mark methods or properties in a protocol as optional as opposed
|
||
to required.
|
||
* The Objective-C 2.0 @package keyword is supported. It has currently
|
||
the same effect as the @public keyword.
|
||
* Objective-C 2.0 method attributes are supported. Currently the
|
||
supported attributes are deprecated, sentinel, noreturn and format.
|
||
* Objective-C 2.0 method argument attributes are supported. The most
|
||
widely used attribute is unused, to mark an argument as unused in
|
||
the implementation.
|
||
* Objective-C 2.0 class and protocol attributes are supported.
|
||
Currently the only supported attribute is deprecated.
|
||
* Objective-C 2.0 class extensions are supported. A class extension
|
||
has the same syntax as a category declaration with no category
|
||
name, and the methods and properties declared in it are added
|
||
directly to the main class. It is mostly used as an alternative to
|
||
a category to add methods to a class without advertising them in
|
||
the public headers, with the advantage that for class extensions
|
||
the compiler checks that all the privately declared methods are
|
||
actually implemented.
|
||
* As a result of these enhancements, GCC can now be used to build
|
||
Objective-C and Objective-C++ software that uses Foundation and
|
||
other important system frameworks with the NeXT runtime on Darwin 9
|
||
and Darwin 10 (OSX 10.5 and 10.6).
|
||
* Many bugs in the compiler have been fixed in this release; in
|
||
particular, LTO can now be used when compiling Objective-C and
|
||
Objective-C++ and the parser is much more robust in dealing with
|
||
invalid code.
|
||
|
||
Runtime Library (libobjc)
|
||
|
||
* The GNU Objective-C runtime library now defines the macro
|
||
__GNU_LIBOBJC__ (with a value that is increased at every release
|
||
where there is any change to the API) in objc/objc.h, making it
|
||
easy to determine if the GNU Objective-C runtime library is being
|
||
used, and if so, which version. Previous versions of the GNU
|
||
Objective-C runtime library (and other Objective-C runtime
|
||
libraries such as the Apple one) do not define this macro.
|
||
* A new Objective-C 2.0 API, almost identical to the one implemented
|
||
by the Apple Objective-C runtime, has been implemented in the GNU
|
||
Objective-C runtime library. The new API hides the internals of
|
||
most runtime structures but provides a more extensive set of
|
||
functions to operate on them. It is much easier, for example, to
|
||
create or modify classes at runtime. The new API also makes it
|
||
easier to port software from Apple to GNU as almost no changes
|
||
should be required. The old API is still supported for backwards
|
||
compatibility; including the old objc/objc-api.h header file
|
||
automatically selects the old API, while including the new
|
||
objc/runtime.h header file automatically selects the new API.
|
||
Support for the old API is being phased out and upgrading the
|
||
software to use the new API is strongly recommended. To check for
|
||
the availability of the new API, the __GNU_LIBOBJC__ macro can be
|
||
used as older versions of the GNU Objective-C runtime library,
|
||
which do not support the new API, do not define such a macro.
|
||
* Runtime support for @synchronized has been added.
|
||
* Runtime support for Objective-C 2.0 synthesized property accessors
|
||
has been added.
|
||
* Runtime support for Objective-C 2.0 fast enumeration has been
|
||
added.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
ARM
|
||
|
||
* GCC now supports the Cortex-M4 processor implementing the v7-em
|
||
version of the architecture using the option -mcpu=cortex-m4.
|
||
* Scheduling descriptions for the Cortex-M4, the Neon and the
|
||
floating point units of the Cortex-A9 and a pipeline description
|
||
for the Cortex-A5 have been added.
|
||
* Synchronization primitives such as __sync_fetch_and_add and friends
|
||
are now inlined for supported architectures rather than calling
|
||
into a kernel helper function.
|
||
* SSA loop prefetching is enabled by default for the Cortex-A9 at
|
||
-O3.
|
||
* Several improvements were committed to improve code generation for
|
||
the ARM architecture including a rewritten implementation for load
|
||
and store multiples.
|
||
* Several enhancements were committed to improve SIMD code generation
|
||
for NEON by adding support for widening instructions, misaligned
|
||
loads and stores, vector conditionals and support for 64 bit
|
||
arithmetic.
|
||
* Support was added for the Faraday cores fa526, fa606te, fa626te,
|
||
fmp626te, fmp626 and fa726te and can be used with the respective
|
||
names as parameters to the -mcpu= option.
|
||
* Basic support was added for Cortex-A15 and is available through
|
||
-mcpu=cortex-a15.
|
||
* GCC for AAPCS configurations now more closely adheres to the AAPCS
|
||
specification by enabling -fstrict-volatile-bitfields by default.
|
||
|
||
IA-32/x86-64
|
||
|
||
* The new -fsplit-stack option permits programs to use a
|
||
discontiguous stack. This is useful for threaded programs, in that
|
||
it is no longer necessary to specify the maximum stack size when
|
||
creating a thread. This feature is currently only implemented for
|
||
32-bit and 64-bit x86 GNU/Linux targets.
|
||
* Support for emitting profiler counter calls before function
|
||
prologues. This is enabled via a new command-line option -mfentry.
|
||
* Optimization for the Intel Core 2 processors is now available
|
||
through the -march=core2 and -mtune=core2 options.
|
||
* Support for Intel Core i3/i5/i7 processors is now available through
|
||
the -march=corei7 and -mtune=corei7 options.
|
||
* Support for Intel Core i3/i5/i7 processors with AVX is now
|
||
available through the -march=corei7-avx and -mtune=corei7-avx
|
||
options.
|
||
* Support for AMD Bobcat (family 14) processors is now available
|
||
through the -march=btver1 and -mtune=btver1 options.
|
||
* Support for AMD Bulldozer (family 15) processors is now available
|
||
through the -march=bdver1 and -mtune=bdver1 options.
|
||
* The default setting (when not optimizing for size) for 32-bit
|
||
GNU/Linux and Darwin x86 targets has been changed to
|
||
-fomit-frame-pointer. The default can be reverted to
|
||
-fno-omit-frame-pointer by configuring GCC with the
|
||
--enable-frame-pointer configure option.
|
||
* Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
|
||
__float128 on 32-bit and 64-bit x86 targets.
|
||
* AVX floating-point arithmetic can now be enabled by default at
|
||
configure time with the new --with-fpmath=avx option.
|
||
* The SSA loop prefetching pass is enabled when using -O3 when
|
||
optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
|
||
than K6).
|
||
* Support for TBM (Trailing Bit Manipulation) built-in functions and
|
||
code generation is available via -mtbm.
|
||
* Support for AMD's BMI (Bit Manipulation) built-in functions and
|
||
code generation is available via -mbmi.
|
||
|
||
MicroBlaze
|
||
|
||
* Support has been added for the Xilinx MicroBlaze softcore processor
|
||
(microblaze-elf) embedded target. This configurable processor is
|
||
supported on several Xilinx Spartan and Virtex FPGAs.
|
||
|
||
MIPS
|
||
|
||
* GCC now supports the Loongson 3A processor. Its canonical -march=
|
||
and -mtune= name is loongson3a.
|
||
|
||
MN10300 / AM33
|
||
|
||
* The inline assembly register constraint "A" has been renamed "c".
|
||
This constraint is used to select a floating-point register that
|
||
can be used as the destination of a multiply-accumulate
|
||
instruction.
|
||
* New inline assembly register constraints "A" and "D" have been
|
||
added. These constraint letters resolve to all general registers
|
||
when compiling for AM33, and resolve to address registers only or
|
||
data registers only when compiling for MN10300.
|
||
* The MDR register is represented in the compiler. One can access the
|
||
register via the "z" constraint in inline assembly. It can be
|
||
marked as clobbered or used as a local register variable via the
|
||
"mdr" name. The compiler uses the RETF instruction if the function
|
||
does not modify the MDR register, so it is important that inline
|
||
assembly properly annotate any usage of the register.
|
||
|
||
PowerPC/PowerPC64
|
||
|
||
* GCC now supports the Applied Micro Titan processor with
|
||
-mcpu=titan.
|
||
* The -mrecip option has been added, which indicates whether the
|
||
reciprocal and reciprocal square root instructions should be used.
|
||
* The -mveclibabi=mass option can be used to enable the compiler to
|
||
autovectorize mathematical functions using the Mathematical
|
||
Acceleration Subsystem library.
|
||
* The -msingle-pic-base option has been added, which instructs the
|
||
compiler to avoid loading the PIC base register in function
|
||
prologues. The PIC base register must be initialized by the runtime
|
||
system.
|
||
* The -mblock-move-inline-limit option has been added, which enables
|
||
the user to control the maximum size of inlined memcpy calls and
|
||
similar.
|
||
* PowerPC64 GNU/Linux support for applications requiring a large TOC
|
||
section has been improved. A new command-line option,
|
||
-mcmodel=MODEL, controls this feature; valid values for MODEL are
|
||
small, medium, or large.
|
||
* The Altivec builtin functions vec_ld and vec_st have been modified
|
||
to generate the Altivec memory instructions LVX and STVX, even if
|
||
the -mvsx option is used. In the initial GCC 4.5 release, these
|
||
builtin functions were changed to generate VSX memory reference
|
||
instructions instead of Altivec memory instructions, but there are
|
||
differences between the two instructions. If the VSX instruction
|
||
set is available, you can now use the new builtin functions
|
||
vec_vsx_ld and vec_vsx_st which always generates the VSX memory
|
||
instructions.
|
||
* The GCC compiler on AIX now defaults to a process layout with a
|
||
larger data space allowing larger programs to be compiled.
|
||
* The GCC long double type on AIX 6.1 and above has reverted to 64
|
||
bit double precision, matching the AIX XL compiler default, because
|
||
of missing C99 symbols required by the GCC runtime.
|
||
* The default processor scheduling model and tuning for PowerPC64
|
||
GNU/Linux and for AIX 6.1 and above now is POWER7.
|
||
* Starting with GCC 4.6.1, vectors of type vector long long or vector
|
||
long are passed and returned in the same method as other vectors
|
||
with the VSX instruction set. Previously the GCC compiler did not
|
||
adhere to the ABI for 128-bit vectors with 64-bit integer base
|
||
types (PR 48857). This is also fixed in the GCC 4.5.4 release.
|
||
|
||
S/390, zSeries and System z9/z10, IBM zEnterprise z196
|
||
|
||
* Support for the zEnterprise z196 processor has been added. When
|
||
using the -march=z196 option, the compiler will generate code
|
||
making use of the following instruction facilities:
|
||
+ Conditional load/store
|
||
+ Distinct-operands
|
||
+ Floating-point-extension
|
||
+ Interlocked-access
|
||
+ Population-count
|
||
The -mtune=z196 option avoids the compare and branch instructions
|
||
as well as the load address instruction with an index register as
|
||
much as possible and performs instruction scheduling appropriate
|
||
for the new out-of-order pipeline architecture.
|
||
* When using the -m31 -mzarch options the generated code still
|
||
conforms to the 32-bit ABI but uses the general purpose registers
|
||
as 64-bit registers internally. This requires a Linux kernel saving
|
||
the whole 64-bit registers when doing a context switch. Kernels
|
||
providing that feature indicate that by the 'highgprs' string in
|
||
/proc/cpuinfo.
|
||
* The SSA loop prefetching pass is enabled when using -O3.
|
||
|
||
SPARC
|
||
|
||
* GCC now supports the LEON series of SPARC V8 processors. The code
|
||
generated by the compiler can either be tuned to it by means of the
|
||
--with-tune=leon configure option and -mtune=leon compilation
|
||
option, or the compiler can be built for the sparc-leon-{elf,linux}
|
||
and sparc-leon3-{elf,linux} targets directly.
|
||
* GCC has stopped sign/zero-extending parameter registers in the
|
||
callee for functions taking parameters with sub-word size in 32-bit
|
||
mode, since this is redundant with the specification of the ABI.
|
||
GCC has never done so in 64-bit mode since this is also redundant.
|
||
* The command-line option -mfix-at697f has been added to enable the
|
||
documented workaround for the single erratum of the Atmel AT697F
|
||
processor.
|
||
|
||
Operating Systems
|
||
|
||
Android
|
||
|
||
* GCC now supports the Bionic C library and provides a convenient way
|
||
of building native libraries and applications for the Android
|
||
platform. Refer to the documentation of the -mandroid and -mbionic
|
||
options for details on building native code. At the moment, Android
|
||
support is enabled only for ARM.
|
||
|
||
Darwin/Mac OS X
|
||
|
||
* General
|
||
+ Initial support for CFString types has been added.
|
||
This allows GCC to build projects including the system Core
|
||
Foundation frameworks. The GCC Objective-C family supports
|
||
CFString "toll-free bridged" as per the Mac OS X system tools.
|
||
CFString is also recognized in the context of format
|
||
attributes and arguments (see the documentation for format
|
||
attributes for limitations). At present, 8-bit character types
|
||
are supported.
|
||
+ Object file size reduction.
|
||
The Darwin zeroed memory allocators have been re-written to
|
||
make more use of .zerofill sections. For non-debug code, this
|
||
can reduce object file size significantly.
|
||
+ Objective-C family 64-bit support (NeXT ABI 2).
|
||
Initial support has been added to support 64-bit Objective-C
|
||
code using the Darwin/OS X native (NeXT) runtime. ABI version
|
||
2 will be selected automatically when 64-bit code is built.
|
||
+ Objective-C family 32-bit ABI 1.
|
||
For 32-bit code ABI 1 is also now also allowed. At present it
|
||
must be selected manually using -fobjc-abi-version=1 where
|
||
applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).
|
||
* x86 Architecture
|
||
+ The -mdynamic-no-pic option has been enabled.
|
||
Code supporting -mdynamic-no-pic optimization has been added
|
||
and is applicable to -m32 builds. The compiler bootstrap uses
|
||
the option where appropriate.
|
||
+ The default value for -mtune= has been changed.
|
||
Since Darwin systems are primarily Xeon, Core-2 or similar the
|
||
default tuning has been changed to -mtune=core2.
|
||
+ Enable 128-bit long double (__float128) support on Darwin.
|
||
* PPC Architecture
|
||
+ Darwin64 ABI.
|
||
Several significant bugs have been fixed, such that GCC now
|
||
produces code compatible with the Darwin64 PowerPC ABI.
|
||
+ libffi and boehm-gc.
|
||
The Darwin ports of the libffi and boehm-gc libraries have
|
||
been upgraded to include a Darwin64 implementation. This means
|
||
that powerpc*-*-darwin9 platforms may now, for example, build
|
||
Java applications with -m64 enabled.
|
||
+ Plug-in support has been enabled.
|
||
+ The -fsection-anchors option is now available although,
|
||
presently, not heavily tested.
|
||
|
||
Solaris 2
|
||
|
||
New Features
|
||
|
||
* Support symbol versioning with the Sun linker.
|
||
* Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
|
||
* Support thread-local storage (TLS) with the Sun assembler on
|
||
Solaris 2/x86.
|
||
* Support TLS on Solaris 8/9 if prerequisites are met.
|
||
* Support COMDAT group with the GNU assembler and recent Sun linker.
|
||
* Support the Sun assembler visibility syntax.
|
||
* Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
|
||
-march=pentiumpro (Solaris 8/9).
|
||
* Don't use SSE on Solaris 8/9 x86 by default.
|
||
* Enable 128-bit long double (__float128) support on Solaris 2/x86.
|
||
|
||
ABI Change
|
||
|
||
* Change the ABI for returning 8-byte vectors like __m64 in MMX
|
||
registers on Solaris 10+/x86 to match the Sun Studio 12.1+
|
||
compilers. This is an incompatible change. If you use such types,
|
||
you must either recompile all your code with the new compiler or
|
||
use the new -mvect8-ret-in-mem option to remain compatible with
|
||
previous versions of GCC and Sun Studio.
|
||
|
||
Windows x86/x86_64
|
||
|
||
* Initial support for decimal floating point.
|
||
* Support for the __thiscall calling-convention.
|
||
* Support for hot-patchable function prologues via the
|
||
ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
|
||
* Improvements of stack-probing and stack-allocation mechanisms.
|
||
* Support of push/pop-macro pragma as preprocessor command.
|
||
With #pragma push_macro("macro-name") the current definition of
|
||
macro-name is saved and can be restored with #pragma
|
||
pop_macro("macro-name") to its saved definition.
|
||
* Enable 128-bit long double (__float128) support on MinGW and
|
||
Cygwin.
|
||
|
||
Other significant improvements
|
||
|
||
Installation changes
|
||
|
||
* An install-strip make target is provided that installs stripped
|
||
executables, and may install libraries with unneeded or debugging
|
||
sections stripped.
|
||
* On Power7 systems, there is a potential problem if you build the
|
||
GCC compiler with a host compiler using options that enable the VSX
|
||
instruction set generation. If the host compiler has been patched
|
||
so that the vec_ld and vec_st builtin functions generate Altivec
|
||
memory instructions instead of VSX memory instructions, then you
|
||
should be able to build the compiler with VSX instruction
|
||
generation.
|
||
|
||
Changes for GCC Developers
|
||
|
||
Note: these changes concern developers that develop GCC itself or
|
||
software that integrates with GCC, such as plugins, and not the general
|
||
GCC users.
|
||
* The gengtype utility, which previously was internal to the GCC
|
||
build process, has been enchanced to provide GC root information
|
||
for plugins as necessary.
|
||
* The old GC allocation interface of ggc_alloc and friends was
|
||
replaced with a type-safe alternative.
|
||
|
||
GCC 4.6.1
|
||
|
||
This is the [20]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.6.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.6.2
|
||
|
||
This is the [21]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.6.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.6.3
|
||
|
||
This is the [22]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.6.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.6.4
|
||
|
||
This is the [23]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.6.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [24]GCC manuals. If that fails, the
|
||
[25]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [26]gcc@gcc.gnu.org. All of [27]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [28]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [29]maintained by the GCC team. Last modified
|
||
2018-09-30[30].
|
||
|
||
References
|
||
|
||
1. https://sourceware.org/bugzilla/show_bug.cgi?id=10401
|
||
2. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
3. http://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
|
||
4. http://gcc.gnu.org/gcc-4.6/porting_to.html
|
||
5. http://gcc.gnu.org/projects/lto/whopr.pdf
|
||
6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
|
||
7. http://gcc.gnu.org/gcc-4.6/cxx0x_status.html
|
||
8. https://gcc.gnu.org/PR43145
|
||
9. https://gcc.gnu.org/PR43680
|
||
10. https://gcc.gnu.org/PR33558
|
||
11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
|
||
12. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
|
||
13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
|
||
14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
|
||
15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
|
||
16. https://gcc.gnu.org/wiki/OOP
|
||
17. https://gcc.gnu.org/wiki/Coarray
|
||
18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
|
||
19. https://golang.org/
|
||
20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
|
||
21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
|
||
22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
|
||
23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
|
||
24. https://gcc.gnu.org/onlinedocs/
|
||
25. mailto:gcc-help@gcc.gnu.org
|
||
26. mailto:gcc@gcc.gnu.org
|
||
27. https://gcc.gnu.org/lists.html
|
||
28. https://www.fsf.org/
|
||
29. https://gcc.gnu.org/about.html
|
||
30. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.5/index.html
|
||
GCC 4.5 Release Series
|
||
|
||
Jul 2, 2012
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.5.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.5.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.5.4
|
||
Jul 2, 2012 ([2]changes)
|
||
|
||
GCC 4.5.3
|
||
Apr 28, 2011 ([3]changes)
|
||
|
||
GCC 4.5.2
|
||
Dec 16, 2010 ([4]changes)
|
||
|
||
GCC 4.5.1
|
||
Jul 31, 2010 ([5]changes)
|
||
|
||
GCC 4.5.0
|
||
April 14, 2010 ([6]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [7]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [8]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [9]GCC project
|
||
web site or contact the [10]GCC development mailing list.
|
||
|
||
To obtain GCC please use [11]our mirror sites or [12]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [13]GCC manuals. If that fails, the
|
||
[14]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [15]gcc@gcc.gnu.org. All of [16]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [18]maintained by the GCC team. Last modified
|
||
2018-09-30[19].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
3. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
4. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
5. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
6. http://gcc.gnu.org/gcc-4.5/changes.html
|
||
7. http://gcc.gnu.org/gcc-4.5/buildstat.html
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
9. http://gcc.gnu.org/index.html
|
||
10. mailto:gcc@gcc.gnu.org
|
||
11. http://gcc.gnu.org/mirrors.html
|
||
12. http://gcc.gnu.org/svn.html
|
||
13. https://gcc.gnu.org/onlinedocs/
|
||
14. mailto:gcc-help@gcc.gnu.org
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. https://gcc.gnu.org/lists.html
|
||
17. https://www.fsf.org/
|
||
18. https://gcc.gnu.org/about.html
|
||
19. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.5/changes.html
|
||
GCC 4.5 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* GCC now requires the [1]MPC library in order to build. See the
|
||
[2]prerequisites page for version requirements.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.5.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ IRIX releases before 6.5 (mips-sgi-irix5*,
|
||
mips-sgi-irix6.[0-4])
|
||
+ Solaris 7 (*-*-solaris2.7)
|
||
+ Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
|
||
alpha-dec-osf5.0*)
|
||
+ Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions
|
||
can be found in the [3]announcement.
|
||
Support for the classic POWER architecture implemented in the
|
||
original RIOS and RIOS2 processors of the old IBM RS/6000 product
|
||
line has been obsoleted in the rs6000 port. This does not affect
|
||
the new generation Power and PowerPC architectures.
|
||
* Support has been removed for all the [4]configurations obsoleted in
|
||
GCC 4.4.
|
||
* Support has been removed for the protoize and unprotoize utilities,
|
||
obsoleted in GCC 4.4.
|
||
* Support has been removed for tuning for Itanium1 (Merced) variants.
|
||
Note that code tuned for Itanium2 should also run correctly on
|
||
Itanium1.
|
||
* GCC now generates unwind info also for epilogues. DWARF debuginfo
|
||
generated by GCC now uses more features of DWARF3 than before, and
|
||
also some DWARF4 features. GDB older than 7.0 is not able to handle
|
||
either of these, so to debug GCC 4.5 generated binaries or
|
||
libraries GDB 7.0 or later is needed. You can disable use of DWARF4
|
||
features with the -gdwarf-3 -gstrict-dwarf options, or use
|
||
-gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but
|
||
epilogue unwind info is emitted unconditionally whenever unwind
|
||
info is emitted.
|
||
* On x86 targets, code containing floating-point calculations may run
|
||
significantly more slowly when compiled with GCC 4.5 in strict C99
|
||
conformance mode than they did with earlier GCC versions. This is
|
||
due to stricter standard conformance of the compiler and can be
|
||
avoided by using the option -fexcess-precision=fast; also see
|
||
[5]below.
|
||
* The function attribute noinline no longer prevents GCC from cloning
|
||
the function. A new attribute noclone has been introduced for this
|
||
purpose. Cloning a function means that it is duplicated and the new
|
||
copy is specialized for certain contexts (for example when a
|
||
parameter is a known constant).
|
||
|
||
General Optimizer Improvements
|
||
|
||
* The -save-temps now takes an optional argument. The -save-temps and
|
||
-save-temps=cwd switches write the temporary files in the current
|
||
working directory based on the original source file. The
|
||
-save-temps=obj switch will write files into the directory
|
||
specified with the -o option, and the intermediate filenames are
|
||
based on the output file. This will allow the user to get the
|
||
compiler intermediate files when doing parallel builds without two
|
||
builds of the same filename located in different directories from
|
||
interfering with each other.
|
||
* Debugging dumps are now created in the same directory as the object
|
||
file rather than in the current working directory. This allows the
|
||
user to get debugging dumps when doing parallel builds without two
|
||
builds of the same filename interfering with each other.
|
||
* GCC has been integrated with the MPC library. This allows GCC to
|
||
evaluate complex arithmetic at compile time [6]more accurately. It
|
||
also allows GCC to evaluate calls to complex built-in math
|
||
functions having constant arguments and replace them at compile
|
||
time with their mathematically equivalent results. In doing so, GCC
|
||
can generate correct results regardless of the math library
|
||
implementation or floating point precision of the host platform.
|
||
This also allows GCC to generate identical results regardless of
|
||
whether one compiles in native or cross-compile configurations to a
|
||
particular target. The following built-in functions take advantage
|
||
of this new capability: cacos, cacosh, casin, casinh, catan,
|
||
catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan,
|
||
and ctanh. The float and long double variants of these functions
|
||
(e.g. csinf and csinl) are also handled.
|
||
* A new link-time optimizer has been added ([7]-flto). When this
|
||
option is used, GCC generates a bytecode representation of each
|
||
input file and writes it to specially-named sections in each object
|
||
file. When the object files are linked together, all the function
|
||
bodies are read from these named sections and instantiated as if
|
||
they had been part of the same translation unit. This enables
|
||
interprocedural optimizations to work across different files (and
|
||
even different languages), potentially improving the performance of
|
||
the generated code. To use the link-timer optimizer, -flto needs to
|
||
be specified at compile time and during the final link. If the
|
||
program does not require any symbols to be exported, it is possible
|
||
to combine -flto and the experimental [8]-fwhopr with
|
||
[9]-fwhole-program to allow the interprocedural optimizers to use
|
||
more aggressive assumptions.
|
||
* The automatic parallelization pass was enhanced to support
|
||
parallelization of outer loops.
|
||
* Automatic parallelization can be enabled as part of Graphite. In
|
||
addition to -ftree-parallelize-loops=, specify
|
||
-floop-parallelize-all to enable the Graphite-based optimization.
|
||
* The infrastructure for optimizing based on [10]restrict qualified
|
||
pointers has been rewritten and should result in code generation
|
||
improvements. Optimizations based on restrict qualified pointers
|
||
are now also available when using -fno-strict-aliasing.
|
||
* There is a new optimization pass that attempts to change prototype
|
||
of functions to avoid unused parameters, pass only relevant parts
|
||
of structures and turn arguments passed by reference to arguments
|
||
passed by value when possible. It is enabled by -O2 and above as
|
||
well as -Os and can be manually invoked using the new command-line
|
||
switch -fipa-sra.
|
||
* GCC now optimize exception handling code. In particular cleanup
|
||
regions that are proved to not have any effect are optimized out.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
All languages
|
||
|
||
* The -fshow-column option is now on by default. This means error
|
||
messages now have a column associated with them.
|
||
|
||
Ada
|
||
|
||
* Compilation of programs heavily using discriminated record types
|
||
with variant parts has been sped up and generates more compact
|
||
code.
|
||
* Stack checking now works reasonably well on most plaforms. In some
|
||
specific cases, stack overflows may still fail to be detected, but
|
||
a compile-time warning will be issued for these cases.
|
||
|
||
C family
|
||
|
||
* If a header named in a #include directive is not found, the
|
||
compiler exits immediately. This avoids a cascade of errors arising
|
||
from declarations expected to be found in that header being
|
||
missing.
|
||
* A new built-in function __builtin_unreachable() has been added that
|
||
tells the compiler that control will never reach that point. It may
|
||
be used after asm statements that terminate by transferring control
|
||
elsewhere, and in other places that are known to be unreachable.
|
||
* The -Wlogical-op option now warns for logical expressions such as
|
||
(c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be
|
||
mistakes. This option is disabled by default.
|
||
* An asm goto feature has been added to allow asm statements that
|
||
jump to C labels.
|
||
* C++0x raw strings are supported for C++ and for C with -std=gnu99.
|
||
* The deprecated attribute now takes an optional string argument, for
|
||
example, __attribute__((deprecated("text string"))), that will be
|
||
printed together with the deprecation warning.
|
||
|
||
C
|
||
|
||
* The -Wenum-compare option, which warns when comparing values of
|
||
different enum types, now works for C. It formerly only worked for
|
||
C++. This warning is enabled by -Wall. It may be avoided by using a
|
||
type cast.
|
||
* The -Wcast-qual option now warns about casts which are unsafe in
|
||
that they permit const-correctness to be violated without further
|
||
warnings. Specifically, it warns about cases where a qualifier is
|
||
added when all the lower types are not const. For example, it warns
|
||
about a cast from char ** to const char **.
|
||
* The -Wc++-compat option is significantly improved. It issues new
|
||
warnings for:
|
||
+ Using C++ reserved operator names as identifiers.
|
||
+ Conversions to enum types without explicit casts.
|
||
+ Using va_arg with an enum type.
|
||
+ Using different enum types in the two branches of ?:.
|
||
+ Using ++ or -- on a variable of enum type.
|
||
+ Using the same name as both a struct, union or enum tag and a
|
||
typedef, unless the typedef refers to the tagged type itself.
|
||
+ Using a struct, union, or enum which is defined within another
|
||
struct or union.
|
||
+ A struct field defined using a typedef if there is a field in
|
||
the struct, or an enclosing struct, whose name is the typedef
|
||
name.
|
||
+ Duplicate definitions at file scope.
|
||
+ Uninitialized const variables.
|
||
+ A global variable with an anonymous struct, union, or enum
|
||
type.
|
||
+ Using a string constant to initialize a char array whose size
|
||
is the length of the string.
|
||
* The new -Wjump-misses-init option warns about cases where a goto or
|
||
switch skips the initialization of a variable. This sort of branch
|
||
is an error in C++ but not in C. This warning is enabled by
|
||
-Wc++-compat.
|
||
* GCC now ensures that a C99-conforming <stdint.h> is present on most
|
||
targets, and uses information about the types in this header to
|
||
implement the Fortran bindings to those types. GCC does not ensure
|
||
the presence of such a header, and does not implement the Fortran
|
||
bindings, on the following targets: NetBSD, VxWorks, VMS,
|
||
SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF.
|
||
* GCC now implements C90- and C99-conforming rules for constant
|
||
expressions. This may cause warnings or errors for some code using
|
||
expressions that can be folded to a constant but are not constant
|
||
expressions as defined by ISO C.
|
||
* All known target-independent C90 and C90 Amendment 1 conformance
|
||
bugs, and all known target-independent C99 conformance bugs not
|
||
related to floating point or extended identifiers, have been fixed.
|
||
* The C decimal floating point support now includes support for the
|
||
FLOAT_CONST_DECIMAL64 pragma.
|
||
* The named address space feature from ISO/IEC TR 18037 is now
|
||
supported. This is currently only implemented for the SPU
|
||
processor.
|
||
|
||
C++
|
||
|
||
* Improved [11]experimental support for the upcoming C++0x ISO C++
|
||
standard, including support for raw strings, lambda expressions and
|
||
explicit type conversion operators.
|
||
* When printing the name of a class template specialization, G++ will
|
||
now omit any template arguments which come from default template
|
||
arguments. This behavior (and the pretty-printing of function
|
||
template specializations as template signature and arguments) can
|
||
be disabled with the -fno-pretty-templates option.
|
||
* Access control is now applied to typedef names used in a template,
|
||
which may cause G++ to reject some ill-formed code that was
|
||
accepted by earlier releases. The -fno-access-control option can be
|
||
used as a temporary workaround until the code is corrected.
|
||
* Compilation time for code that uses templates should now scale
|
||
linearly with the number of instantiations rather than
|
||
quadratically, as template instantiations are now looked up using
|
||
hash tables.
|
||
* Declarations of functions that look like builtin declarations of
|
||
library functions are only considered to be redeclarations if they
|
||
are declared with extern "C". This may cause problems with code
|
||
that omits extern "C" on hand-written declarations of C library
|
||
functions such as abort or memcpy. Such code is ill-formed, but was
|
||
accepted by earlier releases.
|
||
* Diagnostics that used to complain about passing non-POD types to
|
||
... or jumping past the declaration of a non-POD variable now check
|
||
for triviality rather than PODness, as per C++0x.
|
||
* In C++0x mode local and anonymous classes are now allowed as
|
||
template arguments, and in declarations of variables and functions
|
||
with linkage, so long as any such declaration that is used is also
|
||
defined ([12]DR 757).
|
||
* Labels may now have attributes, as has been permitted for a while
|
||
in C. This is only permitted when the label definition and the
|
||
attribute specifier is followed by a semicolon—i.e., the label
|
||
applies to an empty statement. The only useful attribute for a
|
||
label is unused.
|
||
* G++ now implements [13]DR 176. Previously G++ did not support using
|
||
the injected-class-name of a template base class as a type name,
|
||
and lookup of the name found the declaration of the template in the
|
||
enclosing scope. Now lookup of the name finds the
|
||
injected-class-name, which can be used either as a type or as a
|
||
template, depending on whether or not the name is followed by a
|
||
template argument list. As a result of this change, some code that
|
||
was previously accepted may be ill-formed because
|
||
1. The injected-class-name is not accessible because it's from a
|
||
private base, or
|
||
2. The injected-class-name cannot be used as an argument for a
|
||
template template parameter.
|
||
In either of these cases, the code can be fixed by adding a
|
||
nested-name-specifier to explicitly name the template. The first
|
||
can be worked around with -fno-access-control; the second is only
|
||
rejected with -pedantic.
|
||
* A new standard mangling for SIMD vector types has been added, to
|
||
avoid name clashes on systems with vectors of varying length. By
|
||
default the compiler still uses the old mangling, but emits aliases
|
||
with the new mangling on targets that support strong aliases. Users
|
||
can switch over entirely to the new mangling with -fabi-version=4
|
||
or -fabi-version=0. -Wabi will now warn about code that uses the
|
||
old mangling.
|
||
* The command-line option -ftemplate-depth-N is now written as
|
||
-ftemplate-depth=N and the old form is deprecated.
|
||
* Conversions between NULL and non-pointer types are now warned by
|
||
default. The new option -Wno-conversion-null disables these
|
||
warnings. Previously these warnings were only available when using
|
||
-Wconversion explicitly.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Improved experimental support for the upcoming ISO C++ standard,
|
||
C++0x, including:
|
||
+ Support for <future>, <functional>, and <random>.
|
||
+ Existing facilities now exploit explicit operators and the
|
||
newly implemented core C++0x features.
|
||
+ The header <cstdatomic> has been renamed to <atomic>.
|
||
* An experimental [14]profile mode has been added. This is an
|
||
implementation of many C++ standard library constructs with an
|
||
additional analysis layer that gives performance improvement advice
|
||
based on recognition of suboptimal usage patterns. For example,
|
||
#include <vector>
|
||
int main()
|
||
{
|
||
std::vector<int> v;
|
||
for (int k = 0; k < 1024; ++k)
|
||
v.insert(v.begin(), k);
|
||
}
|
||
|
||
When instrumented via the profile mode, can return suggestions
|
||
about the initial size and choice of the container used as follows:
|
||
vector-to-list: improvement = 5: call stack = 0x804842c ...
|
||
: advice = change std::vector to std::list
|
||
vector-size: improvement = 3: call stack = 0x804842c ...
|
||
: advice = change initial container size from 0 to 1024
|
||
|
||
These constructs can be substituted for the normal libstdc++
|
||
constructs on a piecemeal basis, or all existing components can be
|
||
transformed via the -D_GLIBCXX_PROFILE macro.
|
||
* [15]Support for decimal floating-point arithmetic (aka ISO C++ TR
|
||
24733) has been added. This support is in header file
|
||
<decimal/decimal>, uses namespace std::decimal, and includes
|
||
classes decimal32, decimal64, and decimal128.
|
||
* Sources have been audited for application of function attributes
|
||
nothrow, const, pure, and noreturn.
|
||
* Python pretty-printers have been added for many standard library
|
||
components that simplify the internal representation and present a
|
||
more intuitive view of components when used with
|
||
appropriately-advanced versions of GDB. For more information,
|
||
please consult the more [16]detailed description.
|
||
* The default behavior for comparing typeinfo names has changed, so
|
||
in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
|
||
* The new -static-libstdc++ option directs g++ to link the C++
|
||
library statically, even if the default would normally be to link
|
||
it dynamically.
|
||
|
||
Fortran
|
||
|
||
* The COMMON default padding has been changed – instead of adding the
|
||
padding before a variable it is now added afterwards, which
|
||
increases the compatibility with other vendors and helps to obtain
|
||
the correct output in some cases. Cf. also the -falign-commons
|
||
option ([17]added in 4.4).
|
||
* The -finit-real= option now also supports the value snan for
|
||
signaling not-a-number; to be effective, one additionally needs to
|
||
enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
|
||
optimizations can turn a signaling NaN into a quiet one.
|
||
* The new option -fcheck= has been added with the options bounds,
|
||
array-temps, do, pointer, and recursive. The bounds and array-temps
|
||
options are equivalent to -fbounds-check and
|
||
-fcheck-array-temporaries. The do option checks for invalid
|
||
modification of loop iteration variables, and the recursive option
|
||
tests for recursive calls to subroutines/functions which are not
|
||
marked as recursive. With pointer pointer association checks in
|
||
calls are performed; however, neither undefined pointers nor
|
||
pointers in expressions are handled. Using -fcheck=all enables all
|
||
these run-time checks.
|
||
* The run-time checking -fcheck=bounds now warns about invalid string
|
||
lengths of character dummy arguments. Additionally, more
|
||
compile-time checks have been added.
|
||
* The new option [18]-fno-protect-parens has been added; if set, the
|
||
compiler may reorder REAL and COMPLEX expressions without regard to
|
||
parentheses.
|
||
* GNU Fortran no longer links against libgfortranbegin. As before,
|
||
MAIN__ (assembler symbol name) is the actual Fortran main program,
|
||
which is invoked by the main function. However, main is now
|
||
generated and put in the same object file as MAIN__. For the time
|
||
being, libgfortranbegin still exists for backward compatibility.
|
||
For details see the new [19]Mixed-Language Programming chapter in
|
||
the manual.
|
||
* The I/O library was restructured for performance and cleaner code.
|
||
* Array assignments and WHERE are now run in parallel when OpenMP's
|
||
WORKSHARE is used.
|
||
* The experimental option -fwhole-file was added. The option allows
|
||
whole-file checking of procedure arguments and allows for better
|
||
optimizations. It can also be used with -fwhole-program, which is
|
||
now also supported in gfortran.
|
||
* More Fortran 2003 and Fortran 2008 mathematical functions can now
|
||
be used as initialization expressions.
|
||
* Some extended attributes such as STDCALL are now supported via the
|
||
[20]GCC$ compiler directive.
|
||
* For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
|
||
intrinsic behaves now as if zero were always positive.
|
||
* For legacy compatibiliy: On Cygwin and MinGW, the special files
|
||
CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now
|
||
supported.
|
||
* Fortran 2003 support has been extended:
|
||
+ Procedure-pointer function results and procedure-pointer
|
||
components (including PASS),
|
||
+ allocatable scalars (experimental),
|
||
+ DEFERRED type-bound procedures,
|
||
+ the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements
|
||
have been implemented.
|
||
+ The ALLOCATE statement supports type-specs and the SOURCE=
|
||
argument.
|
||
+ OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC
|
||
type-bound procedure (i.e. as type-bound operators).
|
||
+ Rounding (ROUND=, RZ, ...) for output is now supported.
|
||
+ The INT_FAST{8,16,32,64,128}_T kind type parameters of the
|
||
intrinsic module ISO_C_BINDING are now supported, except for
|
||
the targets listed above as ones where GCC does not have
|
||
<stdint.h> type information.
|
||
+ Extensible derived types with type-bound procedure or
|
||
procedure pointer with PASS attribute now have to use CLASS in
|
||
line with the Fortran 2003 standard; the workaround to use
|
||
TYPE is no longer supported.
|
||
+ [21]Experimental, incomplete support for polymorphism,
|
||
including CLASS, SELECT TYPE and dynamic dispatch of
|
||
type-bound procedure calls. Some features do not work yet such
|
||
as unlimited polymorphism (CLASS(*)).
|
||
* Fortran 2008 support has been extended:
|
||
+ The OPEN statement now supports the NEWUNIT= option, which
|
||
returns a unique file unit, thus preventing inadvertent use of
|
||
the same unit in different parts of the program.
|
||
+ Support for unlimited format items has been added.
|
||
+ The INT{8,16,32} and REAL{32,64,128} kind type parameters of
|
||
the intrinsic module ISO_FORTRAN_ENV are now supported.
|
||
+ Using complex arguments with TAN, SINH, COSH, TANH, ASIN,
|
||
ACOS, and ATAN is now possible; the functions ASINH, ACOSH,
|
||
and ATANH have been added (for real and complex arguments) and
|
||
ATAN(Y,X) is now an alias for ATAN2(Y,X).
|
||
+ The BLOCK construct has been implemented.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
AIX
|
||
|
||
* Full cross-toolchain support now available with GNU Binutils
|
||
|
||
ARM
|
||
|
||
* GCC now supports the Cortex-M0 and Cortex-A5 processors.
|
||
* GCC now supports the ARM v7E-M architecture.
|
||
* GCC now supports VFPv4-based FPUs and FPUs with
|
||
single-precision-only VFP.
|
||
* GCC has many improvements to optimization for other ARM processors,
|
||
including scheduling support for the integer pipeline on Cortex-A9.
|
||
* GCC now supports the IEEE 754-2008 half-precision floating-point
|
||
type, and a variant ARM-specific half-precision type. This type is
|
||
specified using __fp16, with the layout determined by
|
||
-mfp16-format. With appropriate -mfpu options, the Cortex-A9 and
|
||
VFPv4 half-precision instructions will be used.
|
||
* GCC now supports the variant of AAPCS that uses VFP registers for
|
||
parameter passing and return values.
|
||
|
||
AVR
|
||
|
||
* The -mno-tablejump option has been removed because it has the same
|
||
effect as the -fno-jump-tables option.
|
||
* Added support for these new AVR devices:
|
||
+ ATmega8U2
|
||
+ ATmega16U2
|
||
+ ATmega32U2
|
||
|
||
IA-32/x86-64
|
||
|
||
* GCC now will set the default for -march= based on the configure
|
||
target.
|
||
* GCC now supports handling floating-point excess precision arising
|
||
from use of the x87 floating-point unit in a way that conforms to
|
||
ISO C99. This is enabled with -fexcess-precision=standard and with
|
||
standards conformance options such as -std=c99, and may be disabled
|
||
using -fexcess-precision=fast.
|
||
* Support for the Intel Atom processor is now available through the
|
||
-march=atom and -mtune=atom options.
|
||
* A new -mcrc32 option is now available to enable crc32 intrinsics.
|
||
* A new -mmovbe option is now available to enable GCC to use the
|
||
movbe instruction to implement __builtin_bswap32 and
|
||
__builtin_bswap64.
|
||
* SSE math now can be enabled by default at configure time with the
|
||
new --with-fpmath=sse option.
|
||
* There is a new intrinsic header file, <x86intrin.h>. It should be
|
||
included before using any IA-32/x86-64 intrinsics.
|
||
* Support for the XOP, FMA4, and LWP instruction sets for the AMD
|
||
Orochi processors are now available with the -mxop, -mfma4, and
|
||
-mlwp options.
|
||
* The -mabm option enables GCC to use the popcnt and lzcnt
|
||
instructions on AMD processors.
|
||
* The -mpopcnt option enables GCC to use the popcnt instructions on
|
||
both AMD and Intel processors.
|
||
|
||
M68K/ColdFire
|
||
|
||
* GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x
|
||
and 5441x devices.
|
||
* GCC now supports thread-local storage (TLS) on M68K and ColdFire
|
||
processors.
|
||
|
||
MeP
|
||
|
||
Support has been added for the Toshiba Media embedded Processor (MeP,
|
||
or mep-elf) embedded target.
|
||
|
||
MIPS
|
||
|
||
* GCC now supports MIPS 1004K processors.
|
||
* GCC can now be configured with options --with-arch-32,
|
||
--with-arch-64, --with-tune-32 and --with-tune-64 to control the
|
||
default optimization separately for 32-bit and 64-bit modes.
|
||
* MIPS targets now support an alternative _mcount interface, in which
|
||
register $12 points to the function's save slot for register $31.
|
||
This interface is selected by the -mcount-ra-address option; see
|
||
the documentation for more details.
|
||
* GNU/Linux targets can now generate read-only .eh_frame sections.
|
||
This optimization requires GNU binutils 2.20 or above, and is only
|
||
available if GCC is configured with a suitable version of binutils.
|
||
* GNU/Linux targets can now attach special relocations to indirect
|
||
calls, so that the linker can turn them into direct jumps or
|
||
branches. This optimization requires GNU binutils 2.20 or later,
|
||
and is automatically selected if GCC is configured with an
|
||
appropriate version of binutils. It can be explicitly enabled or
|
||
disabled using the -mrelax-pic-calls command-line option.
|
||
* GCC now generates more heavily-optimized atomic operations on
|
||
Octeon processors.
|
||
* MIPS targets now support the -fstack-protector option.
|
||
* GCC now supports an -msynci option, which specifies that synci is
|
||
enough to flush the instruction cache, without help from the
|
||
operating system. GCC uses this information to optimize
|
||
automatically-generated cache flush operations, such as those used
|
||
for nested functions in C. There is also a --with-synci
|
||
configure-time option, which makes -msynci the default.
|
||
* GCC supports four new function attributes for interrupt handlers:
|
||
interrupt, use_shadow_register_set, keep_interrupts_masked and
|
||
use_debug_exception_return. See the documentation for more details
|
||
about these attributes.
|
||
|
||
RS/6000 (POWER/PowerPC)
|
||
|
||
* GCC now supports the Power ISA 2.06, which includes the VSX
|
||
instructions that add vector 64-bit floating point support, new
|
||
population count instructions, and conversions between floating
|
||
point and unsigned types.
|
||
* Support for the power7 processor is now available through the
|
||
-mcpu=power7 and -mtune=power7.
|
||
* GCC will now vectorize loops that contain simple math functions
|
||
like copysign when generating code for altivec or VSX targets.
|
||
* Support for the A2 processor is now available through the -mcpu=a2
|
||
and -mtune=a2 options.
|
||
* Support for the 476 processor is now available through the
|
||
-mcpu={476,476fp} and -mtune={476,476fp} options.
|
||
* Support for the e500mc64 processor is now available through the
|
||
-mcpu=e500mc64 and -mtune=e500mc64 options.
|
||
* GCC can now be configured with options --with-cpu-32,
|
||
--with-cpu-64, --with-tune-32 and --with-tune-64 to control the
|
||
default optimization separately for 32-bit and 64-bit modes.
|
||
* Starting with GCC 4.5.4, vectors of type vector long long or vector
|
||
long are passed and returned in the same method as other vectors
|
||
with the VSX instruction set. Previously the GCC compiler did not
|
||
adhere to the ABI for 128-bit vectors with 64-bit integer base
|
||
types (PR 48857). This is also fixed in the GCC 4.6.1 release.
|
||
|
||
RX
|
||
|
||
Support has been added for the Renesas RX Processor (rx-elf) target.
|
||
|
||
Operating Systems
|
||
|
||
Windows (Cygwin and MinGW)
|
||
|
||
* GCC now installs all the major language runtime libraries as DLLs
|
||
when configured with the --enable-shared option.
|
||
* GCC now makes use of the new support for aligned common variables
|
||
in versions of binutils >= 2.20 to fix bugs in the support for SSE
|
||
data types.
|
||
* Improvements to the libffi support library increase the reliability
|
||
of code generated by GCJ on all Windows platforms. Libgcj is
|
||
enabled by default for the first time.
|
||
* Libtool improvements simplify installation by placing the generated
|
||
DLLs in the correct binaries directory.
|
||
* Numerous other minor bugfixes and improvements, and substantial
|
||
enhancements to the Fortran language support library.
|
||
|
||
>
|
||
|
||
Other significant improvements
|
||
|
||
Plugins
|
||
|
||
* It is now possible to extend the compiler without having to modify
|
||
its source code. A new option -fplugin=file.so tells GCC to load
|
||
the shared object file.so and execute it as part of the compiler.
|
||
The internal documentation describes the details on how plugins can
|
||
interact with the compiler.
|
||
|
||
Installation changes
|
||
|
||
* The move to newer autotools changed default installation
|
||
directories and switches to control them: The --with-datarootdir,
|
||
--with-docdir, --with-pdfdir, and --with-htmldir switches are not
|
||
used any more. Instead, you can now use --datarootdir, --docdir,
|
||
--htmldir, and --pdfdir. The default installation directories have
|
||
changed as follows according to the GNU Coding Standards:
|
||
|
||
datarootdir read-only architecture-independent data root [PREFIX/share]
|
||
localedir locale-specific message catalogs [DATAROOTDIR/locale]
|
||
docdir documentation root [DATAROOTDIR/doc/PACKAGE]
|
||
htmldir html documentation [DOCDIR]
|
||
dvidir dvi documentation [DOCDIR]
|
||
pdfdir pdf documentation [DOCDIR]
|
||
psdir ps documentation [DOCDIR]
|
||
The following variables have new default values:
|
||
|
||
datadir read-only architecture-independent data [DATAROOTDIR]
|
||
infodir info documentation [DATAROOTDIR/info]
|
||
mandir man documentation [DATAROOTDIR/man]
|
||
|
||
GCC 4.5.1
|
||
|
||
This is the [22]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.5.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
All languages
|
||
|
||
* GCC's new link-time optimizer ([23]-flto) now also works on a few
|
||
non-ELF targets:
|
||
+ Cygwin (*-cygwin*)
|
||
+ MinGW (*-mingw*)
|
||
+ Darwin on x86-64 (x86_64-apple-darwin*)
|
||
LTO is not enabled by default for these targets. To enable LTO, you
|
||
should configure with the --enable-lto option.
|
||
|
||
GCC 4.5.2
|
||
|
||
This is the [24]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.5.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.5.3
|
||
|
||
This is the [25]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.5.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
On the PowerPC compiler, the Altivec builtin functions vec_ld and
|
||
vec_st have been modified to generate the Altivec memory instructions
|
||
LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5
|
||
release, these builtin functions were changed to generate VSX memory
|
||
reference instructions instead of Altivec memory instructions, but
|
||
there are differences between the two instructions. If the VSX
|
||
instruction set is available, you can now use the new builtin functions
|
||
vec_vsx_ld and vec_vsx_st which always generates the VSX memory
|
||
instructions.
|
||
|
||
GCC 4.5.4
|
||
|
||
This is the [26]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.5.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [27]GCC manuals. If that fails, the
|
||
[28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [32]maintained by the GCC team. Last modified
|
||
2018-09-30[33].
|
||
|
||
References
|
||
|
||
1. http://www.multiprecision.org/mpc/
|
||
2. https://gcc.gnu.org/install/prerequisites.html
|
||
3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
|
||
4. http://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
|
||
5. http://gcc.gnu.org/gcc-4.5/changes.html#x86
|
||
6. https://gcc.gnu.org/PR30789
|
||
7. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
|
||
9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
|
||
10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
|
||
11. http://gcc.gnu.org/gcc-4.5/cxx0x_status.html
|
||
12. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
|
||
13. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
|
||
14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
|
||
15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
|
||
16. https://sourceware.org/gdb/wiki/STLSupport
|
||
17. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
|
||
19. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
|
||
20. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
|
||
21. https://gcc.gnu.org/wiki/OOP
|
||
22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
|
||
23. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
|
||
24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
|
||
25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
|
||
26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
|
||
27. https://gcc.gnu.org/onlinedocs/
|
||
28. mailto:gcc-help@gcc.gnu.org
|
||
29. mailto:gcc@gcc.gnu.org
|
||
30. https://gcc.gnu.org/lists.html
|
||
31. https://www.fsf.org/
|
||
32. https://gcc.gnu.org/about.html
|
||
33. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.4/index.html
|
||
GCC 4.4 Release Series
|
||
|
||
March 13, 2012
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.4.7.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.4.6 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.4.7
|
||
March 13, 2012 ([2]changes)
|
||
|
||
GCC 4.4.6
|
||
April 16, 2011 ([3]changes)
|
||
|
||
GCC 4.4.5
|
||
October 1, 2010 ([4]changes)
|
||
|
||
GCC 4.4.4
|
||
April 29, 2010 ([5]changes)
|
||
|
||
GCC 4.4.3
|
||
January 21, 2010 ([6]changes)
|
||
|
||
GCC 4.4.2
|
||
October 15, 2009 ([7]changes)
|
||
|
||
GCC 4.4.1
|
||
July 22, 2009 ([8]changes)
|
||
|
||
GCC 4.4.0
|
||
April 21, 2009 ([9]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [10]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [11]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [12]GCC
|
||
project web site or contact the [13]GCC development mailing list.
|
||
|
||
To obtain GCC please use [14]our mirror sites or [15]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [16]GCC manuals. If that fails, the
|
||
[17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [21]maintained by the GCC team. Last modified
|
||
2018-09-30[22].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
3. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
4. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
5. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
6. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
7. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
8. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
9. http://gcc.gnu.org/gcc-4.4/changes.html
|
||
10. http://gcc.gnu.org/gcc-4.4/buildstat.html
|
||
11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
12. http://gcc.gnu.org/index.html
|
||
13. mailto:gcc@gcc.gnu.org
|
||
14. http://gcc.gnu.org/mirrors.html
|
||
15. http://gcc.gnu.org/svn.html
|
||
16. https://gcc.gnu.org/onlinedocs/
|
||
17. mailto:gcc-help@gcc.gnu.org
|
||
18. mailto:gcc@gcc.gnu.org
|
||
19. https://gcc.gnu.org/lists.html
|
||
20. https://www.fsf.org/
|
||
21. https://gcc.gnu.org/about.html
|
||
22. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.4/changes.html
|
||
GCC 4.4 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 4.4 release series is [1]GCC 4.4.7.
|
||
|
||
Caveats
|
||
|
||
* __builtin_stdarg_start has been completely removed from GCC.
|
||
Support for <varargs.h> had been deprecated since GCC 4.0. Use
|
||
__builtin_va_start as a replacement.
|
||
* Some of the errors issued by the C++ front end that could be
|
||
downgraded to warnings in previous releases by using -fpermissive
|
||
are now warnings by default. They can be converted into errors by
|
||
using -pedantic-errors.
|
||
* Use of the cpp assertion extension will now emit a warning when
|
||
-Wdeprecated or -pedantic is used. This extension has been
|
||
deprecated for many years, but never warned about.
|
||
* Packed bit-fields of type char were not properly bit-packed on many
|
||
targets prior to GCC 4.4. On these targets, the fix in GCC 4.4
|
||
causes an ABI change. For example there is no longer a 4-bit
|
||
padding between field a and b in this structure:
|
||
struct foo
|
||
{
|
||
char a:4;
|
||
char b:8;
|
||
} __attribute__ ((packed));
|
||
There is a new warning to help identify fields that are affected:
|
||
foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
|
||
The warning can be disabled with -Wno-packed-bitfield-compat.
|
||
* On ARM EABI targets, the C++ mangling of the va_list type has been
|
||
changed to conform to the current revision of the EABI. This does
|
||
not affect the libstdc++ library included with GCC.
|
||
* The SCOUNT and POS bits of the MIPS DSP control register are now
|
||
treated as global. Previous versions of GCC treated these fields as
|
||
call-clobbered instead.
|
||
* The MIPS port no longer recognizes the h asm constraint. It was
|
||
necessary to remove this constraint in order to avoid generating
|
||
unpredictable code sequences.
|
||
One of the main uses of the h constraint was to extract the high
|
||
part of a multiplication on 64-bit targets. For example:
|
||
asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
|
||
You can now achieve the same effect using 128-bit types:
|
||
typedef unsigned int uint128_t __attribute__((mode(TI)));
|
||
result = ((uint128_t) x * y) >> 64;
|
||
The second sequence is better in many ways. For example, if x and y
|
||
are constants, the compiler can perform the multiplication at
|
||
compile time. If x and y are not constants, the compiler can
|
||
schedule the runtime multiplication better than it can schedule an
|
||
asm statement.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.4.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
The following ports for individual systems on particular
|
||
architectures have been obsoleted:
|
||
+ Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
|
||
m68k-*-aout*)
|
||
+ Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
|
||
armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
|
||
sh-*-*). This does not affect other more specific targets
|
||
using the COFF object format on those architectures, or the
|
||
more specific H8300 and SH targets (h8300-*-rtems*,
|
||
h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
|
||
sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).
|
||
+ 2BSD on PDP-11 (pdp11-*-bsd)
|
||
+ AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
|
||
powerpc-ibm-aix4.[12]*)
|
||
+ Tuning support for Itanium1 (Merced) variants. Note that code
|
||
tuned for Itanium2 should also run correctly on Itanium1.
|
||
* The protoize and unprotoize utilities have been obsoleted and will
|
||
be removed in GCC 4.5. These utilities have not been installed by
|
||
default since GCC 3.0.
|
||
* Support has been removed for all the [2]configurations obsoleted in
|
||
GCC 4.3.
|
||
* Unknown -Wno-* options are now silently ignored by GCC if no other
|
||
diagnostics are issued. If other diagnostics are issued, then GCC
|
||
warns about the unknown options.
|
||
* More information on porting to GCC 4.4 from previous versions of
|
||
GCC can be found in the [3]porting guide for this release.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* A new command-line switch -findirect-inlining has been added. When
|
||
turned on it allows the inliner to also inline indirect calls that
|
||
are discovered to have known targets at compile time thanks to
|
||
previous inlining.
|
||
* A new command-line switch -ftree-switch-conversion has been added.
|
||
This new pass turns simple initializations of scalar variables in
|
||
switch statements into initializations from a static array, given
|
||
that all the values are known at compile time and the ratio between
|
||
the new array size and the original switch branches does not exceed
|
||
the parameter --param switch-conversion-max-branch-ratio (default
|
||
is eight).
|
||
* A new command-line switch -ftree-builtin-call-dce has been added.
|
||
This optimization eliminates unnecessary calls to certain builtin
|
||
functions when the return value is not used, in cases where the
|
||
calls can not be eliminated entirely because the function may set
|
||
errno. This optimization is on by default at -O2 and above.
|
||
* A new command-line switch -fconserve-stack directs the compiler to
|
||
minimize stack usage even if it makes the generated code slower.
|
||
This affects inlining decisions.
|
||
* When the assembler supports it, the compiler will now emit unwind
|
||
information using assembler .cfi directives. This makes it possible
|
||
to use such directives in inline assembler code. The new option
|
||
-fno-dwarf2-cfi-asm directs the compiler to not use .cfi
|
||
directives.
|
||
* The [4]Graphite branch has been merged. This merge has brought in a
|
||
new framework for loop optimizations based on a polyhedral
|
||
intermediate representation. These optimizations apply to all the
|
||
languages supported by GCC. The following new code transformations
|
||
are available in GCC 4.4:
|
||
+ -floop-interchange performs loop interchange transformations
|
||
on loops. Interchanging two nested loops switches the inner
|
||
and outer loops. For example, given a loop like:
|
||
DO J = 1, M
|
||
DO I = 1, N
|
||
A(J, I) = A(J, I) * C
|
||
ENDDO
|
||
ENDDO
|
||
|
||
loop interchange will transform the loop as if the user had
|
||
written:
|
||
DO I = 1, N
|
||
DO J = 1, M
|
||
A(J, I) = A(J, I) * C
|
||
ENDDO
|
||
ENDDO
|
||
|
||
which can be beneficial when N is larger than the caches,
|
||
because in Fortran, the elements of an array are stored in
|
||
memory contiguously by column, and the original loop iterates
|
||
over rows, potentially creating at each access a cache miss.
|
||
+ -floop-strip-mine performs loop strip mining transformations
|
||
on loops. Strip mining splits a loop into two nested loops.
|
||
The outer loop has strides equal to the strip size and the
|
||
inner loop has strides of the original loop within a strip.
|
||
For example, given a loop like:
|
||
DO I = 1, N
|
||
A(I) = A(I) + C
|
||
ENDDO
|
||
|
||
loop strip mining will transform the loop as if the user had
|
||
written:
|
||
DO II = 1, N, 4
|
||
DO I = II, min (II + 3, N)
|
||
A(I) = A(I) + C
|
||
ENDDO
|
||
ENDDO
|
||
|
||
+ -floop-block performs loop blocking transformations on loops.
|
||
Blocking strip mines each loop in the loop nest such that the
|
||
memory accesses of the element loops fit inside caches. For
|
||
example, given a loop like:
|
||
DO I = 1, N
|
||
DO J = 1, M
|
||
A(J, I) = B(I) + C(J)
|
||
ENDDO
|
||
ENDDO
|
||
|
||
loop blocking will transform the loop as if the user had
|
||
written:
|
||
DO II = 1, N, 64
|
||
DO JJ = 1, M, 64
|
||
DO I = II, min (II + 63, N)
|
||
DO J = JJ, min (JJ + 63, M)
|
||
A(J, I) = B(I) + C(J)
|
||
ENDDO
|
||
ENDDO
|
||
ENDDO
|
||
ENDDO
|
||
|
||
which can be beneficial when M is larger than the caches,
|
||
because the innermost loop will iterate over a smaller amount
|
||
of data that can be kept in the caches.
|
||
* A new register allocator has replaced the old one. It is called
|
||
integrated register allocator (IRA) because coalescing, register
|
||
live range splitting, and hard register preferencing are done
|
||
on-the-fly during coloring. It also has better integration with the
|
||
reload pass. IRA is a regional register allocator which uses modern
|
||
Chaitin-Briggs coloring instead of Chow's priority coloring used in
|
||
the old register allocator. More info about IRA internals and
|
||
options can be found in the GCC manuals.
|
||
* A new instruction scheduler and software pipeliner, based on the
|
||
selective scheduling approach, has been added. The new pass
|
||
performs instruction unification, register renaming, substitution
|
||
through register copies, and speculation during scheduling. The
|
||
software pipeliner is able to pipeline non-countable loops. The new
|
||
pass is targeted at scheduling-eager in-order platforms. In GCC 4.4
|
||
it is available for the Intel Itanium platform working by default
|
||
as the second scheduling pass (after register allocation) at the
|
||
-O3 optimization level.
|
||
* When using -fprofile-generate with a multi-threaded program, the
|
||
profile counts may be slightly wrong due to race conditions. The
|
||
new -fprofile-correction option directs the compiler to apply
|
||
heuristics to smooth out the inconsistencies. By default the
|
||
compiler will give an error message when it finds an inconsistent
|
||
profile.
|
||
* The new -fprofile-dir=PATH option permits setting the directory
|
||
where profile data files are stored when using -fprofile-generate
|
||
and friends, and the directory used when reading profile data files
|
||
using -fprofile-use and friends.
|
||
|
||
New warning options
|
||
|
||
* The new -Wframe-larger-than=NUMBER option directs GCC to emit a
|
||
warning if any stack frame is larger than NUMBER bytes. This may be
|
||
used to help ensure that code fits within a limited amount of stack
|
||
space.
|
||
* The command-line option -Wlarger-than-N is now written as
|
||
-Wlarger-than=N and the old form is deprecated.
|
||
* The new -Wno-mudflap option disables warnings about constructs
|
||
which can not be instrumented when using -fmudflap.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* Version 3.0 of the OpenMP specification is now supported for the C,
|
||
C++, and Fortran compilers.
|
||
* New character data types, per [5]TR 19769: New character types in
|
||
C, are now supported for the C compiler in -std=gnu99 mode, as
|
||
__CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in
|
||
-std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too.
|
||
|
||
C family
|
||
|
||
* A new optimize attribute was added to allow programmers to change
|
||
the optimization level and particular optimization options for an
|
||
individual function. You can also change the optimization options
|
||
via the GCC optimize pragma for functions defined after the pragma.
|
||
The GCC push_options pragma and the GCC pop_options pragma allow
|
||
you temporarily save and restore the options used. The GCC
|
||
reset_options pragma restores the options to what was specified on
|
||
the command line.
|
||
* Uninitialized warnings do not require enabling optimization
|
||
anymore, that is, -Wuninitialized can be used together with -O0.
|
||
Nonetheless, the warnings given by -Wuninitialized will probably be
|
||
more accurate if optimization is enabled.
|
||
* -Wparentheses now warns about expressions such as (!x | y) and (!x
|
||
& y). Using explicit parentheses, such as in ((!x) | y), silences
|
||
this warning.
|
||
* -Wsequence-point now warns within if, while,do while and for
|
||
conditions, and within for begin/end expressions.
|
||
* A new option -dU is available to dump definitions of preprocessor
|
||
macros that are tested or expanded.
|
||
|
||
C++
|
||
|
||
* [6]Improved experimental support for the upcoming ISO C++ standard,
|
||
C++0x. Including support for auto, inline namespaces, generalized
|
||
initializer lists, defaulted and deleted functions, new character
|
||
types, and scoped enums.
|
||
* Those errors that may be downgraded to warnings to build legacy
|
||
code now mention -fpermissive when -fdiagnostics-show-option is
|
||
enabled.
|
||
* -Wconversion now warns if the result of a static_cast to enumeral
|
||
type is unspecified because the value is outside the range of the
|
||
enumeral type.
|
||
* -Wuninitialized now warns if a non-static reference or non-static
|
||
const member appears in a class without constructors.
|
||
* G++ now properly implements value-initialization, so objects with
|
||
an initializer of () and an implicitly defined default constructor
|
||
will be zero-initialized before the default constructor is called.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Improved experimental support for the upcoming ISO C++ standard,
|
||
C++0x, including:
|
||
+ Support for <chrono>, <condition_variable>, <cstdatomic>,
|
||
<forward_list>, <initializer_list>, <mutex>, <ratio>,
|
||
<system_error>, and <thread>.
|
||
+ unique_ptr, <algorithm> additions, exception propagation, and
|
||
support for the new character types in <string> and <limits>.
|
||
+ Existing facilities now exploit initializer lists, defaulted
|
||
and deleted functions, and the newly implemented core C++0x
|
||
features.
|
||
+ Some standard containers are more efficient together with
|
||
stateful allocators, i.e., no allocator is constructed on the
|
||
fly at element construction time.
|
||
* Experimental support for non-standard pointer types in containers.
|
||
* The long standing libstdc++/30928 has been fixed for targets
|
||
running glibc 2.10 or later.
|
||
* As usual, many small and larger bug fixes, in particular quite a
|
||
few corner cases in <locale>.
|
||
|
||
Fortran
|
||
|
||
* GNU Fortran now employs libcpp directly instead of using cc1 as an
|
||
external preprocessor. The [7]-cpp option was added to allow manual
|
||
invocation of the preprocessor without relying on filename
|
||
extensions.
|
||
* The [8]-Warray-temporaries option warns about array temporaries
|
||
generated by the compiler, as an aid to optimization.
|
||
* The [9]-fcheck-array-temporaries option has been added, printing a
|
||
notification at run time, when an array temporary had to be created
|
||
for an function argument. Contrary to -Warray-temporaries the
|
||
warning is only printed if the array is noncontiguous.
|
||
* Improved generation of DWARF debugging symbols
|
||
* If using an intrinsic not part of the selected standard (via -std=
|
||
and -fall-intrinsics) gfortran will now treat it as if this
|
||
procedure were declared EXTERNAL and try to link to a user-supplied
|
||
procedure. -Wintrinsics-std will warn whenever this happens. The
|
||
now-useless option -Wnonstd-intrinsic was removed.
|
||
* The flag -falign-commons has been added to control the alignment of
|
||
variables in COMMON blocks, which is enabled by default in line
|
||
with previous GCC version. Using -fno-align-commons one can force
|
||
commons to be contiguous in memory as required by the Fortran
|
||
standard, however, this slows down the memory access. The option
|
||
-Walign-commons, which is enabled by default, warns when padding
|
||
bytes were added for alignment. The proper solution is to sort the
|
||
common objects by decreasing storage size, which avoids the
|
||
alignment problems.
|
||
* Fortran 2003 support has been extended:
|
||
+ Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
|
||
now supported (except internal reads from/writes to wide
|
||
strings). [10]-fbackslash now supports also \unnnn and
|
||
\Unnnnnnnn to enter Unicode characters.
|
||
+ Asynchronous I/O (implemented as synchronous I/O) and the
|
||
decimal=, size=, sign=, pad=, blank=, and delim= specifiers
|
||
are now supported in I/O statements.
|
||
+ Support for Fortran 2003 structure constructors and for array
|
||
constructor with typespec has been added.
|
||
+ Procedure Pointers (but not yet as component in derived types
|
||
and as function results) are now supported.
|
||
+ Abstract types, type extension, and type-bound procedures
|
||
(both PROCEDURE and GENERIC but not as operators). Note: As
|
||
CLASS/polymorphyic types are not implemented, type-bound
|
||
procedures with PASS accept as non-standard extension TYPE
|
||
arguments.
|
||
* Fortran 2008 support has been added:
|
||
+ The -std=f2008 option and support for the file extensions
|
||
.f2008 and .F2008 has been added.
|
||
+ The g0 format descriptor is now supported.
|
||
+ The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH,
|
||
ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED
|
||
are now available (some of them existed as GNU extension
|
||
before). Note: The hyperbolic functions are not yet supporting
|
||
complex arguments and the three- argument version of BESSEL_*N
|
||
is not available.
|
||
+ The bit intrinsics LEADZ and TRAILZ have been added.
|
||
|
||
Java (GCJ)
|
||
|
||
Ada
|
||
|
||
* The Ada runtime now supports multilibs on many platforms including
|
||
x86_64, SPARC and PowerPC. Their build is enabled by default.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
ARM
|
||
|
||
* GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
|
||
Cortex-R4F processors and has many other improvements to
|
||
optimization for ARM processors.
|
||
* GCC now supports the VFPv3 variant with 16 double-precision
|
||
registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been
|
||
renamed to -mfpu=vfpv3.
|
||
* GCC now supports the -mfix-cortex-m3-ldrd option to work around an
|
||
erratum on Cortex-M3 processors.
|
||
* GCC now supports the __sync_* atomic operations for ARM EABI
|
||
GNU/Linux.
|
||
* The section anchors optimization is now enabled by default when
|
||
optimizing for ARM.
|
||
* GCC now uses a new EABI-compatible profiling interface for EABI
|
||
targets. This requires a function __gnu_mcount_nc, which is
|
||
provided by GNU libc versions 2.8 and later.
|
||
|
||
AVR
|
||
|
||
* The -mno-tablejump option has been deprecated because it has the
|
||
same effect as the -fno-jump-tables option.
|
||
* Added support for these new AVR devices:
|
||
+ ATA6289
|
||
+ ATtiny13A
|
||
+ ATtiny87
|
||
+ ATtiny167
|
||
+ ATtiny327
|
||
+ ATmega8C1
|
||
+ ATmega16C1
|
||
+ ATmega32C1
|
||
+ ATmega8M1
|
||
+ ATmega16M1
|
||
+ ATmega32M1
|
||
+ ATmega32U4
|
||
+ ATmega16HVB
|
||
+ ATmega4HVD
|
||
+ ATmega8HVD
|
||
+ ATmega64C1
|
||
+ ATmega64M1
|
||
+ ATmega16U4
|
||
+ ATmega32U6
|
||
+ ATmega128RFA1
|
||
+ AT90PWM81
|
||
+ AT90SCR100
|
||
+ M3000F
|
||
+ M3000S
|
||
+ M3001B
|
||
|
||
IA-32/x86-64
|
||
|
||
* Support for Intel AES built-in functions and code generation is
|
||
available via -maes.
|
||
* Support for Intel PCLMUL built-in function and code generation is
|
||
available via -mpclmul.
|
||
* Support for Intel AVX built-in functions and code generation is
|
||
available via -mavx.
|
||
* Automatically align the stack for local variables with alignment
|
||
requirement.
|
||
* GCC can now utilize the SVML library for vectorizing calls to a set
|
||
of C99 functions if -mveclibabi=svml is specified and you link to
|
||
an SVML ABI compatible library.
|
||
* On x86-64, the ABI has been changed in the following cases to
|
||
conform to the x86-64 ABI:
|
||
+ Passing/returning structures with flexible array member:
|
||
struct foo
|
||
{
|
||
int i;
|
||
int flex[];
|
||
};
|
||
+ Passing/returning structures with complex float member:
|
||
struct foo
|
||
{
|
||
int i;
|
||
__complex__ float f;
|
||
};
|
||
+ Passing/returning unions with long double member:
|
||
union foo
|
||
{
|
||
int x;
|
||
long double ld;
|
||
};
|
||
Code built with previous versions of GCC that uses any of these is
|
||
not compatible with code built with GCC 4.4.0 or later.
|
||
* A new target attribute was added to allow programmers to change the
|
||
target options like -msse2 or -march=k8 for an individual function.
|
||
You can also change the target options via the GCC target pragma
|
||
for functions defined after the pragma.
|
||
* GCC can now be configured with options --with-arch-32,
|
||
--with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
|
||
--with-tune-64 to control the default optimization separately for
|
||
32-bit and 64-bit modes.
|
||
|
||
IA-32/IA64
|
||
|
||
* Support for __float128 (TFmode) IEEE quad type and corresponding
|
||
TCmode IEEE complex quad type is available via the soft-fp library
|
||
on IA-32/IA64 targets. This includes basic arithmetic operations
|
||
(addition, subtraction, negation, multiplication and division) on
|
||
__float128 real and TCmode complex values, the full set of IEEE
|
||
comparisons between __float128 values, conversions to and from
|
||
float, double and long double floating point types, as well as
|
||
conversions to and from signed or unsigned integer, signed or
|
||
unsigned long integer and signed or unsigned quad (TImode, IA64
|
||
only) integer types. Additionally, all operations generate the full
|
||
set of IEEE exceptions and support the full set of IEEE rounding
|
||
modes.
|
||
|
||
M68K/ColdFire
|
||
|
||
* GCC now supports instruction scheduling for ColdFire V1, V3 and V4
|
||
processors. (Scheduling support for ColdFire V2 processors was
|
||
added in GCC 4.3.)
|
||
* GCC now supports the -mxgot option to support programs requiring
|
||
many GOT entries on ColdFire.
|
||
* The m68k-*-linux-gnu target now builds multilibs by default.
|
||
|
||
MIPS
|
||
|
||
* MIPS Technologies have extended the original MIPS SVR4 ABI to
|
||
include support for procedure linkage tables (PLTs) and copy
|
||
relocations. These extensions allow GNU/Linux executables to use a
|
||
significantly more efficient code model than the one defined by the
|
||
original ABI.
|
||
GCC support for this code model is available via a new command-line
|
||
option, -mplt. There is also a new configure-time option,
|
||
--with-mips-plt, to make -mplt the default.
|
||
The new code model requires support from the assembler, the linker,
|
||
and the runtime C library. This support is available in binutils
|
||
2.19 and GLIBC 2.9.
|
||
* GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
|
||
and 32-bit GNU/Linux shared libraries. This feature requires GNU
|
||
binutils 2.19 or above.
|
||
* Support for RMI's XLR processor is now available through the
|
||
-march=xlr and -mtune=xlr options.
|
||
* 64-bit targets can now perform 128-bit multiplications inline,
|
||
instead of relying on a libgcc function.
|
||
* Native GNU/Linux toolchains now support -march=native and
|
||
-mtune=native, which select the host processor.
|
||
* GCC now supports the R10K, R12K, R14K and R16K processors. The
|
||
canonical -march= and -mtune= names for these processors are
|
||
r10000, r12000, r14000 and r16000 respectively.
|
||
* GCC can now work around the side effects of speculative execution
|
||
on R10K processors. Please see the documentation of the
|
||
-mr10k-cache-barrier option for details.
|
||
* Support for the MIPS64 Release 2 instruction set has been added.
|
||
The option -march=mips64r2 enables generation of these
|
||
instructions.
|
||
* GCC now supports Cavium Networks' Octeon processor. This support is
|
||
available through the -march=octeon and -mtune=octeon options.
|
||
* GCC now supports STMicroelectronics' Loongson 2E/2F processors. The
|
||
canonical -march= and -mtune= names for these processors are
|
||
loongson2e and loongson2f.
|
||
|
||
picochip
|
||
|
||
Picochip is a 16-bit processor. A typical picoChip contains over 250
|
||
small cores, each with small amounts of memory. There are three
|
||
processor variants (STAN, MEM and CTRL) with different instruction sets
|
||
and memory configurations and they can be chosen using the -mae option.
|
||
|
||
This port is intended to be a "C" only port.
|
||
|
||
Power Architecture and PowerPC
|
||
|
||
* GCC now supports the e300c2, e300c3 and e500mc processors.
|
||
* GCC now supports Xilinx processors with a single-precision FPU.
|
||
* Decimal floating point is now supported for e500 processors.
|
||
|
||
S/390, zSeries and System z9/z10
|
||
|
||
* Support for the IBM System z10 EC/BC processor has been added. When
|
||
using the -march=z10 option, the compiler will generate code making
|
||
use of instructions provided by the General-Instruction-Extension
|
||
Facility and the Execute-Extension Facility.
|
||
|
||
VxWorks
|
||
|
||
* GCC now supports the thread-local storage mechanism used on
|
||
VxWorks.
|
||
|
||
Xtensa
|
||
|
||
* GCC now supports thread-local storage (TLS) for Xtensa processor
|
||
configurations that include the Thread Pointer option. TLS also
|
||
requires support from the assembler and linker; this support is
|
||
provided in the GNU binutils beginning with version 2.19.
|
||
|
||
Documentation improvements
|
||
|
||
Other significant improvements
|
||
|
||
GCC 4.4.1
|
||
|
||
This is the [11]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.2
|
||
|
||
This is the [12]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.3
|
||
|
||
This is the [13]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.4
|
||
|
||
This is the [14]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.5
|
||
|
||
This is the [15]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.6
|
||
|
||
This is the [16]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.6 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.4.7
|
||
|
||
This is the [17]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.4.7 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [18]GCC manuals. If that fails, the
|
||
[19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [23]maintained by the GCC team. Last modified
|
||
2018-09-30[24].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
|
||
2. http://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
|
||
3. http://gcc.gnu.org/gcc-4.4/porting_to.html
|
||
4. https://gcc.gnu.org/wiki/Graphite
|
||
5. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
|
||
6. http://gcc.gnu.org/gcc-4.4/cxx0x_status.html
|
||
7. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
|
||
8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
|
||
9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
|
||
10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
|
||
11. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
|
||
12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
|
||
13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
|
||
14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
|
||
15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
|
||
16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
|
||
17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
|
||
18. https://gcc.gnu.org/onlinedocs/
|
||
19. mailto:gcc-help@gcc.gnu.org
|
||
20. mailto:gcc@gcc.gnu.org
|
||
21. https://gcc.gnu.org/lists.html
|
||
22. https://www.fsf.org/
|
||
23. https://gcc.gnu.org/about.html
|
||
24. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.3/index.html
|
||
GCC 4.3 Release Series
|
||
|
||
Jun 27, 2011
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.3.6.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.3.5 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.3.6
|
||
Jun 27, 2011 ([2]changes)
|
||
|
||
GCC 4.3.5
|
||
May 22, 2010 ([3]changes)
|
||
|
||
GCC 4.3.4
|
||
August 4, 2009 ([4]changes)
|
||
|
||
GCC 4.3.3
|
||
January 24, 2009 ([5]changes)
|
||
|
||
GCC 4.3.2
|
||
August 27, 2008 ([6]changes)
|
||
|
||
GCC 4.3.1
|
||
June 6, 2008 ([7]changes)
|
||
|
||
GCC 4.3.0
|
||
March 5, 2008 ([8]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [9]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [10]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [11]GCC
|
||
project web site or contact the [12]GCC development mailing list.
|
||
|
||
To obtain GCC please use [13]our mirror sites or [14]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [15]GCC manuals. If that fails, the
|
||
[16]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [17]gcc@gcc.gnu.org. All of [18]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [19]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [20]maintained by the GCC team. Last modified
|
||
2018-09-30[21].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
3. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
4. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
5. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
6. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
7. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
8. http://gcc.gnu.org/gcc-4.3/changes.html
|
||
9. http://gcc.gnu.org/gcc-4.3/buildstat.html
|
||
10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
11. http://gcc.gnu.org/index.html
|
||
12. mailto:gcc@gcc.gnu.org
|
||
13. http://gcc.gnu.org/mirrors.html
|
||
14. http://gcc.gnu.org/svn.html
|
||
15. https://gcc.gnu.org/onlinedocs/
|
||
16. mailto:gcc-help@gcc.gnu.org
|
||
17. mailto:gcc@gcc.gnu.org
|
||
18. https://gcc.gnu.org/lists.html
|
||
19. https://www.fsf.org/
|
||
20. https://gcc.gnu.org/about.html
|
||
21. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.3/changes.html
|
||
GCC 4.3 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 4.3 release series is [1]GCC 4.3.5.
|
||
|
||
Caveats
|
||
|
||
* GCC requires the [2]GMP and [3]MPFR libraries for building all the
|
||
various front-end languages it supports. See the [4]prerequisites
|
||
page for version requirements.
|
||
* ColdFire targets now treat long double as having the same format as
|
||
double. In earlier versions of GCC, they used the 68881 long double
|
||
format instead.
|
||
* The m68k-uclinux target now uses the same calling conventions as
|
||
m68k-linux-gnu. You can select the original calling conventions by
|
||
configuring for m68k-uclinuxoldabi instead. Note that
|
||
m68k-uclinuxoldabi also retains the original 80-bit long double on
|
||
ColdFire targets.
|
||
* The -fforce-mem option has been removed because it has had no
|
||
effect in the last few GCC releases.
|
||
* The i386 -msvr3-shlib option has been removed since it is no longer
|
||
used.
|
||
* Fastcall for i386 has been changed not to pass aggregate arguments
|
||
in registers, following Microsoft compilers.
|
||
* Support for the AOF assembler has been removed from the ARM back
|
||
end; this affects only the targets arm-semi-aof and armel-semi-aof,
|
||
which are no longer recognized. We removed these targets without a
|
||
deprecation period because we discovered that they have been
|
||
unusable since GCC 4.0.0.
|
||
* Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*)
|
||
has been removed. This support had been deprecated since GCC 4.0.0.
|
||
* Support for a number of older systems and recently unmaintained or
|
||
untested target ports of GCC has been declared obsolete in GCC 4.3.
|
||
Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
All GCC ports for the following processor architectures have been
|
||
declared obsolete:
|
||
+ Morpho MT (mt-*)
|
||
The following aliases for processor architectures have been
|
||
declared obsolete. Users should use the indicated generic target
|
||
names instead, with compile-time options such as -mcpu or
|
||
configure-time options such as --with-cpu to control the
|
||
configuration more precisely.
|
||
+ strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-*
|
||
instead).
|
||
+ parisc*-*-* (use hppa*-*-* instead).
|
||
+ m680[012]0-*-* (use m68k-*-* instead).
|
||
All GCC ports for the following operating systems have been
|
||
declared obsolete:
|
||
+ BeOS (*-*-beos*)
|
||
+ kaOS (*-*-kaos*)
|
||
+ GNU/Linux using the a.out object format (*-*-linux*aout*)
|
||
+ GNU/Linux using version 1 of the GNU C Library
|
||
(*-*-linux*libc1*)
|
||
+ Solaris versions before Solaris 7 (*-*-solaris2.[0-6],
|
||
*-*-solaris2.[0-6].*)
|
||
+ Miscellaneous System V (*-*-sysv*)
|
||
+ WindISS (*-*-windiss*)
|
||
Also, those for some individual systems on particular architectures
|
||
have been obsoleted:
|
||
+ UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*)
|
||
+ CRIS with a.out object format (cris-*-aout)
|
||
+ BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
|
||
+ OSF/1 on PA-RISC (hppa1.1-*-osf*)
|
||
+ PRO on PA-RISC (hppa1.1-*-pro*)
|
||
+ Sequent PTX on IA32 (i[34567]86-sequent-ptx4*,
|
||
i[34567]86-sequent-sysv4*)
|
||
+ SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*)
|
||
+ UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host
|
||
was previously [5]removed in 2001, leaving only the support
|
||
for UWIN as a target now being deprecated)
|
||
+ ChorusOS on PowerPC (powerpc-*-chorusos*)
|
||
+ All VAX configurations apart from NetBSD and OpenBSD
|
||
(vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*)
|
||
* The [6]-Wconversion option has been modified. Its purpose now is to
|
||
warn for implicit conversions that may alter a value. This new
|
||
behavior is available for both C and C++. Warnings about
|
||
conversions between signed and unsigned integers can be disabled by
|
||
using -Wno-sign-conversion. In C++, they are disabled by default
|
||
unless -Wsign-conversion is explicitly requested. The old behavior
|
||
of -Wconversion, that is, warn for prototypes causing a type
|
||
conversion that is different from what would happen to the same
|
||
argument in the absence of a prototype, has been moved to a new
|
||
option -Wtraditional-conversion, which is only available for C.
|
||
* The -m386, -m486, -mpentium and -mpentiumpro tuning options have
|
||
been removed because they were deprecated for more than 3 GCC major
|
||
releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or
|
||
-mtune=pentiumpro as a replacement.
|
||
* The -funsafe-math-optimizations option now automatically turns on
|
||
-fno-trapping-math in addition to -fno-signed-zeros, as it enables
|
||
reassociation and thus may introduce or remove traps.
|
||
* The -ftree-vectorize option is now on by default under -O3. In
|
||
order to generate code for a SIMD extension, it has to be enabled
|
||
as well: use -maltivec for PowerPC platforms and -msse/-msse2 for
|
||
i?86 and x86_64.
|
||
* More information on porting to GCC 4.3 from previous versions of
|
||
GCC can be found in the [7]porting guide for this release.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* The GCC middle-end has been integrated with the MPFR library. This
|
||
allows GCC to evaluate and replace at compile-time calls to
|
||
built-in math functions having constant arguments with their
|
||
mathematically equivalent results. In making use of MPFR, GCC can
|
||
generate correct results regardless of the math library
|
||
implementation or floating point precision of the host platform.
|
||
This also allows GCC to generate identical results regardless of
|
||
whether one compiles in native or cross-compile configurations to a
|
||
particular target. The following built-in functions take advantage
|
||
of this new capability: acos, acosh, asin, asinh, atan2, atan,
|
||
atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1,
|
||
fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10,
|
||
log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh,
|
||
tan, tanh, tgamma, y0, y1 and yn. The float and long double
|
||
variants of these functions (e.g. sinf and sinl) are also handled.
|
||
The sqrt and cabs functions with constant arguments were already
|
||
optimized in prior GCC releases. Now they also use MPFR.
|
||
* A new forward propagation pass on RTL was added. The new pass
|
||
replaces several slower transformations, resulting in compile-time
|
||
improvements as well as better code generation in some cases.
|
||
* A new command-line switch -frecord-gcc-switches has been added to
|
||
GCC, although it is only enabled for some targets. The switch
|
||
causes the command line that was used to invoke the compiler to be
|
||
recorded into the object file that is being created. The exact
|
||
format of this recording is target and binary file format
|
||
dependent, but it usually takes the form of a note section
|
||
containing ASCII text. The switch is related to the -fverbose-asm
|
||
switch, but that one only records the information in the assembler
|
||
output file as comments, so the information never reaches the
|
||
object file.
|
||
* The inliner heuristic is now aware of stack frame consumption. New
|
||
command-line parameters --param large-stack-frame and --param
|
||
large-stack-frame-growth can be used to limit stack frame size
|
||
growth caused by inlining.
|
||
* During feedback directed optimizations, the expected block size the
|
||
memcpy, memset and bzero functions operate on is discovered and for
|
||
cases of commonly used small sizes, specialized inline code is
|
||
generated.
|
||
* __builtin_expect no longer requires its argument to be a compile
|
||
time constant.
|
||
* Interprocedural optimization was reorganized to work on functions
|
||
in SSA form. This enables more precise and cheaper dataflow
|
||
analysis and makes writing interprocedural optimizations easier.
|
||
The following improvements have been implemented on top of this
|
||
framework:
|
||
+ Pre-inline optimization: Selected local optimization passes
|
||
are run before the inliner (and other interprocedural passes)
|
||
are executed. This significantly improves the accuracy of code
|
||
growth estimates used by the inliner and reduces the overall
|
||
memory footprint for large compilation units.
|
||
+ Early inlining (a simple bottom-up inliner pass inlining only
|
||
functions whose body is smaller than the expected call
|
||
overhead) is now executed with the early optimization passes,
|
||
thus inlining already optimized function bodies into an
|
||
unoptimized function that is subsequently optimized by early
|
||
optimizers. This enables the compiler to quickly eliminate
|
||
abstraction penalty in C++ programs.
|
||
+ Interprocedural constant propagation now operate on SSA form
|
||
increasing accuracy of the analysis.
|
||
* A new internal representation for GIMPLE statements has been
|
||
contributed, resulting in compile-time memory savings.
|
||
* The vectorizer was enhanced to support vectorization of outer
|
||
loops, intra-iteration parallelism (loop-aware SLP), vectorization
|
||
of strided accesses and loops with multiple data-types. Run-time
|
||
dependency testing using loop versioning was added. The cost model,
|
||
turned on by -fvect-cost-model, was developed.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* We have added new command-line options
|
||
-finstrument-functions-exclude-function-list and
|
||
-finstrument-functions-exclude-file-list. They provide more control
|
||
over which functions are annotated by the -finstrument-functions
|
||
option.
|
||
|
||
C family
|
||
|
||
* Implicit conversions between generic vector types are now only
|
||
permitted when the two vectors in question have the same number of
|
||
elements and compatible element types. (Note that the restriction
|
||
involves compatible element types, not implicitly-convertible
|
||
element types: thus, a vector type with element type int may not be
|
||
implicitly converted to a vector type with element type unsigned
|
||
int.) This restriction, which is in line with specifications for
|
||
SIMD architectures such as AltiVec, may be relaxed using the flag
|
||
-flax-vector-conversions. This flag is intended only as a
|
||
compatibility measure and should not be used for new code.
|
||
* -Warray-bounds has been added and is now enabled by default for
|
||
-Wall . It produces warnings for array subscripts that can be
|
||
determined at compile time to be always out of bounds.
|
||
-Wno-array-bounds will disable the warning.
|
||
* The constructor and destructor function attributes now accept
|
||
optional priority arguments which control the order in which the
|
||
constructor and destructor functions are run.
|
||
* New [8]command-line options -Wtype-limits, -Wold-style-declaration,
|
||
-Wmissing-parameter-type, -Wempty-body, -Wclobbered and
|
||
-Wignored-qualifiers have been added for finer control of the
|
||
diverse warnings enabled by -Wextra.
|
||
* A new function attribute alloc_size has been added to mark up
|
||
malloc style functions. For constant sized allocations this can be
|
||
used to find out the size of the returned pointer using the
|
||
__builtin_object_size() function for buffer overflow checking and
|
||
similar. This supplements the already built-in malloc and calloc
|
||
constant size handling.
|
||
* Integer constants written in binary are now supported as a GCC
|
||
extension. They consist of a prefix 0b or 0B, followed by a
|
||
sequence of 0 and 1 digits.
|
||
* A new predefined macro __COUNTER__ has been added. It expands to
|
||
sequential integral values starting from 0. In conjunction with the
|
||
## operator, this provides a convenient means to generate unique
|
||
identifiers.
|
||
* A new command-line option -fdirectives-only has been added. It
|
||
enables a special preprocessing mode which improves the performance
|
||
of applications like distcc and ccache.
|
||
* Fixed-point data types and operators have been added. They are
|
||
based on Chapter 4 of the Embedded-C specification (n1169.pdf).
|
||
Currently, only MIPS targets are supported.
|
||
* Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
|
||
N1241, is now supported as a GCC extension to C for targets
|
||
i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu,
|
||
and x86_64-*-linux-gnu. The feature introduces new data types
|
||
_Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF,
|
||
DD, and DL.
|
||
|
||
C++
|
||
|
||
* [9]Experimental support for the upcoming ISO C++ standard, C++0x.
|
||
* -Wc++0x-compat has been added and is now enabled by default for
|
||
-Wall. It produces warnings for constructs whose meaning differs
|
||
between ISO C++ 1998 and C++0x.
|
||
* The -Wparentheses option now works for C++ as it does for C. It
|
||
warns if parentheses are omitted when operators with confusing
|
||
precedence are nested. It also warns about ambiguous else
|
||
statements. Since -Wparentheses is enabled by -Wall, this may cause
|
||
additional warnings with existing C++ code which uses -Wall. These
|
||
new warnings may be disabled by using -Wall -Wno-parentheses.
|
||
* The -Wmissing-declarations now works for C++ as it does for C.
|
||
* The -fvisibility-ms-compat flag was added, to make it easier to
|
||
port larger projects using shared libraries from Microsoft's Visual
|
||
Studio to ELF and Mach-O systems.
|
||
* C++ attribute handling has been overhauled for template arguments
|
||
(ie dependent types). In particular, __attribute__((aligned(T)));
|
||
works for C++ types.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* [10]Experimental support for the upcoming ISO C++ standard, C++0x.
|
||
* Support for TR1 mathematical special functions and regular
|
||
expressions.
|
||
* Default what implementations give more elaborate exception strings
|
||
for bad_cast, bad_typeid, bad_exception, and bad_alloc.
|
||
* Header dependencies have been streamlined, reducing unnecessary
|
||
includes and pre-processed bloat.
|
||
* Variadic template implementations of items in <tuple> and
|
||
<functional>.
|
||
* An experimental [11]parallel mode has been added. This is a
|
||
parallel implementation of many C++ Standard library algorithms,
|
||
like std::accumulate, std::for_each, std::transform, or std::sort,
|
||
to give but four examples. These algorithms can be substituted for
|
||
the normal (sequential) libstdc++ algorithms on a piecemeal basis,
|
||
or all existing algorithms can be transformed via the
|
||
-D_GLIBCXX_PARALLEL macro.
|
||
* Debug mode versions of classes in <unordered_set> and
|
||
<unordered_map>.
|
||
* Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are
|
||
now <backward/hash_set> and <backward/hash_map>. This code:
|
||
#include <ext/hash_set>
|
||
__gnu_cxx::hash_set<int> s;
|
||
|
||
Can be transformed (in order of preference) to:
|
||
#include <tr1/unordered_set>
|
||
std::tr1::unordered_set<int> s;
|
||
|
||
or
|
||
#include <backward/hash_set>
|
||
__gnu_cxx::hash_set<int> s;
|
||
|
||
Similar transformations apply to __gnu_cxx::hash_map,
|
||
__gnu_cxx::hash_multimap, __gnu_cxx::hash_set,
|
||
__gnu_cxx::hash_multiset.
|
||
|
||
Fortran
|
||
|
||
* Due to the fact that the GMP and MPFR libraries are required for
|
||
all languages, Fortran is no longer special in this regard and is
|
||
available by default.
|
||
* The [12]-fexternal-blas option has been added, which generates
|
||
calls to BLAS routines for intrinsic matrix operations such as
|
||
matmul rather than using the built-in algorithms.
|
||
* Support to give a backtrace (compiler flag -fbacktrace or
|
||
environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems
|
||
only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a
|
||
run-time error occured.
|
||
* GNU Fortran now defines __GFORTRAN__ when it runs the C
|
||
preprocessor (CPP).
|
||
* The [13]-finit-local-zero, -finit-real, -finit-integer,
|
||
-finit-character, and -finit-logical options have been added, which
|
||
can be used to initialize local variables.
|
||
* The intrinsic procedures [14]GAMMA and [15]LGAMMA have been added,
|
||
which calculate the Gamma function and its logarithm. Use EXTERNAL
|
||
gamma if you want to use your own gamma function.
|
||
* GNU Fortran now regards the backslash character as literal (as
|
||
required by the Fortran 2003 standard); using [16]-fbackslash GNU
|
||
Fortran interprets backslashes as C-style escape characters.
|
||
* The [17]interpretation of binary, octal and hexadecimal (BOZ)
|
||
literal constants has been changed. Before they were always
|
||
interpreted as integer; now they are bit-wise transferred as
|
||
argument of INT, REAL, DBLE and CMPLX as required by the Fortran
|
||
2003 standard, and for real and complex variables in DATA
|
||
statements or when directly assigned to real and complex variables.
|
||
Everywhere else and especially in expressions they are still
|
||
regarded as integer constants.
|
||
* Fortran 2003 support has been extended:
|
||
+ Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
|
||
+ Pointer intent
|
||
+ Intrinsic module ISO_ENV_FORTRAN
|
||
+ Interoperability with C (ISO C Bindings)
|
||
+ ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
|
||
attribute)
|
||
+ Fortran 2003 BOZ
|
||
|
||
Java (GCJ)
|
||
|
||
* GCJ now uses the Eclipse Java compiler for its Java parsing needs.
|
||
This enables the use of all 1.5 language features, and fixes most
|
||
existing front end bugs.
|
||
* libgcj now supports all 1.5 language features which require runtime
|
||
support: foreach, enum, annotations, generics, and auto-boxing.
|
||
* We've made many changes to the tools shipped with gcj.
|
||
+ The old jv-scan tool has been removed. This tool never really
|
||
worked properly. There is no replacement.
|
||
+ gcjh has been rewritten. Some of its more obscure options no
|
||
longer work, but are still recognized in an attempt at
|
||
compatibility. gjavah is a new program with similar
|
||
functionality but different command-line options.
|
||
+ grmic and grmiregistry have been rewritten. grmid has been
|
||
added.
|
||
+ gjar replaces the old fastjar.
|
||
+ gjarsigner (used for signing jars), gkeytool (used for key
|
||
management), gorbd (for CORBA), gserialver (computes
|
||
serialization UIDs), and gtnameserv (also for CORBA) are now
|
||
installed.
|
||
* The ability to dump the contents of the java run time heap to a
|
||
file for off-line analysis has been added. The heap dumps may be
|
||
analyzed with the new gc-analyze tool. They may be generated on
|
||
out-of-memory conditions or on demand and are controlled by the new
|
||
run time class gnu.gcj.util.GCInfo.
|
||
* java.util.TimeZone can now read files from /usr/share/zoneinfo to
|
||
provide correct, updated, timezone information. This means that
|
||
packagers no longer have to update libgcj when a time zone change
|
||
is published.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
IA-32/x86-64
|
||
|
||
* Tuning for Intel Core 2 processors is available via -mtune=core2
|
||
and -march=core2.
|
||
* Tuning for AMD Geode processors is available via -mtune=geode and
|
||
-march=geode.
|
||
* Code generation of block move (memcpy) and block set (memset) was
|
||
rewritten. GCC can now pick the best algorithm (loop, unrolled
|
||
loop, instruction with rep prefix or a library call) based on the
|
||
size of the block being copied and the CPU being optimized for. A
|
||
new option -minline-stringops-dynamically has been added. With this
|
||
option string operations of unknown size are expanded such that
|
||
small blocks are copied by in-line code, while for large blocks a
|
||
library call is used. This results in faster code than
|
||
-minline-all-stringops when the library implementation is capable
|
||
of using cache hierarchy hints. The heuristic choosing the
|
||
particular algorithm can be overwritten via -mstringop-strategy.
|
||
Newly also memset of values different from 0 is inlined.
|
||
* GCC no longer places the cld instruction before string operations.
|
||
Both i386 and x86-64 ABI documents mandate the direction flag to be
|
||
clear at the entry of a function. It is now invalid to set the flag
|
||
in asm statement without reseting it afterward.
|
||
* Support for SSSE3 built-in functions and code generation are
|
||
available via -mssse3.
|
||
* Support for SSE4.1 built-in functions and code generation are
|
||
available via -msse4.1.
|
||
* Support for SSE4.2 built-in functions and code generation are
|
||
available via -msse4.2.
|
||
* Both SSE4.1 and SSE4.2 support can be enabled via -msse4.
|
||
* A new set of options -mpc32, -mpc64 and -mpc80 have been added to
|
||
allow explicit control of x87 floating point precision.
|
||
* Support for __float128 (TFmode) IEEE quad type and corresponding
|
||
TCmode IEEE complex quad type is available via the soft-fp library
|
||
on x86_64 targets. This includes basic arithmetic operations
|
||
(addition, subtraction, negation, multiplication and division) on
|
||
__float128 real and TCmode complex values, the full set of IEEE
|
||
comparisons between __float128 values, conversions to and from
|
||
float, double and long double floating point types, as well as
|
||
conversions to and from signed or unsigned integer, signed or
|
||
unsigned long integer and signed or unsigned quad (TImode) integer
|
||
types. Additionally, all operations generate the full set of IEEE
|
||
exceptions and support the full set of IEEE rounding modes.
|
||
* GCC can now utilize the ACML library for vectorizing calls to a set
|
||
of C99 functions on x86_64 if -mveclibabi=acml is specified and you
|
||
link to an ACML ABI compatible library.
|
||
|
||
ARM
|
||
|
||
* Compiler and Library support for Thumb-2 and the ARMv7 architecture
|
||
has been added.
|
||
|
||
CRIS
|
||
|
||
New features
|
||
|
||
* Compiler and Library support for the CRIS v32 architecture, as
|
||
found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been
|
||
added.
|
||
|
||
Configuration changes
|
||
|
||
* The cris-*-elf target now includes support for CRIS v32, including
|
||
libraries, through the -march=v32 option.
|
||
* A new crisv32-*-elf target defaults to generate code for CRIS v32.
|
||
* A new crisv32-*-linux* target defaults to generate code for CRIS
|
||
v32.
|
||
* The cris-*-aout target has been obsoleted.
|
||
|
||
Improved support for built-in functions
|
||
|
||
* GCC can now use the lz and swapwbr instructions to implement the
|
||
__builtin_clz, __builtin_ctz and __builtin_ffs family of functions.
|
||
* __builtin_bswap32 is now implemented using the swapwb instruction,
|
||
when available.
|
||
|
||
m68k and ColdFire
|
||
|
||
New features
|
||
|
||
* Support for several new ColdFire processors has been added. You can
|
||
generate code for them using the new -mcpu option.
|
||
* All targets now support ColdFire processors.
|
||
* m68k-uclinux targets have improved support for C++ constructors and
|
||
destructors, and for shared libraries.
|
||
* It is now possible to set breakpoints on the first or last line of
|
||
a function, even if there are no statements on that line.
|
||
|
||
Optimizations
|
||
|
||
* Support for sibling calls has been added.
|
||
* More use is now made of the ColdFire mov3q instruction.
|
||
* __builtin_clz is now implemented using the ff1 ColdFire
|
||
instruction, when available.
|
||
* GCC now honors the -m68010 option. 68010 code now uses clr rather
|
||
than move to zero volatile memory.
|
||
* 68020 targets and above can now use symbol(index.size*scale)
|
||
addresses for indexed array accesses. Earlier compilers would
|
||
always load the symbol into a base register first.
|
||
|
||
Configuration changes
|
||
|
||
* All m68k and ColdFire targets now allow the default processor to be
|
||
set at configure time using --with-cpu.
|
||
* A --with-arch configuration option has been added. This option
|
||
allows you to restrict a target to ColdFire or non-ColdFire
|
||
processors.
|
||
|
||
Preprocessor macros
|
||
|
||
* An __mcfv*__ macro is now defined for all ColdFire targets.
|
||
(Earlier versions of GCC only defined __mcfv4e__.)
|
||
* __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added.
|
||
* All targets now define __mc68010 and __mc68010__ when generating
|
||
68010 code.
|
||
|
||
Command-line changes
|
||
|
||
* New command-line options -march, -mcpu, -mtune and -mhard-float
|
||
have been added. These options apply to both m68k and ColdFire
|
||
targets.
|
||
* -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative
|
||
versions of -mshort, etc.
|
||
* -fforce-addr has been removed. It is now ignored by the compiler.
|
||
|
||
Other improvements
|
||
|
||
* ColdFire targets now try to maintain a 4-byte-aligned stack where
|
||
possible.
|
||
* m68k-uclinux targets now try to avoid situations that lead to the
|
||
load-time error: BINFMT_FLAT: reloc outside program.
|
||
|
||
MIPS
|
||
|
||
Changes to existing configurations
|
||
|
||
* libffi and libjava now support all three GNU/Linux ABIs: o32, n32
|
||
and n64. Every GNU/Linux configuration now builds these libraries
|
||
by default.
|
||
* GNU/Linux configurations now generate -mno-shared code unless
|
||
overridden by -fpic, -fPIC, -fpie or -fPIE.
|
||
* mipsisa32*-linux-gnu configurations now generate hard-float code by
|
||
default, just like other mipsisa32* and mips*-linux-gnu
|
||
configurations. You can build a soft-float version of any
|
||
mips*-linux-gnu configuration by passing --with-float=soft to
|
||
configure.
|
||
* mips-wrs-vxworks now supports run-time processes (RTPs).
|
||
|
||
Changes to existing command-line options
|
||
|
||
* The -march and -mtune options no longer accept 24k as a processor
|
||
name. Please use 24kc, 24kf2_1 or 24kf1_1 instead.
|
||
* The -march and -mtune options now accept 24kf2_1, 24kef2_1 and
|
||
34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The
|
||
options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for
|
||
24kx, 24kex and 34kx.
|
||
|
||
New configurations
|
||
|
||
GCC now supports the following configurations:
|
||
* mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by
|
||
default. Earlier releases also recognized this configuration, but
|
||
they treated it in the same way as mipsisa32*-linux-gnu*. Note that
|
||
you can customize any mips*-linux-gnu* configuration to a
|
||
particular ISA or processor by passing an appropriate --with-arch
|
||
option to configure.
|
||
* mipsisa*-sde-elf*, which provides compatibility with MIPS
|
||
Technologies' SDE toolchains. The configuration uses the SDE
|
||
libraries by default, but you can use it like other newlib-based
|
||
ELF configurations by passing --with-newlib to configure. It is the
|
||
only configuration besides mips64vr*-elf* to build MIPS16 as well
|
||
as non-MIPS16 libraries.
|
||
* mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf*
|
||
configuration, but uses the o32 and o64 ABIs instead of the 32-bit
|
||
and 64-bit forms of the EABI.
|
||
|
||
New processors and application-specific extensions
|
||
|
||
* Support for the SmartMIPS ASE is available through the new
|
||
-msmartmips option.
|
||
* Support for revision 2 of the DSP ASE is available through the new
|
||
-mdspr2 option. A new preprocessor macro called __mips_dsp_rev
|
||
indicates the revision of the ASE in use.
|
||
* Support for the 4KS and 74K families of processors is available
|
||
through the -march and -mtune options.
|
||
|
||
Improved support for built-in functions
|
||
|
||
* GCC can now use load-linked, store-conditional and sync
|
||
instructions to implement atomic built-in functions such as
|
||
__sync_fetch_and_add. The memory reference must be 4 bytes wide for
|
||
32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
|
||
* GCC can now use the clz and dclz instructions to implement the
|
||
__builtin_ctz and __builtin_ffs families of functions.
|
||
* There is a new __builtin___clear_cache function for flushing the
|
||
instruction cache. GCC expands this function inline on MIPS32
|
||
revision 2 targets, otherwise it calls the function specified by
|
||
-mcache-flush-func.
|
||
|
||
MIPS16 improvements
|
||
|
||
* GCC can now compile objects that contain a mixture of MIPS16 and
|
||
non-MIPS16 code. There are two new attributes, mips16 and nomips16,
|
||
for specifying which mode a function should use.
|
||
* A new option called -minterlink-mips16 makes non-MIPS16 code
|
||
link-compatible with MIPS16 code.
|
||
* After many bug fixes, the long-standing MIPS16 -mhard-float support
|
||
should now work fairly reliably.
|
||
* GCC can now use the MIPS16e save and restore instructions.
|
||
* -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled
|
||
with -G0 -fsection-anchors is often smaller than code compiled with
|
||
-G8. However, please note that you must usually compile all objects
|
||
in your application with the same -G option; see the documentation
|
||
of -G for details.
|
||
* A new option called-mcode-readable specifies which instructions are
|
||
allowed to load from the code segment. -mcode-readable=yes is the
|
||
default and says that any instruction may load from the code
|
||
segment. The other alternatives are -mcode-readable=pcrel, which
|
||
says that only PC-relative MIPS16 instructions may load from the
|
||
code segment, and -mcode-readable=no, which says that no
|
||
instruction may do so. Please see the documentation for more
|
||
details, including example uses.
|
||
|
||
Small-data improvements
|
||
|
||
There are three new options for controlling small data:
|
||
* -mno-extern-sdata, which disables small-data accesses for
|
||
externally-defined variables. Code compiled with -Gn
|
||
-mno-extern-sdata will be link-compatible with any -G setting
|
||
between -G0 and -Gn inclusive.
|
||
* -mno-local-sdata, which disables the use of small-data sections for
|
||
data that is not externally visible. This option can be a useful
|
||
way of reducing small-data usage in less performance-critical parts
|
||
of an application.
|
||
* -mno-gpopt, which disables the use of the $gp register while still
|
||
honoring the -G limit when placing externally-visible data. This
|
||
option implies -mno-extern-sdata and -mno-local-sdata and it can be
|
||
useful in situations where $gp does not necessarily hold the
|
||
expected value.
|
||
|
||
Miscellaneous improvements
|
||
|
||
* There is a new option called -mbranch-cost for tweaking the
|
||
perceived cost of branches.
|
||
* If GCC is configured to use a version of GAS that supports the
|
||
.gnu_attribute directive, it will use that directive to record
|
||
certain properties of the output code. .gnu_attribute is new to GAS
|
||
2.18.
|
||
* There are two new function attributes, near and far, for overriding
|
||
the command-line setting of -mlong-calls on a function-by-function
|
||
basis.
|
||
* -mfp64, which previously required a 64-bit target, now works with
|
||
MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and
|
||
mipsisa*-sde-elf* configurations provide suitable library support.
|
||
* GCC now recognizes the -mdmx and -mmt options and passes them down
|
||
to the assembler. It does nothing else with the options at present.
|
||
|
||
SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture
|
||
(BEA)
|
||
|
||
* Support has been added for this new architecture.
|
||
|
||
RS6000 (POWER/PowerPC)
|
||
|
||
* Support for the PowerPC 750CL paired-single instructions has been
|
||
added with a new powerpc-*-linux*paired* target configuration. It
|
||
is enabled by an associated -mpaired option and can be accessed
|
||
using new built-in functions.
|
||
* Support for auto-detecting architecture and system configuration to
|
||
auto-select processor optimization tuning.
|
||
* Support for VMX on AIX 5.3 has been added.
|
||
* Support for AIX Version 6.1 has been added.
|
||
|
||
S/390, zSeries and System z9
|
||
|
||
* Support for the IBM System z9 EC/BC processor (z9 GA3) has been
|
||
added. When using the -march=z9-ec option, the compiler will
|
||
generate code making use of instructions provided by the decimal
|
||
floating point facility and the floating point conversion facility
|
||
(pfpo). Besides the instructions used to implement decimal floating
|
||
point operations these facilities also contain instructions to move
|
||
between general purpose and floating point registers and to modify
|
||
and copy the sign-bit of floating point values.
|
||
* When the -march=z9-ec option is used the new
|
||
-mhard-dfp/-mno-hard-dfp options can be used to specify whether the
|
||
decimal floating point hardware instructions will be used or not.
|
||
If none of them is given the hardware support is enabled by
|
||
default.
|
||
* The -mstack-guard option can now be omitted when using stack
|
||
checking via -mstack-size in order to let GCC choose a sensible
|
||
stack guard value according to the frame size of each function.
|
||
* Various changes to improve performance of generated code have been
|
||
implemented, including:
|
||
+ The condition code set by an add logical with carry
|
||
instruction is now available for overflow checks like: a + b +
|
||
carry < b.
|
||
+ The test data class instruction is now used to implement
|
||
sign-bit and infinity checks of binary and decimal floating
|
||
point numbers.
|
||
|
||
SPARC
|
||
|
||
* Support for the Sun UltraSPARC T2 (Niagara 2) processor has been
|
||
added.
|
||
|
||
Xtensa
|
||
|
||
* Stack unwinding for exception handling now uses by default a
|
||
specialized version of DWARF unwinding. This is not
|
||
binary-compatible with the setjmp/longjmp (sjlj) unwinding used for
|
||
Xtensa with previous versions of GCC.
|
||
* For Xtensa processors that include the Conditional Store option,
|
||
the built-in functions for atomic memory access are now implemented
|
||
using S32C1I instructions.
|
||
* If the Xtensa NSA option is available, GCC will use it to implement
|
||
the __builtin_ctz and __builtin_clz functions.
|
||
|
||
Documentation improvements
|
||
|
||
* Existing libstdc++ documentation has been edited and restructured
|
||
into a single DocBook XML manual. The results can be viewed online
|
||
[18]here.
|
||
|
||
Other significant improvements
|
||
|
||
* The compiler's --help command-line option has been extended so that
|
||
it now takes an optional set of arguments. These arguments restrict
|
||
the information displayed to specific classes of command-line
|
||
options, and possibly only a subset of those options. It is also
|
||
now possible to replace the descriptive text associated with each
|
||
displayed option with an indication of its current value, or for
|
||
binary options, whether it has been enabled or disabled.
|
||
Here are some examples. The following will display all the options
|
||
controlling warning messages:
|
||
--help=warnings
|
||
|
||
Whereas this will display all the undocumented, target specific
|
||
options:
|
||
--help=target,undocumented
|
||
|
||
This sequence of commands will display the binary optimizations
|
||
that are enabled by -O3:
|
||
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
|
||
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
|
||
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
|
||
|
||
* The configure options --with-pkgversion and --with-bugurl have been
|
||
added. These allow distributors of GCC to include a
|
||
distributor-specific string in manuals and --version output and to
|
||
specify the URL for reporting bugs in their versions of GCC.
|
||
|
||
GCC 4.3.1
|
||
|
||
This is the [19]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Target Specific Changes
|
||
|
||
IA-32/x86-64
|
||
|
||
ABI changes
|
||
|
||
* Starting with GCC 4.3.1, decimal floating point variables are
|
||
aligned to their natural boundaries when they are passed on the
|
||
stack for i386.
|
||
|
||
Command-line changes
|
||
|
||
* Starting with GCC 4.3.1, the -mcld option has been added to
|
||
automatically generate a cld instruction in the prologue of
|
||
functions that use string instructions. This option is used for
|
||
backward compatibility on some operating systems and can be enabled
|
||
by default for 32-bit x86 targets by configuring GCC with the
|
||
--enable-cld configure option.
|
||
|
||
GCC 4.3.2
|
||
|
||
This is the [20]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.3.3
|
||
|
||
This is the [21]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.3.4
|
||
|
||
This is the [22]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.3.5
|
||
|
||
This is the [23]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.3.6
|
||
|
||
This is the [24]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.3.6 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [25]GCC manuals. If that fails, the
|
||
[26]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [27]gcc@gcc.gnu.org. All of [28]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [29]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [30]maintained by the GCC team. Last modified
|
||
2018-09-30[31].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
|
||
2. https://gmplib.org/
|
||
3. https://www.mpfr.org/
|
||
4. https://gcc.gnu.org/install/prerequisites.html
|
||
5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
|
||
6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
|
||
7. http://gcc.gnu.org/gcc-4.3/porting_to.html
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||
9. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
|
||
10. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
|
||
11. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
|
||
12. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
|
||
13. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
|
||
16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
|
||
17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
|
||
18. https://gcc.gnu.org/onlinedocs/libstdc++/
|
||
19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
|
||
20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
|
||
21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
|
||
22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
|
||
23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
|
||
24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
|
||
25. https://gcc.gnu.org/onlinedocs/
|
||
26. mailto:gcc-help@gcc.gnu.org
|
||
27. mailto:gcc@gcc.gnu.org
|
||
28. https://gcc.gnu.org/lists.html
|
||
29. https://www.fsf.org/
|
||
30. https://gcc.gnu.org/about.html
|
||
31. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.2/index.html
|
||
GCC 4.2 Release Series
|
||
|
||
May 19, 2008
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.2.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.2.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.2.4
|
||
May 19, 2008 ([2]changes)
|
||
|
||
GCC 4.2.3
|
||
February 1, 2008 ([3]changes)
|
||
|
||
GCC 4.2.2
|
||
October 7, 2007 ([4]changes)
|
||
|
||
GCC 4.2.1
|
||
July 18, 2007 ([5]changes)
|
||
|
||
GCC 4.2.0
|
||
May 13, 2007 ([6]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [7]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [8]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [9]GCC project
|
||
web site or contact the [10]GCC development mailing list.
|
||
|
||
To obtain GCC please use [11]our mirror sites or [12]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [13]GCC manuals. If that fails, the
|
||
[14]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [15]gcc@gcc.gnu.org. All of [16]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [18]maintained by the GCC team. Last modified
|
||
2018-09-30[19].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.2/changes.html
|
||
3. http://gcc.gnu.org/gcc-4.2/changes.html
|
||
4. http://gcc.gnu.org/gcc-4.2/changes.html
|
||
5. http://gcc.gnu.org/gcc-4.2/changes.html
|
||
6. http://gcc.gnu.org/gcc-4.2/changes.html
|
||
7. http://gcc.gnu.org/gcc-4.2/buildstat.html
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
9. http://gcc.gnu.org/index.html
|
||
10. mailto:gcc@gcc.gnu.org
|
||
11. http://gcc.gnu.org/mirrors.html
|
||
12. http://gcc.gnu.org/svn.html
|
||
13. https://gcc.gnu.org/onlinedocs/
|
||
14. mailto:gcc-help@gcc.gnu.org
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. https://gcc.gnu.org/lists.html
|
||
17. https://www.fsf.org/
|
||
18. https://gcc.gnu.org/about.html
|
||
19. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.2/changes.html
|
||
GCC 4.2 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Caveats
|
||
|
||
* GCC no longer accepts the -fshared-data option. This option has had
|
||
no effect in any GCC 4 release; the targets to which the option
|
||
used to apply had been removed before GCC 4.0.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* New command-line options specify the possible relationships among
|
||
parameters and between parameters and global data. For example,
|
||
-fargument-noalias-anything specifies that arguments do not alias
|
||
any other storage.
|
||
Each language will automatically use whatever option is required by
|
||
the language standard. You should not need to use these options
|
||
yourself.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* [1]OpenMP is now supported for the C, C++ and Fortran compilers.
|
||
* New command-line options -fstrict-overflow and -Wstrict-overflow
|
||
have been added. -fstrict-overflow tells the compiler that it may
|
||
assume that the program follows the strict signed overflow
|
||
semantics permitted for the language: for C and C++ this means that
|
||
the compiler may assume that signed overflow does not occur. For
|
||
example, a loop like
|
||
for (i = 1; i > 0; i *= 2)
|
||
|
||
is presumably intended to continue looping until i overflows. With
|
||
-fstrict-overflow, the compiler may assume that signed overflow
|
||
will not occur, and transform this into an infinite loop.
|
||
-fstrict-overflow is turned on by default at -O2, and may be
|
||
disabled via -fno-strict-overflow. The -Wstrict-overflow option may
|
||
be used to warn about cases where the compiler assumes that signed
|
||
overflow will not occur. It takes five different levels:
|
||
-Wstrict-overflow=1 to 5. See the [2]documentation for details.
|
||
-Wstrict-overflow=1 is enabled by -Wall.
|
||
* The new command-line option -fno-toplevel-reorder directs GCC to
|
||
emit top-level functions, variables, and asm statements in the same
|
||
order that they appear in the input file. This is intended to
|
||
support existing code which relies on a particular ordering (for
|
||
example, code which uses top-level asm statements to switch
|
||
sections). For new code, it is generally better to use function and
|
||
variable attributes. The -fno-toplevel-reorder option may be used
|
||
for most cases which currently use -fno-unit-at-a-time. The
|
||
-fno-unit-at-a-time option will be removed in some future version
|
||
of GCC. If you know of a case which requires -fno-unit-at-a-time
|
||
which is not fixed by -fno-toplevel-reorder, please open a bug
|
||
report.
|
||
|
||
C family
|
||
|
||
* The pragma redefine_extname will now macro expand its tokens for
|
||
compatibility with SunPRO.
|
||
* In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct
|
||
GCC to handle inline functions as specified in the C99 standard. In
|
||
preparation for this, GCC 4.2 will warn about any use of non-static
|
||
inline functions in gnu99 or c99 mode. This new warning may be
|
||
disabled with the new gnu_inline function attribute or the new
|
||
-fgnu89-inline command-line option. Also, GCC 4.2 and later will
|
||
define one of the preprocessor macros __GNUC_GNU_INLINE__ or
|
||
__GNUC_STDC_INLINE__ to indicate the semantics of inline functions
|
||
in the current compilation.
|
||
* A new command-line option -Waddress has been added to warn about
|
||
suspicious uses of memory addresses as, for example, using the
|
||
address of a function in a conditional expression, and comparisons
|
||
against the memory address of a string literal. This warning is
|
||
enabled by -Wall.
|
||
|
||
C++
|
||
|
||
* C++ visibility handling has been overhauled.
|
||
Restricted visiblity is propagated from classes to members, from
|
||
functions to local statics, and from templates and template
|
||
arguments to instantiations, unless the latter has explicitly
|
||
declared visibility.
|
||
The visibility attribute for a class must come between the
|
||
class-key and the name, not after the closing brace.
|
||
Attributes are now allowed for enums and elaborated-type-specifiers
|
||
that only declare a type.
|
||
Members of the anonymous namespace are now local to a particular
|
||
translation unit, along with any other declarations which use them,
|
||
though they are still treated as having external linkage for
|
||
language semantics.
|
||
* The (undocumented) extension which permitted templates with default
|
||
arguments to be bound to template template parameters with fewer
|
||
parameters has been removed. For example:
|
||
template <template <typename> class C>
|
||
void f(C<double>) {}
|
||
|
||
template <typename T, typename U = int>
|
||
struct S {};
|
||
|
||
template void f(S<double>);
|
||
|
||
is no longer accepted by G++. The reason this code is not accepted
|
||
is that S is a template with two parameters; therefore, it cannot
|
||
be bound to C which has only one parameter.
|
||
* The <?, >?, <?=, and >?= operators, deprecated in previous GCC
|
||
releases, have been removed.
|
||
* The command-line option -fconst-strings, deprecated in previous GCC
|
||
releases, has been removed.
|
||
* The configure variable enable-__cxa_atexit is now enabled by
|
||
default for more targets. Enabling this variable is necessary in
|
||
order for static destructors to be executed in the correct order,
|
||
but it depends upon the presence of a non-standard C library in the
|
||
target library in order to work. The variable is now enabled for
|
||
more targets which are known to have suitable C libraries.
|
||
* -Wextra will produce warnings for if statements with a semicolon as
|
||
the only body, to catch code like:
|
||
if (a);
|
||
return 1;
|
||
return 0;
|
||
|
||
To suppress the warning in valid cases, use { } instead.
|
||
* The C++ front end now also produces strict aliasing warnings when
|
||
-fstrict-aliasing -Wstrict-aliasing is in effect.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Added support for TR1 <random>, <complex>, and C compatibility
|
||
headers. In addition, a lock-free version of shared_ptr was
|
||
contributed as part of Phillip Jordan's Google Summer of Code
|
||
project on lock-free containers.
|
||
* In association with the Summer of Code work on lock-free
|
||
containers, the interface for atomic builtins was adjusted,
|
||
creating simpler alternatives for non-threaded code paths. Also,
|
||
usage was consolidated and all elements were moved from namespace
|
||
std to namespace__gnu_cxx. Affected interfaces are the functions
|
||
__exchange_and_add, __atomic_add, and the objects __mutex,
|
||
__recursive_mutex, and __scoped_lock.
|
||
* Support for versioning weak symbol names via namespace association
|
||
was added. However, as this changes the names of exported symbols,
|
||
this is turned off by default in the current ABI. Intrepid users
|
||
can enable this feature by using
|
||
--enable-symvers=gnu-versioned-namespace during configuration.
|
||
* Revised, simplified, and expanded policy-based associative
|
||
containers, including data types for tree and trie forms
|
||
(basic_tree, tree, trie), lists (list_update), and both
|
||
collision-chaining and probing hash-based containers
|
||
(basic_hash_table, cc_hash_table, gp_hash_table). More details per
|
||
the [3]documentation.
|
||
* The implementation of the debug mode was modified, whereby the
|
||
debug namespaces were nested inside of namespace std and namespace
|
||
__gnu_cxx in order to resolve some long standing corner cases
|
||
involving name lookup. Debug functionality from the policy-based
|
||
data structures was consolidated and enabled with the single macro,
|
||
_GLIBCXX_DEBUG. See PR 26142 for more information.
|
||
* Added extensions for type traits: __conditional_type,
|
||
__numeric_traits, __add_unsigned, __removed_unsigned, __enable_if.
|
||
* Added a typelist implementation for compile-time meta-programming.
|
||
Elements for typelist construction and operation can be found
|
||
within namespace __gnu_cxx::typelist.
|
||
* Added a new allocator, __gnu_cxx::throw_allocator, for testing
|
||
exception-safety.
|
||
* Enabled library-wide visibility control, allowing -fvisibility to
|
||
be used.
|
||
* Consolidated all nested namespaces and the conversion of
|
||
__gnu_internal implementation-private details to anonymous
|
||
namespaces whenever possible.
|
||
* Implemented LWG resolutions DR 431 and DR 538.
|
||
|
||
Fortran
|
||
|
||
* Support for allocatable components has been added (TR 15581 and
|
||
Fortran 2003).
|
||
* Support for the Fortran 2003 streaming IO extension has been added.
|
||
* The GNU Fortran compiler now uses 4-byte record markers by default
|
||
for unformatted files to be compatible with g77 and most other
|
||
compilers. The implementation allows for records greater than 2 GB
|
||
and is compatible with several other compilers. Older versions of
|
||
gfortran used 8-byte record markers by default (on most systems).
|
||
In order to change the length of the record markers, e.g. to read
|
||
unformatted files created by older gfortran versions, the
|
||
[4]-frecord-marker=8 option can be used.
|
||
|
||
Java (GCJ)
|
||
|
||
* A new command-line option -static-libgcj has been added for targets
|
||
that use a linker compatible with GNU Binutils. As its name
|
||
implies, this causes libgcj to be linked statically. In some cases
|
||
this causes the resulting executable to start faster and use less
|
||
memory than if the shared version of libgcj were used. However
|
||
caution should be used as it can also cause essential parts of the
|
||
library to be omitted. Some of these issues are discussed in:
|
||
[5]https://gcc.gnu.org/wiki/Statically_linking_libgcj
|
||
* fastjar is no longer bundled with GCC. To build libgcj, you will
|
||
need either InfoZIP (both zip and unzip) or an external jar
|
||
program. In the former case, the GCC build will install a jar shell
|
||
script that is based on InfoZIP and provides the same functionality
|
||
as fastjar.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
IA-32/x86-64
|
||
|
||
* -mtune=generic can now be used to generate code running well on
|
||
common x86 chips. This includes AMD Athlon, AMD Opteron, Intel
|
||
Pentium-M, Intel Pentium 4 and Intel Core 2.
|
||
* -mtune=native and -march=native will produce code optimized for the
|
||
host architecture as detected using the cpuid instruction.
|
||
* Added a new command-line option -fstackrealign and and
|
||
__attribute__ ((force_align_arg_pointer)) to realign the stack at
|
||
runtime. This allows functions compiled with a vector-aligned stack
|
||
to be invoked from legacy objects that keep only word-alignment.
|
||
|
||
SPARC
|
||
|
||
* The default CPU setting has been changed from V7 to V9 in 32-bit
|
||
mode on Solaris 7 and above. This is already the case in 64-bit
|
||
mode. It can be overridden by specifying --with-cpu at configure
|
||
time.
|
||
* Back-end support of built-in functions for atomic memory access has
|
||
been implemented.
|
||
* Support for the Sun UltraSPARC T1 (Niagara) processor has been
|
||
added.
|
||
|
||
M32C
|
||
|
||
* Various bug fixes have made some functions (notably, functions
|
||
returning structures) incompatible with previous releases.
|
||
Recompiling all libraries is recommended. Note that code quality
|
||
has considerably improved since 4.1, making a recompile even more
|
||
beneficial.
|
||
|
||
MIPS
|
||
|
||
* Added support for the Broadcom SB-1A core.
|
||
|
||
IA-64
|
||
|
||
* Added support for IA-64 data and control speculation. By default
|
||
speculation is enabled only during second scheduler pass. A number
|
||
of machine flags was introduced to control the usage of speculation
|
||
for both scheduler passes.
|
||
|
||
HPPA
|
||
|
||
* Added Java language support (libffi and libjava) for 32-bit HP-UX
|
||
11 target.
|
||
|
||
Obsolete Systems
|
||
|
||
Documentation improvements
|
||
|
||
PDF Documentation
|
||
|
||
* A make pdf target has been added to the top-level makefile,
|
||
enabling automated production of PDF documentation files.
|
||
(Front-ends external to GCC should modify their Make-lang.in file
|
||
to add a lang.pdf: target.)
|
||
|
||
Other significant improvements
|
||
|
||
Build system improvements
|
||
|
||
* All the components of the compiler are now bootstrapped by default.
|
||
This improves the resilience to bugs in the system compiler or
|
||
binary compatibility problems, as well as providing better testing
|
||
of GCC 4.2 itself. In addition, if you build the compiler from a
|
||
combined tree, the assembler, linker, etc. will also be
|
||
bootstrapped (i.e. built with themselves).
|
||
You can disable this behavior, and go back to the pre-GCC 4.2 set
|
||
up, by configuring GCC with --disable-bootstrap.
|
||
* The rules that configure follows to find target tools resemble more
|
||
closely the locations that the built compiler will search. In
|
||
addition, you can use the new configure option --with-target-tools
|
||
to specify where to find the target tools used during the build,
|
||
without affecting what the built compiler will use.
|
||
This can be especially useful when building packages of GCC. For
|
||
example, you may want to build GCC with GNU as or ld, even if the
|
||
resulting compiler to work with the native assembler and linker. To
|
||
do so, you can use --with-target-tools to point to the native
|
||
tools.
|
||
|
||
Incompatible changes to the build system
|
||
|
||
* Front-ends external to GCC should modify their Make-lang.in file to
|
||
replace double-colon rules (e.g. dvi::) with normal rules (like
|
||
lang.dvi:). Front-end makefile hooks do not use double-colon rules
|
||
anymore.
|
||
* Up to GCC 4.1, a popular way to specify the target tools used
|
||
during the build was to create directories named gas, binutils,
|
||
etc. in the build tree, and create links to the tools from there.
|
||
This does not work any more when the compiler is bootstrapped. The
|
||
new configure option --with-target-tools provides a better way to
|
||
achieve the same effect, and works for all native and cross
|
||
settings.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [6]GCC manuals. If that fails, the
|
||
[7]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives.
|
||
|
||
Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [11]maintained by the GCC team. Last modified
|
||
2018-09-30[12].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/projects/gomp/
|
||
2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||
3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
|
||
4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
|
||
5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
|
||
6. https://gcc.gnu.org/onlinedocs/
|
||
7. mailto:gcc-help@gcc.gnu.org
|
||
8. mailto:gcc@gcc.gnu.org
|
||
9. https://gcc.gnu.org/lists.html
|
||
10. https://www.fsf.org/
|
||
11. https://gcc.gnu.org/about.html
|
||
12. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.1/index.html
|
||
GCC 4.1 Release Series
|
||
|
||
February 13, 2007
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.1.2.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.1.1 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.1.2
|
||
February 13, 2007 ([2]changes)
|
||
|
||
GCC 4.1.1
|
||
May 24, 2006 ([3]changes)
|
||
|
||
GCC 4.1.0
|
||
February 28, 2006 ([4]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [5]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [6]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [7]GCC project
|
||
web site or contact the [8]GCC development mailing list.
|
||
|
||
To obtain GCC please use [9]our mirror sites or [10]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [11]GCC manuals. If that fails, the
|
||
[12]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [13]gcc@gcc.gnu.org. All of [14]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [16]maintained by the GCC team. Last modified
|
||
2018-09-30[17].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
|
||
3. http://gcc.gnu.org/gcc-4.1/changes.html
|
||
4. http://gcc.gnu.org/gcc-4.1/changes.html
|
||
5. http://gcc.gnu.org/gcc-4.1/buildstat.html
|
||
6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
7. http://gcc.gnu.org/index.html
|
||
8. mailto:gcc@gcc.gnu.org
|
||
9. http://gcc.gnu.org/mirrors.html
|
||
10. http://gcc.gnu.org/svn.html
|
||
11. https://gcc.gnu.org/onlinedocs/
|
||
12. mailto:gcc-help@gcc.gnu.org
|
||
13. mailto:gcc@gcc.gnu.org
|
||
14. https://gcc.gnu.org/lists.html
|
||
15. https://www.fsf.org/
|
||
16. https://gcc.gnu.org/about.html
|
||
17. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.1/changes.html
|
||
GCC 4.1 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 4.1 release series is [1]GCC 4.1.2.
|
||
|
||
Caveats
|
||
|
||
General Optimizer Improvements
|
||
|
||
* GCC now has infrastructure for inter-procedural optimizations and
|
||
the following inter-procedural optimizations are implemented:
|
||
+ Profile guided inlining. When doing profile feedback guided
|
||
optimization, GCC can now use the profile to make better
|
||
informed decisions on whether inlining of a function is
|
||
profitable or not. This means that GCC will no longer inline
|
||
functions at call sites that are not executed very often, and
|
||
that functions at hot call sites are more likely to be
|
||
inlined.
|
||
A new parameter min-inline-recursive-probability is also now
|
||
available to throttle recursive inlining of functions with
|
||
small average recursive depths.
|
||
+ Discovery of pure and const functions, a form of side-effects
|
||
analysis. While older GCC releases could also discover such
|
||
special functions, the new IPA-based pass runs earlier so that
|
||
the results are available to more optimizers. The pass is also
|
||
simply more powerful than the old one.
|
||
+ Analysis of references to static variables and type escape
|
||
analysis, also forms of side-effects analysis. The results of
|
||
these passes allow the compiler to be less conservative about
|
||
call-clobbered variables and references. This results in more
|
||
redundant loads being eliminated and in making static
|
||
variables candidates for register promotion.
|
||
+ Improvement of RTL-based alias analysis. The results of type
|
||
escape analysis are fed to the RTL type-based alias analyzer,
|
||
allowing it to disambiguate more memory references.
|
||
+ Interprocedural constant propagation and function versioning.
|
||
This pass looks for functions that are always called with the
|
||
same constant value for one or more of the function arguments,
|
||
and propagates those constants into those functions.
|
||
+ GCC will now eliminate static variables whose usage was
|
||
optimized out.
|
||
+ -fwhole-program --combine can now be used to make all
|
||
functions in program static allowing whole program
|
||
optimization. As an exception, the main function and all
|
||
functions marked with the new externally_visible attribute are
|
||
kept global so that programs can link with runtime libraries.
|
||
* GCC can now do a form of partial dead code elimination (PDCE) that
|
||
allows code motion of expressions to the paths where the result of
|
||
the expression is actually needed. This is not always a win, so the
|
||
pass has been limited to only consider profitable cases. Here is an
|
||
example:
|
||
int foo (int *, int *);
|
||
int
|
||
bar (int d)
|
||
{
|
||
int a, b, c;
|
||
b = d + 1;
|
||
c = d + 2;
|
||
a = b + c;
|
||
if (d)
|
||
{
|
||
foo (&b, &c);
|
||
a = b + c;
|
||
}
|
||
printf ("%d\n", a);
|
||
}
|
||
|
||
The a = b + c can be sunk to right before the printf. Normal code
|
||
sinking will not do this, it will sink the first one above into the
|
||
else-branch of the conditional jump, which still gives you two
|
||
copies of the code.
|
||
* GCC now has a value range propagation pass. This allows the
|
||
compiler to eliminate bounds checks and branches. The results of
|
||
the pass can also be used to accurately compute branch
|
||
probabilities.
|
||
* The pass to convert PHI nodes to straight-line code (a form of
|
||
if-conversion for GIMPLE) has been improved significantly. The two
|
||
most significant improvements are an improved algorithm to
|
||
determine the order in which the PHI nodes are considered, and an
|
||
improvement that allow the pass to consider if-conversions of basic
|
||
blocks with more than two predecessors.
|
||
* Alias analysis improvements. GCC can now differentiate between
|
||
different fields of structures in Tree-SSA's virtual operands form.
|
||
This lets stores/loads from non-overlapping structure fields not
|
||
conflict. A new algorithm to compute points-to sets was contributed
|
||
that can allows GCC to see now that p->a and p->b, where p is a
|
||
pointer to a structure, can never point to the same field.
|
||
* Various enhancements to auto-vectorization:
|
||
+ Incrementally preserve SSA form when vectorizing.
|
||
+ Incrementally preserve loop-closed form when vectorizing.
|
||
+ Improvements to peeling for alignment: generate better code
|
||
when the misalignment of an access is known at compile time,
|
||
or when different accesses are known to have the same
|
||
misalignment, even if the misalignment amount itself is
|
||
unknown.
|
||
+ Consider dependence distance in the vectorizer.
|
||
+ Externalize generic parts of data reference analysis to make
|
||
this analysis available to other passes.
|
||
+ Vectorization of conditional code.
|
||
+ Reduction support.
|
||
* GCC can now partition functions in sections of hot and cold code.
|
||
This can significantly improve performance due to better
|
||
instruction cache locality. This feature works best together with
|
||
profile feedback driven optimization.
|
||
* A new pass to avoid saving of unneeded arguments to the stack in
|
||
vararg functions if the compiler can prove that they will not be
|
||
needed.
|
||
* Transition of basic block profiling to tree level implementation
|
||
has been completed. The new implementation should be considerably
|
||
more reliable (hopefully avoiding profile mismatch errors when
|
||
using -fprofile-use or -fbranch-probabilities) and can be used to
|
||
drive higher level optimizations, such as inlining.
|
||
The -ftree-based-profiling command-line option was removed and
|
||
-fprofile-use now implies disabling old RTL level loop optimizer
|
||
(-fno-loop-optimize). Speculative prefetching optimization
|
||
(originally enabled by -fspeculative-prefetching) was removed.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
C and Objective-C
|
||
|
||
* The old Bison-based C and Objective-C parser has been replaced by a
|
||
new, faster hand-written recursive-descent parser.
|
||
|
||
Ada
|
||
|
||
* The build infrastructure for the Ada runtime library and tools has
|
||
been changed to be better integrated with the rest of the build
|
||
infrastructure of GCC. This should make doing cross builds of Ada a
|
||
bit easier.
|
||
|
||
C++
|
||
|
||
* ARM-style name-injection of friend declarations is no longer the
|
||
default. For example:
|
||
struct S {
|
||
friend void f();
|
||
};
|
||
|
||
void g() { f(); }
|
||
will not be accepted; instead a declaration of f will need to be
|
||
present outside of the scope of S. The new -ffriend-injection
|
||
option will enable the old behavior.
|
||
* The (undocumented) extension which permitted templates with default
|
||
arguments to be bound to template template parameters with fewer
|
||
parameters has been deprecated, and will be removed in the next
|
||
major release of G++. For example:
|
||
template <template <typename> class C>
|
||
void f(C<double>) {}
|
||
|
||
template <typename T, typename U = int>
|
||
struct S {};
|
||
|
||
template void f(S<double>);
|
||
|
||
makes use of the deprecated extension. The reason this code is not
|
||
valid ISO C++ is that S is a template with two parameters;
|
||
therefore, it cannot be bound to C which has only one parameter.
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Optimization work:
|
||
+ A new implementation of std::search_n is provided, better
|
||
performing in case of random access iterators.
|
||
+ Added further efficient specializations of istream functions,
|
||
i.e., character array and string extractors.
|
||
+ Other smaller improvements throughout.
|
||
* Policy-based associative containers, designed for high-performance,
|
||
flexibility and semantic safety are delivered in ext/pb_assoc.
|
||
* A versatile string class, __gnu_cxx::__versa_string, providing
|
||
facilities conforming to the standard requirements for
|
||
basic_string, is delivered in <ext/vstring.h>. In particular:
|
||
+ Two base classes are provided: the default one avoids
|
||
reference counting and is optimized for short strings; the
|
||
alternate one, still uses it while improving in a few low
|
||
level areas (e.g., alignment). See vstring_fwd.h for some
|
||
useful typedefs.
|
||
+ Various algorithms have been rewritten (e.g., replace), the
|
||
code streamlined and simple optimizations added.
|
||
+ Option 3 of DR 431 is implemented for both available bases,
|
||
thus improving the support for stateful allocators.
|
||
* As usual, many bugs have been fixed (e.g., libstdc++/13583,
|
||
libstdc++/23953) and LWG resolutions put into effect for the first
|
||
time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
|
||
Issue 6.19). The implementation status of TR1 is now tracked in the
|
||
docs in tr1.html.
|
||
|
||
Objective-C++
|
||
|
||
* A new language front end for Objective-C++ has been added. This
|
||
language allows users to mix the object oriented features of
|
||
Objective-C with those of C++.
|
||
|
||
Java (GCJ)
|
||
|
||
* Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
|
||
features (plus some 0.20 bug-fixes)
|
||
+ Networking
|
||
o The java.net.HttpURLConnection implementation no longer
|
||
buffers the entire response body in memory. This means
|
||
that response bodies larger than available memory can now
|
||
be handled.
|
||
+ (N)IO
|
||
o NIO FileChannel.map implementation, fast bulk put
|
||
implementation for DirectByteBuffer (speeds up this
|
||
method 10x).
|
||
o FileChannel.lock() and FileChannel.force() implemented.
|
||
+ XML
|
||
o gnu.xml fix for nodes created outside a namespace
|
||
context.
|
||
o Add support for output indenting and
|
||
cdata-section-elements output instruction in
|
||
xml.transform.
|
||
o xml.xpath corrections for cases where elements/attributes
|
||
might have been created in non-namespace-aware mode.
|
||
Corrections to handling of XSL variables and minor
|
||
conformance updates.
|
||
+ AWT
|
||
o GNU JAWT implementation, the AWT Native Interface, which
|
||
allows direct access to native screen resources from
|
||
within a Canvas's paint method. GNU Classpath Examples
|
||
comes with a Demo, see libjava/classpath/examples/README.
|
||
o awt.datatransfer updated to 1.5 with support for
|
||
FlavorEvents. The gtk+ awt peers now allow copy/paste of
|
||
text, images, URIs/files and serialized objects with
|
||
other applications and tracking clipboard change events
|
||
with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
|
||
objects are supported). A GNU Classpath Examples
|
||
datatransfer Demo was added to show the new
|
||
functionality.
|
||
o Split gtk+ awt peers event handling in two threads and
|
||
improve gdk lock handling (solves several awt lock ups).
|
||
o Speed up awt Image loading.
|
||
o Better gtk+ scrollbar peer implementation when using gtk+
|
||
>= 2.6.
|
||
o Handle image loading errors correctly for gdkpixbuf and
|
||
MediaTracker.
|
||
o Better handle GDK lock. Properly prefix gtkpeer native
|
||
functions (cp_gtk).
|
||
o GdkGraphics2D has been updated to use Cairo 0.5.x or
|
||
higher.
|
||
o BufferedImage and GtkImage rewrites. All image drawing
|
||
operations should now work correctly (flipping requires
|
||
gtk+ >= 2.6)
|
||
o Future Graphics2D, image and text work is documented at:
|
||
[2]http://developer.classpath.org/mediation/ClasspathGrap
|
||
hicsImagesText
|
||
o When gtk+ 2.6 or higher is installed the default log
|
||
handler will produce stack traces whenever a WARNING,
|
||
CRITICAL or ERROR message is produced.
|
||
+ Free Swing
|
||
o The RepaintManager has been reworked for more efficient
|
||
painting, especially for large GUIs.
|
||
o The layout manager OverlayLayout has been implemented,
|
||
the BoxLayout has been rewritten to make use of the
|
||
SizeRequirements utility class and caching for more
|
||
efficient layout.
|
||
o Improved accessibility support.
|
||
o Significant progress has been made in the implementation
|
||
of the javax.swing.plaf.metal package, with most UI
|
||
delegates in a working state now. Please test this with
|
||
your own applications and provide feedback that will help
|
||
us to improve this package.
|
||
o The GUI demo (gnu.classpath.examples.swing.Demo) has been
|
||
extended to highlight various features in our Free Swing
|
||
implementation. And it includes a look and feel switcher
|
||
for Metal (default), Ocean and GNU themes.
|
||
o The javax.swing.plaf.multi package is now implemented.
|
||
o Editing and several key actions for JTree and JTable were
|
||
implemented.
|
||
o Lots of icons and look and feel improvements for Free
|
||
Swing basic and metal themes were added. Try running the
|
||
GNU Classpath Swing Demo in examples
|
||
(gnu.classpath.examples.swing.Demo) with:
|
||
-Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFee
|
||
l or
|
||
-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFee
|
||
l
|
||
o Start of styled text capabilites for java.swing.text.
|
||
o DefaultMutableTreeNode pre-order, post-order, depth-first
|
||
and breadth-first traversal enumerations implemented.
|
||
o JInternalFrame colors and titlebar draw properly.
|
||
o JTree is working up to par (icons, selection and keyboard
|
||
traversal).
|
||
o JMenus were made more compatible in visual and
|
||
programmatic behavior.
|
||
o JTable changeSelection and multiple selections
|
||
implemented.
|
||
o JButton and JToggleButton change states work properly
|
||
now.
|
||
o JFileChooser fixes.
|
||
o revalidate() and repaint() fixes which make Free Swing
|
||
much more responsive.
|
||
o MetalIconFactory implemented.
|
||
o Free Swing Top-Level Compatibility. JFrame, JDialog,
|
||
JApplet, JInternalFrame, and JWindow are now 1.5
|
||
compatible in the sense that you can call add() and
|
||
setLayout() directly on them, which will have the same
|
||
effect as calling getContentPane().add() and
|
||
getContentPane().setLayout().
|
||
o The JTree interface has been completed. JTrees now
|
||
recognizes mouse clicks and selections work.
|
||
o BoxLayout works properly now.
|
||
o Fixed GrayFilter to actually work.
|
||
o Metal SplitPane implemented.
|
||
o Lots of Free Swing text and editor stuff work now.
|
||
+ Free RMI and Corba
|
||
o Andrew Watson, Vice President and Technical Director of
|
||
the Object Management Group, has officially assigned us
|
||
20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
|
||
mark remote classpath-specific system exceptions.
|
||
Obtaining the VMCID means that GNU Classpath now is a
|
||
recogniseable type of node in a highly interoperable
|
||
CORBA world.
|
||
o GNU Classpath now includes the first working draft to
|
||
support the RMI over IIOP protocol. The current
|
||
implementation is capable of remote invocations,
|
||
transferring various Serializables and Externalizables
|
||
via RMI-IIOP protocol. It can flatten graphs and, at
|
||
least for the simple cases, is interoperable with 1.5
|
||
JDKs.
|
||
o org.omg.PortableInterceptor and related functionality in
|
||
other packages is now implemented:
|
||
# The sever and client interceptors work as required
|
||
since 1.4.
|
||
# The IOR interceptor works as needed for 1.5.
|
||
o The org.omg.DynamicAny package is completed and passes
|
||
the prepared tests.
|
||
o The Portable Object Adapter should now support the output
|
||
of the recent IDL to java compilers. These compilers now
|
||
generate servants and not CORBA objects as before, making
|
||
the output depend on the existing POA implementation.
|
||
Completing POA means that such code can already be tried
|
||
to run on Classpath. Our POA is tested for the following
|
||
usager scenarios:
|
||
# POA converts servant to the CORBA object.
|
||
# Servant provides to the CORBA object.
|
||
# POA activates new CORBA object with the given Object
|
||
Id (byte array) that is later accessible for the
|
||
servant.
|
||
# During the first call, the ServantActivator provides
|
||
servant for this and all subsequent calls on the
|
||
current object.
|
||
# During each call, the ServantLocator provides
|
||
servant for this call only.
|
||
# ServantLocator or ServantActivator forwards call to
|
||
another server.
|
||
# POA has a single servant, responsible for all
|
||
objects.
|
||
# POA has a default servant, but some objects are
|
||
explicitly connected to they specific servants.
|
||
The POA is verified using tests from the former
|
||
cost.omg.org.
|
||
o The CORBA implementation is now a working prototype that
|
||
should support features up to 1.3 inclusive. We invite
|
||
groups writing CORBA dependent applications to try
|
||
Classpath implementation, reporting any possible bugs.
|
||
The CORBA prototype is interoperable with Sun's
|
||
implementation v 1.4, transferring object references,
|
||
primitive types, narrow and wide strings, arrays,
|
||
structures, trees, abstract interfaces and value types
|
||
(feature of CORBA 2.3) between these two platforms.
|
||
Remote exceptions are transferred and handled correctly.
|
||
The stringified object references (IORs) from various
|
||
sources are parsed as required. The transient (for
|
||
current session) and permanent (till jre restart)
|
||
redirections work. Both Little and Big Endian encoded
|
||
messages are accepted. The implementation is verified
|
||
using tests from the former cost.omg.org. The current
|
||
release includes working examples (see the examples
|
||
directory), demonstrating the client-server
|
||
communication, using either CORBA Request or IDL-based
|
||
stub (usually generated by a IDL to java compiler). These
|
||
examples also show how to use the Classpath CORBA naming
|
||
service. The IDL to java compiler is not yet written, but
|
||
as our library must be compatible, it naturally accepts
|
||
the output of other idlj implementations.
|
||
+ Misc
|
||
o Updated TimeZone data against Olson tzdata2005l.
|
||
o Make zip and jar packages UTF-8 clean.
|
||
o "native" code builds and compiles (warning free) on
|
||
Darwin and Solaris.
|
||
o java.util.logging.FileHandler now rotates files.
|
||
o Start of a generic JDWP framework in gnu/classpath/jdwp.
|
||
This is unfinished, but feedback (at classpath@gnu.org)
|
||
from runtime hackers is greatly appreciated. Although
|
||
most of the work is currently being done around gcj/gij
|
||
we want this framework to be as VM neutral as possible.
|
||
Early design is described in:
|
||
[3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
|
||
o QT4 AWT peers, enable by giving configure
|
||
--enable-qt-peer. Included, but not ready for production
|
||
yet. They are explicitly disabled and not supported. But
|
||
if you want to help with the development of these new
|
||
features we are interested in feedback. You will have to
|
||
explicitly enable them to try them out (and they will
|
||
most likely contain bugs).
|
||
o Documentation fixes all over the place. See
|
||
[4]http://developer.classpath.org/doc/
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
IA-32/x86-64
|
||
|
||
* The x86-64 medium model (that allows building applications whose
|
||
data segment exceeds 4GB) was redesigned to match latest ABI draft.
|
||
New implementation split large datastructures into separate segment
|
||
improving performance of accesses to small datastructures and also
|
||
allows linking of small model libraries into medium model programs
|
||
as long as the libraries are not accessing the large datastructures
|
||
directly. Medium model is also supported in position independent
|
||
code now.
|
||
The ABI change results in partial incompatibility among medium
|
||
model objects. Linking medium model libraries (or objects) compiled
|
||
with new compiler into medium model program compiled with older
|
||
will likely result in exceeding ranges of relocations.
|
||
Binutils 2.16.91 or newer are required for compiling medium model
|
||
now.
|
||
|
||
RS6000 (POWER/PowerPC)
|
||
|
||
* The AltiVec vector primitives in <altivec.h> are now implemented in
|
||
a way that puts a smaller burden on the preprocessor, instead
|
||
processing the "overloading" in the front ends. This should benefit
|
||
compilation speed on AltiVec vector code.
|
||
* AltiVec initializers now are generated more efficiently.
|
||
* The popcountb instruction available on POWER5 now is generated.
|
||
* The floating point round to integer instructions available on
|
||
POWER5+ now is generated.
|
||
* Floating point divides can be synthesized using the floating point
|
||
reciprocal estimate instructions.
|
||
* Double precision floating point constants are initialized as single
|
||
precision values if they can be represented exactly.
|
||
|
||
S/390, zSeries and System z9
|
||
|
||
* Support for the IBM System z9 109 processor has been added. When
|
||
using the -march=z9-109 option, the compiler will generate code
|
||
making use of instructions provided by the extended immediate
|
||
facility.
|
||
* Support for 128-bit IEEE floating point has been added. When using
|
||
the -mlong-double-128 option, the compiler will map the long double
|
||
data type to 128-bit IEEE floating point. Using this option
|
||
constitutes an ABI change, and requires glibc support.
|
||
* Various changes to improve performance of generated code have been
|
||
implemented, including:
|
||
+ In functions that do not require a literal pool, register %r13
|
||
(which is traditionally reserved as literal pool pointer), can
|
||
now be freely used for other purposes by the compiler.
|
||
+ More precise tracking of register use allows the compiler to
|
||
generate more efficient function prolog and epilog code in
|
||
certain cases.
|
||
+ The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
|
||
instructions are now used to implement C string functions.
|
||
+ The MOVE CHARACTER instruction with single byte overlap is now
|
||
used to implement the memset function with non-zero fill byte.
|
||
+ The LOAD ZERO instructions are now used where appropriate.
|
||
+ The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK,
|
||
and INSERT IMMEDIATE instructions are now used more frequently
|
||
to optimize bitfield operations.
|
||
+ The BRANCH ON COUNT instruction is now used more frequently.
|
||
In particular, the fact that a loop contains a subroutine call
|
||
no longer prevents the compiler from using this instruction.
|
||
+ The compiler is now aware that all shift and rotate
|
||
instructions implicitly truncate the shift count to six bits.
|
||
* Back-end support for the following generic features has been
|
||
implemented:
|
||
+ The full set of [5]built-in functions for atomic memory
|
||
access.
|
||
+ The -fstack-protector feature.
|
||
+ The optimization pass avoiding unnecessary stores of incoming
|
||
argument registers in functions with variable argument list.
|
||
|
||
SPARC
|
||
|
||
* The default code model in 64-bit mode has been changed from
|
||
Medium/Anywhere to Medium/Middle on Solaris.
|
||
* TLS support is disabled by default on Solaris prior to release 10.
|
||
It can be enabled on TLS-capable Solaris 9 versions (4/04 release
|
||
and later) by specifying --enable-tls at configure time.
|
||
|
||
MorphoSys
|
||
|
||
* Support has been added for this new architecture.
|
||
|
||
Obsolete Systems
|
||
|
||
Documentation improvements
|
||
|
||
Other significant improvements
|
||
|
||
* GCC can now emit code for protecting applications from
|
||
stack-smashing attacks. The protection is realized by buffer
|
||
overflow detection and reordering of stack variables to avoid
|
||
pointer corruption.
|
||
* Some built-in functions have been fortified to protect them against
|
||
various buffer overflow (and format string) vulnerabilities.
|
||
Compared to the mudflap bounds checking feature, the safe builtins
|
||
have far smaller overhead. This means that programs built using
|
||
safe builtins should not experience any measurable slowdown.
|
||
|
||
GCC 4.1.2
|
||
|
||
This is the [6]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.1.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
When generating code for a shared library, GCC now recognizes that
|
||
global functions may be replaced when the program runs. Therefore, it
|
||
is now more conservative in deducing information from the bodies of
|
||
functions. For example, in this example:
|
||
void f() {}
|
||
void g() {
|
||
try { f(); }
|
||
catch (...) {
|
||
cout << "Exception";
|
||
}
|
||
}
|
||
|
||
G++ would previously have optimized away the catch clause, since it
|
||
would have concluded that f cannot throw exceptions. Because users may
|
||
replace f with another function in the main body of the program, this
|
||
optimization is unsafe, and is no longer performed. If you wish G++ to
|
||
continue to optimize as before, you must add a throw() clause to the
|
||
declaration of f to make clear that it does not throw exceptions.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [7]GCC manuals. If that fails, the
|
||
[8]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [9]gcc@gcc.gnu.org. All of [10]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [11]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [12]maintained by the GCC team. Last modified
|
||
2018-09-30[13].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
|
||
2. http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
|
||
3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
|
||
4. http://developer.classpath.org/doc/
|
||
5. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
|
||
6. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
|
||
7. https://gcc.gnu.org/onlinedocs/
|
||
8. mailto:gcc-help@gcc.gnu.org
|
||
9. mailto:gcc@gcc.gnu.org
|
||
10. https://gcc.gnu.org/lists.html
|
||
11. https://www.fsf.org/
|
||
12. https://gcc.gnu.org/about.html
|
||
13. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.0/index.html
|
||
GCC 4.0 Release Series
|
||
|
||
January 31, 2007
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 4.0.4.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 4.0.3 relative to previous releases of GCC.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 4.0.4
|
||
January 31, 2007 ([2]changes)
|
||
|
||
GCC 4.0.3
|
||
March 10, 2006 ([3]changes)
|
||
|
||
GCC 4.0.2
|
||
September 28, 2005 ([4]changes)
|
||
|
||
GCC 4.0.1
|
||
July 7, 2005 ([5]changes)
|
||
|
||
GCC 4.0.0
|
||
April 20, 2005 ([6]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [7]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [8]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [9]GCC project
|
||
web site or contact the [10]GCC development mailing list.
|
||
|
||
To obtain GCC please use [11]our mirror sites, or [12]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [13]GCC manuals. If that fails, the
|
||
[14]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [15]gcc@gcc.gnu.org. All of [16]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [18]maintained by the GCC team. Last modified
|
||
2018-09-30[19].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
|
||
3. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
|
||
4. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
|
||
5. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
|
||
6. http://gcc.gnu.org/gcc-4.0/changes.html
|
||
7. http://gcc.gnu.org/gcc-4.0/buildstat.html
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
9. http://gcc.gnu.org/index.html
|
||
10. mailto:gcc@gcc.gnu.org
|
||
11. http://gcc.gnu.org/mirrors.html
|
||
12. http://gcc.gnu.org/svn.html
|
||
13. https://gcc.gnu.org/onlinedocs/
|
||
14. mailto:gcc-help@gcc.gnu.org
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. https://gcc.gnu.org/lists.html
|
||
17. https://www.fsf.org/
|
||
18. https://gcc.gnu.org/about.html
|
||
19. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-4.0/changes.html
|
||
GCC 4.0 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 4.0 release series is [1]GCC 4.0.4.
|
||
|
||
Caveats
|
||
|
||
* GCC now generates location lists by default when compiling with
|
||
debug info and optimization.
|
||
+ GDB 6.0 and older crashes when it sees location lists. GDB 6.1
|
||
or later is needed to debug binaries containing location
|
||
lists.
|
||
+ When you are trying to view a value of a variable in a part of
|
||
a function where it has no location (for example when the
|
||
variable is no longer used and thus its location was used for
|
||
something else) GDB will say that it is not available.
|
||
You can disable generating location lists by -fno-var-tracking.
|
||
* GCC no longer accepts the -fwritable-strings option. Use named
|
||
character arrays when you need a writable string.
|
||
* The options -freduce-all-givs and -fmove-all-movables have been
|
||
discontinued. They were used to circumvent a shortcoming in the
|
||
heuristics of the old loop optimization code with respect to common
|
||
Fortran constructs. The new (tree) loop optimizer works differently
|
||
and doesn't need those work-arounds.
|
||
* The graph-coloring register allocator, formerly enabled by the
|
||
option -fnew-ra, has been discontinued.
|
||
* -I- has been deprecated. -iquote is meant to replace the need for
|
||
this option.
|
||
* The MIPS -membedded-pic and -mrnames options have been removed.
|
||
* All MIPS targets now require the GNU assembler. In particular, IRIX
|
||
configurations can no longer use the MIPSpro assemblers, although
|
||
they do still support the MIPSpro linkers.
|
||
* The SPARC option -mflat has been removed.
|
||
* English-language diagnostic messages will now use Unicode quotation
|
||
marks in UTF-8 locales. (Non-English messages already used the
|
||
quotes appropriate for the language in previous releases.) If your
|
||
terminal does not support UTF-8 but you are using a UTF-8 locale
|
||
(such locales are the default on many GNU/Linux systems) then you
|
||
should set LC_CTYPE=C in the environment to disable that locale.
|
||
Programs that parse diagnostics and expect plain ASCII
|
||
English-language messages should set LC_ALL=C. See [2]Markus Kuhn's
|
||
explanation of Unicode quotation marks for more information.
|
||
* The specs file is no longer installed on most platforms. Most users
|
||
will be totally unaffected. However, if you are accustomed to
|
||
editing the specs file yourself, you will now have to use the
|
||
-dumpspecs option to generate the specs file, and then edit the
|
||
resulting file.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* The [3]tree ssa branch has been merged. This merge has brought in a
|
||
completely new optimization framework based on a higher level
|
||
intermediate representation than the existing RTL representation.
|
||
Numerous new code transformations based on the new framework are
|
||
available in GCC 4.0, including:
|
||
+ Scalar replacement of aggregates
|
||
+ Constant propagation
|
||
+ Value range propagation
|
||
+ Partial redundancy elimination
|
||
+ Load and store motion
|
||
+ Strength reduction
|
||
+ Dead store elimination
|
||
+ Dead and unreachable code elimination
|
||
+ [4]Autovectorization
|
||
+ Loop interchange
|
||
+ Tail recursion by accumulation
|
||
Many of these passes outperform their counterparts from previous
|
||
GCC releases.
|
||
* [5]Swing Modulo Scheduling (SMS). An RTL level instruction
|
||
scheduling optimization intended for loops that perform heavy
|
||
computations.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
C family
|
||
|
||
* The sentinel attribute has been added to GCC. This function
|
||
attribute allows GCC to warn when variadic functions such as execl
|
||
are not NULL terminated. See the GCC manual for a complete
|
||
description of its behavior.
|
||
* Given __attribute__((alias("target"))) it is now an error if target
|
||
is not a symbol, defined in the same translation unit. This also
|
||
applies to aliases created by #pragma weak alias=target. This is
|
||
because it's meaningless to define an alias to an undefined symbol.
|
||
On Solaris, the native assembler would have caught this error, but
|
||
GNU as does not.
|
||
|
||
C and Objective-C
|
||
|
||
* The -Wstrict-aliasing=2 option has been added. This warning catches
|
||
all unsafe cases, but it may also give a warning for some cases
|
||
that are safe.
|
||
* The cast-as-lvalue, conditional-expression-as-lvalue and
|
||
compound-expression-as-lvalue extensions, which were deprecated in
|
||
3.3.4 and 3.4, have been removed.
|
||
* The -fwritable-strings option, which was deprecated in 3.4, has
|
||
been removed.
|
||
* #pragma pack() semantics have been brought closer to those used by
|
||
other compilers. This also applies to C++.
|
||
* Taking the address of a variable with register storage is invalid
|
||
in C. GCC now issues an error instead of a warning.
|
||
* Arrays of incomplete element type are invalid in C. GCC now issues
|
||
an error for such arrays. Declarations such as extern struct s x[];
|
||
(where struct s has not been defined) can be moved after the
|
||
definition of struct s. Function parameters declared as arrays of
|
||
incomplete type can instead be declared as pointers.
|
||
|
||
C++
|
||
|
||
* When compiling without optimizations (-O0), the C++ front end is
|
||
much faster than in any previous versions of GCC. Independent
|
||
testers have measured speed-ups up to 25% in real-world production
|
||
code, compared to the 3.4 family (which was already the fastest
|
||
version to date). Upgrading from older versions might show even
|
||
bigger improvements.
|
||
* ELF visibility attributes can now be applied to a class type, so
|
||
that it affects every member function of a class at once, without
|
||
having to specify each individually:
|
||
class __attribute__ ((visibility("hidden"))) Foo
|
||
{
|
||
int foo1();
|
||
void foo2();
|
||
};
|
||
The syntax is deliberately similar to the __declspec() system used
|
||
by Microsoft Windows based compilers, allowing cross-platform
|
||
projects to easily reuse their existing macro system for denoting
|
||
exports and imports. By explicitly marking internal classes never
|
||
used outside a binary as hidden, one can completely avoid PLT
|
||
indirection overheads during their usage by the compiler. You can
|
||
find out more about the advantages of this at
|
||
[6]https://www.akkadia.org/drepper/dsohowto.pdf
|
||
* The -fvisibility-inlines-hidden option has been added which marks
|
||
all inlineable functions as having hidden ELF visibility, thus
|
||
removing their symbol and typeinfo from the exported symbol table
|
||
of the output ELF binary. Using this option can reduce the exported
|
||
symbol count of template-heavy code by up to 40% with no code
|
||
change at all, thus notably improving link and load times for the
|
||
binary as well as a reduction in size of up to 10%. Also, check the
|
||
new [7]-fvisibility option.
|
||
* The compiler now uses the library interface specified by the [8]C++
|
||
ABI for thread-safe initialization of function-scope static
|
||
variables. Most users should leave this alone, but embedded
|
||
programmers may want to disable this by specifying
|
||
-fno-threadsafe-statics for a small savings in code size.
|
||
* Taking the address of an explicit register variable is no longer
|
||
supported. Note that C++ allows taking the address of variables
|
||
with register storage so this will continue to compile with a
|
||
warning. For example, assuming that r0 is a machine register:
|
||
register int foo asm ("r0");
|
||
register int bar;
|
||
&foo; // error, no longer accepted
|
||
&bar; // OK, with a warning
|
||
* G++ has an undocumented extension to virtual function covariancy
|
||
rules that allowed the overrider to return a type that was
|
||
implicitly convertable to the overridden function's return type.
|
||
For instance a function returning void * could be overridden by a
|
||
function returning T *. This is now deprecated and will be removed
|
||
in a future release.
|
||
* The G++ minimum and maximum operators (<? and >?) and their
|
||
compound forms (<?=) and >?=) have been deprecated and will be
|
||
removed in a future version. Code using these operators should be
|
||
modified to use std::min and std::max instead.
|
||
* Declaration of nested classes of class templates as friends are
|
||
supported:
|
||
template <typename T> struct A {
|
||
class B {};
|
||
};
|
||
class C {
|
||
template <typename T> friend class A<T>::B;
|
||
};
|
||
This complements the feature member functions of class templates as
|
||
friends introduced in GCC 3.4.0.
|
||
* When declaring a friend class using an unqualified name, classes
|
||
outside the innermost non-class scope are not searched:
|
||
class A;
|
||
namespace N {
|
||
class B {
|
||
friend class A; // Refer to N::A which has not been declared yet
|
||
// because name outside namespace N are not searched
|
||
friend class ::A; // Refer to ::A
|
||
};
|
||
}
|
||
Hiding the friend name until declaration is still not implemented.
|
||
* Friends of classes defined outside their namespace are correctly
|
||
handled:
|
||
namespace N {
|
||
class A;
|
||
}
|
||
class N::A {
|
||
friend class B; // Refer to N::B in GCC 4.0.0
|
||
// but ::B in earlier versions of GCC
|
||
};
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Optimization work:
|
||
+ Added efficient specializations of istream functions for char
|
||
and wchar_t.
|
||
+ Further performance tuning of strings, in particular wrt
|
||
single-char append and getline.
|
||
+ iter_swap - and therefore most of the mutating algorithms -
|
||
now makes an unqualified call to swap when the value_type of
|
||
the two iterators is the same.
|
||
* A large subset of the features in Technical Report 1 (TR1 for
|
||
short) is experimentally delivered (i.e., no guarantees about the
|
||
implementation are provided. In particular it is not promised that
|
||
the library will remain link-compatible when code using TR1 is
|
||
used):
|
||
+ General utilities such as reference_wrapper and shared_ptr.
|
||
+ Function objects, i.e., result_of, mem_fn, bind, function.
|
||
+ Support for metaprogramming.
|
||
+ New containers such as tuple, array, unordered_set,
|
||
unordered_map, unordered_multiset, unordered_multimap.
|
||
* As usual, many bugs have been fixed and LWG resolutions implemented
|
||
for the first time (e.g., DR 409).
|
||
|
||
Java
|
||
|
||
* In order to prevent naming conflicts with other implementations of
|
||
these tools, some GCJ binaries have been renamed:
|
||
+ rmic is now grmic,
|
||
+ rmiregistry is now grmiregistry, and
|
||
+ jar is now fastjar.
|
||
In particular, these names were problematic for the jpackage.org
|
||
packaging conventions which install symlinks in /usr/bin that point
|
||
to the preferred versions of these tools.
|
||
* The -findirect-dispatch argument to the compiler now works and
|
||
generates code following a new "binary compatibility" ABI. Code
|
||
compiled this way follows the binary compatibility rules of the
|
||
Java Language Specification.
|
||
* libgcj now has support for using GCJ as a JIT, using the
|
||
gnu.gcj.jit family of system properties.
|
||
* libgcj can now find a shared library corresponding to the bytecode
|
||
representation of a class. See the documentation for the new
|
||
gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
|
||
property.
|
||
* There have been many improvements to the class library. Here are
|
||
some highlights:
|
||
+ Much more of AWT and Swing exist.
|
||
+ Many new packages and classes were added, including
|
||
java.util.regex, java.net.URI, javax.crypto,
|
||
javax.crypto.interfaces, javax.crypto.spec, javax.net,
|
||
javax.net.ssl, javax.security.auth,
|
||
javax.security.auth.callback, javax.security.auth.login,
|
||
javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
|
||
javax.imageio, javax.imageio.event, javax.imageio.spi,
|
||
javax.print, javax.print.attribute,
|
||
javax.print.attribute.standard, javax.print.event, and
|
||
javax.xml
|
||
+ Updated SAX and DOM, and imported GNU JAXP
|
||
|
||
Fortran
|
||
|
||
* A new [9]Fortran front end has replaced the aging GNU Fortran 77
|
||
front end. The new front end supports Fortran 90 and Fortran 95. It
|
||
may not yet be as stable as the old Fortran front end.
|
||
|
||
Ada
|
||
|
||
* Ada (with tasking and Zero Cost Exceptions) is now available on
|
||
many more targets, including but not limited to: alpha-linux,
|
||
hppa-hpux, hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
|
||
s390x-linux, sparc-linux.
|
||
* Some of the new Ada 2005 features are now implemented like
|
||
Wide_Wide_Character and Ada.Containers.
|
||
* Many bugs have been fixed, tools and documentation improved.
|
||
* To compile Ada from the sources, install an older working Ada
|
||
compiler and then use --enable-languages=ada at configuration time,
|
||
since the Ada front end is not currently activated by default. See
|
||
the [10]Installing GCC for details.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
H8/300
|
||
|
||
* The frame layout has changed. In the new layout, the prologue of a
|
||
function first saves registers and then allocate space for locals,
|
||
resulting in an 1% improvement on code size.
|
||
|
||
IA-32/x86-64 (AMD64)
|
||
|
||
* The acos, asin, drem, exp10, exp2, expm1, fmod, ilogb, log10,
|
||
log1p, log2, logb and tan mathematical builtins (and their float
|
||
and long double variants) are now implemented as inline x87
|
||
intrinsics when using -ffast-math.
|
||
* The ceil, floor, nearbyint, rint and trunc mathematical builtins
|
||
(and their float and long double variants) are now implemented as
|
||
inline x87 intrinsics when using -ffast-math.
|
||
* The x87's fsincos instruction is now used automatically with
|
||
-ffast-math when calculating both the sin and cos of the same
|
||
argument.
|
||
* Instruction selection for multiplication and division by constants
|
||
has been improved.
|
||
|
||
IA-64
|
||
|
||
* Floating point division, integer division and sqrt are now inlined,
|
||
resulting in significant performance improvements on some codes.
|
||
|
||
MIPS
|
||
|
||
* Division by zero checks now use conditional traps if the target
|
||
processor supports them. This decreases code size by one word per
|
||
division operation. The old behavior (branch and break) can be
|
||
obtained either at configure time by passing --with-divide=breaks
|
||
to configure or at runtime by passing -mdivide-breaks to GCC.
|
||
* Support for MIPS64 paired-single instructions has been added. It is
|
||
enabled by -mpaired-single and can be accessed using both the
|
||
target-independent vector extensions and new MIPS-specific built-in
|
||
functions.
|
||
* Support for the MIPS-3D ASE has been added. It is enabled by
|
||
-mips3d and provides new MIPS-3D-specific built-in functions.
|
||
* The -mexplicit-relocs option now supports static n64 code (as is
|
||
used, for example, in 64-bit linux kernels). -mexplicit-relocs
|
||
should now be feature-complete and is enabled by default when GCC
|
||
is configured to use a compatible assembler.
|
||
* Support for the NEC VR4130 series has been added. This support
|
||
includes the use of VR-specific instructions and a new VR4130
|
||
scheduler. Full VR4130 support can be selected with -march=vr4130
|
||
while code for any ISA can be tuned for the VR4130 using
|
||
-mtune=vr4130. There is also a new -mvr4130-align option that
|
||
produces better schedules at the cost of increased code size.
|
||
* Support for the Broadcom SB-1 has been extended. There is now an
|
||
SB-1 scheduler as well as support for the SB-1-specific
|
||
paired-single instructions. Full SB-1 support can be selected with
|
||
-march=sb1 while code for any ISA can be optimized for the SB-1
|
||
using -mtune=sb1.
|
||
* The compiler can now work around errata in R4000, R4400, VR4120 and
|
||
VR4130 processors. These workarounds are enabled by -mfix-r4000,
|
||
-mfix-r4400, -mfix-vr4120 and -mfix-vr4130 respectively. The VR4120
|
||
and VR4130 workarounds need binutils 2.16 or above.
|
||
* IRIX shared libraries are now installed into the standard library
|
||
directories: o32 libraries go into lib/, n32 libraries go into
|
||
lib32/ and n64 libraries go into lib64/.
|
||
* The compiler supports a new -msym32 option. It can be used to
|
||
optimize n64 code in which all symbols are known to have 32-bit
|
||
values.
|
||
|
||
S/390 and zSeries
|
||
|
||
* New command-line options help to generate code intended to run in
|
||
an environment where stack space is restricted, e.g. Linux kernel
|
||
code:
|
||
+ -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
|
||
warnings for single functions that require large or dynamic
|
||
stack frames.
|
||
+ -mstack-size and -mstack-guard generate code that checks for
|
||
stack overflow at run time.
|
||
+ -mpacked-stack generates code that reduces the stack frame
|
||
size of many functions by reusing unneeded parts of the stack
|
||
bias area.
|
||
* The -msoft-float option now ensures that generated code never
|
||
accesses floating point registers.
|
||
* The s390x-ibm-tpf target now fully supports C++, including
|
||
exceptions and threads.
|
||
* Various changes to improve performance of the generated code have
|
||
been implemented, including:
|
||
+ GCC now uses sibling calls where possible.
|
||
+ Condition code handling has been optimized, allowing GCC to
|
||
omit redundant comparisons in certain cases.
|
||
+ The cost function guiding many optimizations has been refined
|
||
to more accurately represent the z900 and z990 processors.
|
||
+ The ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
|
||
instructions are now used to avoid conditional branches in
|
||
certain cases.
|
||
+ The back end now uses the LEGITIMIZE_RELOAD_ADDRESS feature to
|
||
optimize address arithmetic required to access large stack
|
||
frames.
|
||
+ GCC now makes more efficient use of memory-to-memory type
|
||
instructions (MVC, CLC, ...).
|
||
+ More precise tracking of special register use allows better
|
||
instruction scheduling, in particular of the function prologue
|
||
and epilogue sequences.
|
||
+ The Java front end now generates inline code to implement
|
||
integer division, instead of calling library routines.
|
||
|
||
SPARC
|
||
|
||
* The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
|
||
-mf934 have been removed. They have been replaced with -mcpu=xxx.
|
||
* The internal model used to estimate the relative cost of each
|
||
instruction has been updated. It is expected to give better results
|
||
on recent UltraSPARC processors.
|
||
* Code generation for function prologues and epilogues has been
|
||
improved, resulting in better scheduling and allowing multiple exit
|
||
points in functions.
|
||
* Support for Sun's Visual Instruction Set (VIS) has been enhanced.
|
||
It is enabled by -mvis and provides new built-in functions for VIS
|
||
instructions on UltraSPARC processors.
|
||
* The option -mapp-regs has been turned on by default on Solaris too.
|
||
|
||
NetWare
|
||
|
||
* Novell NetWare (on ix86, no other hardware platform was ever really
|
||
supported by this OS) has been re-enabled and the ABI supported by
|
||
GCC has been brought into sync with that of MetroWerks CodeWarrior
|
||
(the ABI previously supported was that of some Unix systems, which
|
||
NetWare never tried to support).
|
||
|
||
Obsolete Systems
|
||
|
||
Support for a number of older systems has been declared obsolete in GCC
|
||
4.0. Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
|
||
All GCC ports for the following processor architectures have been
|
||
declared obsolete:
|
||
* Intel i860
|
||
* Ubicom IP2022
|
||
* National Semiconductor NS32K (ns32k)
|
||
* Texas Instruments TMS320C[34]x
|
||
|
||
Also, those for some individual systems have been obsoleted:
|
||
* SPARC family
|
||
+ SPARClite-based systems (sparclite-*-coff, sparclite-*-elf,
|
||
sparc86x-*-elf)
|
||
+ OpenBSD 32-bit (sparc-*-openbsd*)
|
||
|
||
Documentation improvements
|
||
|
||
Other significant improvements
|
||
|
||
* Location lists are now generated by default when compiling with
|
||
debug info and optimization. Location lists provide more accurate
|
||
debug info about locations of variables and they allow debugging
|
||
code compiled with -fomit-frame-pointer.
|
||
* The -fvisibility option has been added which allows the default ELF
|
||
visibility of all symbols to be set per compilation and the new
|
||
#pragma GCC visibility preprocessor command allows the setting of
|
||
default ELF visibility for a region of code. Using
|
||
-fvisibility=hidden especially in combination with the new
|
||
-fvisibility-inlines-hidden can yield substantial improvements in
|
||
output binary quality including avoiding PLT indirection overheads,
|
||
reduction of the exported symbol count by up to 60% (with resultant
|
||
improvements to link and load times), better scope for the
|
||
optimizer to improve code and up to a 20% reduction in binary size.
|
||
Using these options correctly yields a binary with a similar symbol
|
||
count to a Windows DLL.
|
||
Perhaps more importantly, this new feature finally allows (with
|
||
careful planning) complete avoidance of symbol clashes when
|
||
manually loading shared objects with RTLD_GLOBAL, thus finally
|
||
solving problems many projects such as python were forced to use
|
||
RTLD_LOCAL for (with its resulting issues for C++ correctness). You
|
||
can find more information about using these options at
|
||
[11]https://gcc.gnu.org/wiki/Visibility.
|
||
__________________________________________________________________
|
||
|
||
GCC 4.0.1
|
||
|
||
This is the [12]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.0.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
GCC 4.0.2
|
||
|
||
This is the [13]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.0.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Unfortunately, due to a release engineering failure, this release has a
|
||
regression on Solaris that will affect some C++ programs. We suggest
|
||
that Solaris users apply a [14]patch that corrects the problem. Users
|
||
who do not wish to apply the patch should explicitly link C++ programs
|
||
with the -pthreads option, even if they do not use threads. This
|
||
problem has been corrected in the current 4.0 branch sources and will
|
||
not be present in GCC 4.0.3.
|
||
|
||
GCC 4.0.3
|
||
|
||
Starting with this release, the function getcontext is recognized by
|
||
the compiler as having the same semantics as the setjmp function. In
|
||
particular, the compiler will ensure that all registers are dead before
|
||
calling such a function and will emit a warning about the variables
|
||
that may be clobbered after the second return from the function.
|
||
|
||
GCC 4.0.4
|
||
|
||
This is the [15]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 4.0.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
The 4.0.4 release is provided for those that require a high degree of
|
||
binary compatibility with previous 4.0.x releases. For most users, the
|
||
GCC team recommends that version 4.1.1 or later be used instead."
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [16]GCC manuals. If that fails, the
|
||
[17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [21]maintained by the GCC team. Last modified
|
||
2018-09-30[22].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
|
||
2. https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||
3. http://gcc.gnu.org/projects/tree-ssa/
|
||
4. http://gcc.gnu.org/projects/tree-ssa/vectorization.html
|
||
5. http://gcc.gnu.org/news/sms.html
|
||
6. https://www.akkadia.org/drepper/dsohowto.pdf
|
||
7. http://gcc.gnu.org/gcc-4.0/changes.html#visibility
|
||
8. https://itanium-cxx-abi.github.io/cxx-abi/
|
||
9. http://gcc.gnu.org/fortran/
|
||
10. https://gcc.gnu.org/install/
|
||
11. https://gcc.gnu.org/wiki/Visibility
|
||
12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
|
||
13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
|
||
14. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
|
||
15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
|
||
16. https://gcc.gnu.org/onlinedocs/
|
||
17. mailto:gcc-help@gcc.gnu.org
|
||
18. mailto:gcc@gcc.gnu.org
|
||
19. https://gcc.gnu.org/lists.html
|
||
20. https://www.fsf.org/
|
||
21. https://gcc.gnu.org/about.html
|
||
22. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.4/index.html
|
||
GCC 3.4 Release Series
|
||
|
||
May 26, 2006
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.4.6.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 3.4.4 relative to previous releases of GCC. This is the last of the
|
||
3.4.x series.
|
||
|
||
The GCC 3.4 release series includes numerous [2]new features,
|
||
improvements, bug fixes, and other changes, thanks to an [3]amazing
|
||
group of volunteers.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 3.4.6
|
||
March 6, 2006 ([4]changes)
|
||
|
||
GCC 3.4.5
|
||
November 30, 2005 ([5]changes)
|
||
|
||
GCC 3.4.4
|
||
May 18, 2005 ([6]changes)
|
||
|
||
GCC 3.4.3
|
||
November 4, 2004 ([7]changes)
|
||
|
||
GCC 3.4.2
|
||
September 6, 2004 ([8]changes)
|
||
|
||
GCC 3.4.1
|
||
July 1, 2004 ([9]changes)
|
||
|
||
GCC 3.4.0
|
||
April 18, 2004 ([10]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [11]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [12]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [13]GCC
|
||
project web site or contact the [14]GCC development mailing list.
|
||
|
||
To obtain GCC please use [15]our mirror sites, or [16]our SVN server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [17]GCC manuals. If that fails, the
|
||
[18]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [19]gcc@gcc.gnu.org. All of [20]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [22]maintained by the GCC team. Last modified
|
||
2018-09-30[23].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-3.4/changes.html
|
||
3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
4. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
|
||
5. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
|
||
6. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
|
||
7. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
|
||
8. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.2
|
||
9. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
|
||
10. http://gcc.gnu.org/gcc-3.4/changes.html
|
||
11. http://gcc.gnu.org/gcc-3.4/buildstat.html
|
||
12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
13. http://gcc.gnu.org/index.html
|
||
14. mailto:gcc@gcc.gnu.org
|
||
15. http://gcc.gnu.org/mirrors.html
|
||
16. http://gcc.gnu.org/svn.html
|
||
17. https://gcc.gnu.org/onlinedocs/
|
||
18. mailto:gcc-help@gcc.gnu.org
|
||
19. mailto:gcc@gcc.gnu.org
|
||
20. https://gcc.gnu.org/lists.html
|
||
21. https://www.fsf.org/
|
||
22. https://gcc.gnu.org/about.html
|
||
23. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.4/changes.html
|
||
GCC 3.4 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The final release in the 3.4 release series is [1]GCC 3.4.6. The series
|
||
is now closed.
|
||
|
||
GCC 3.4 has [2]many improvements in the C++ front end. Before reporting
|
||
a bug, please make sure it's really GCC, and not your code, that is
|
||
broken.
|
||
|
||
Caveats
|
||
|
||
* GNU Make is now required to build GCC.
|
||
* With -nostdinc the preprocessor used to ignore both standard
|
||
include paths and include paths contained in environment variables.
|
||
It was neither documented nor intended that environment variable
|
||
paths be ignored, so this has been corrected.
|
||
* GCC no longer accepts the options -fvolatile, -fvolatile-global and
|
||
-fvolatile-static. It is unlikely that they worked correctly in any
|
||
3.x release.
|
||
* GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
|
||
* Support for all the systems [3]obsoleted in GCC 3.3 has been
|
||
removed from GCC 3.4. See below for a [4]list of systems which are
|
||
obsoleted in this release.
|
||
* GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
|
||
compilers will not work.
|
||
* The implementation of the [5]MIPS ABIs has changed. As a result,
|
||
the code generated for certain MIPS targets will not be binary
|
||
compatible with earlier releases.
|
||
* In previous releases, the MIPS port had a fake "hilo" register with
|
||
the user-visible name accum. This register has been removed.
|
||
* The implementation of the [6]SPARC ABIs has changed. As a result,
|
||
the code generated will not be binary compatible with earlier
|
||
releases in certain cases.
|
||
* The configure option --enable-threads=pthreads has been removed;
|
||
use --enable-threads=posix instead, which should have the same
|
||
effect.
|
||
* Code size estimates used by inlining heuristics for C, Objective-C,
|
||
C++ and Java have been redesigned significantly. As a result the
|
||
parameters of -finline-insns, --param max-inline-insns-single and
|
||
--param max-inline-insns-auto need to be reconsidered.
|
||
* --param max-inline-slope and --param min-inline-insns have been
|
||
removed; they are not needed for the new bottom-up inlining
|
||
heuristics.
|
||
* The new unit-at-a-time compilation scheme has several compatibility
|
||
issues:
|
||
+ The order in which functions, variables, and top-level asm
|
||
statements are emitted may have changed. Code relying on some
|
||
particular ordering needs to be updated. The majority of such
|
||
top-level asm statements can be replaced by section
|
||
attributes.
|
||
+ Unreferenced static variables and functions are removed. This
|
||
may result in undefined references when an asm statement
|
||
refers to the variable/function directly. In that case either
|
||
the variable/function shall be listed in asm statement operand
|
||
or in the case of top-level asm statements the attribute used
|
||
shall be used to force function/variable to be always output
|
||
and considered as a possibly used by unknown code.
|
||
For variables the attribute is accepted only by GCC 3.4 and
|
||
newer, while for earlier versions it is sufficient to use
|
||
unused to silence warnings about the variables not being
|
||
referenced. To keep code portable across different GCC
|
||
versions, you can use appropriate preprocessor conditionals.
|
||
+ Static functions now can use non-standard passing conventions
|
||
that may break asm statements calling functions directly.
|
||
Again the attribute used shall be used to prevent this
|
||
behavior.
|
||
As a temporary workaround, -fno-unit-at-a-time can be used, but
|
||
this scheme may not be supported by future releases of GCC.
|
||
* GCC 3.4 automatically places zero-initialized variables in the .bss
|
||
section on some operating systems. Versions of GNU Emacs up to (and
|
||
including) 21.3 will not work correctly when using this
|
||
optimization; you can use -fno-zero-initialized-in-bss to disable
|
||
it.
|
||
* If GCC 3.4 is configured with --enable-threads=posix (the default
|
||
on most targets that support pthreads) then _REENTRANT will be
|
||
defined unconditionally by some libstdc++ headers. C++ code which
|
||
relies on that macro to detect whether multi-threaded code is being
|
||
compiled might change in meaning, possibly resulting in linker
|
||
errors for single-threaded programs. Affected users of [7]Boost
|
||
should compile single-threaded code with -DBOOST_DISABLE_THREADS.
|
||
See Bugzilla for [8]more information.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* Usability of the profile feedback and coverage testing has been
|
||
improved.
|
||
+ Performance of profiled programs has been improved by faster
|
||
profile merging code.
|
||
+ Better use of the profile feedback for optimization (loop
|
||
unrolling and loop peeling).
|
||
+ File locking support allowing fork() calls and parallel runs
|
||
of profiled programs.
|
||
+ Coverage file format has been redesigned.
|
||
+ gcov coverage tool has been improved.
|
||
+ make profiledbootstrap available to build a faster compiler.
|
||
Experiments made on i386 hardware showed an 11% speedup on -O0
|
||
and a 7.5% speedup on -O2 compilation of a [9]large C++
|
||
testcase.
|
||
+ New value profiling pass enabled via -fprofile-values
|
||
+ New value profile transformations pass enabled via -fvpt aims
|
||
to optimize some code sequences by exploiting knowledge about
|
||
value ranges or other properties of the operands. At the
|
||
moment a conversion of expensive divisions into cheaper
|
||
operations has been implemented.
|
||
+ New -fprofile-generate and -fprofile-use command-line options
|
||
to simplify the use of profile feedback.
|
||
* A new unit-at-a-time compilation scheme for C, Objective-C, C++ and
|
||
Java which is enabled via -funit-at-a-time (and implied by -O2). In
|
||
this scheme a whole file is parsed first and optimized later. The
|
||
following basic inter-procedural optimizations are implemented:
|
||
+ Removal of unreachable functions and variables
|
||
+ Discovery of local functions (functions with static linkage
|
||
whose address is never taken)
|
||
+ On i386, these local functions use register parameter passing
|
||
conventions.
|
||
+ Reordering of functions in topological order of the call graph
|
||
to enable better propagation of optimizing hints (such as the
|
||
stack alignments needed by functions) in the back end.
|
||
+ Call graph based out-of-order inlining heuristics which allows
|
||
to limit overall compilation unit growth (--param
|
||
inline-unit-growth).
|
||
Overall, the unit-at-a-time scheme produces a 1.3% improvement for
|
||
the SPECint2000 benchmark on the i386 architecture (AMD Athlon
|
||
CPU).
|
||
* More realistic code size estimates used by inlining for C,
|
||
Objective-C, C++ and Java. The growth of large functions can now be
|
||
limited via --param large-function-insns and --param
|
||
large-function-growth.
|
||
* A new cfg-level loop optimizer pass replaces the old loop unrolling
|
||
pass and adds two other loop transformations -- loop peeling and
|
||
loop unswitching -- and also uses the profile feedback to limit
|
||
code growth. (The three optimizations are enabled by
|
||
-funroll-loops, -fpeel-loops and -funswitch-loops flags,
|
||
respectively).
|
||
The old loop unroller still can be enabled by -fold-unroll-loops
|
||
and may produce better code in some cases, especially when the
|
||
webizer optimization pass is not run.
|
||
* A new web construction pass enabled via -fweb (and implied by -O3)
|
||
improves the quality of register allocation, CSE, first scheduling
|
||
pass and some other optimization passes by avoiding re-use of
|
||
pseudo registers with non-overlapping live ranges. The pass almost
|
||
always improves code quality but does make debugging difficult and
|
||
thus is not enabled by default by -O2
|
||
The pass is especially effective as cleanup after code duplication
|
||
passes, such as the loop unroller or the tracer.
|
||
* Experimental implementations of superblock or trace scheduling in
|
||
the second scheduling pass can be enabled via
|
||
-fsched2-use-superblocks and -fsched2-use-traces, respectively.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
Ada
|
||
|
||
* The Ada front end has been updated to include numerous bug fixes
|
||
and enhancements. These include:
|
||
+ Improved project file support
|
||
+ Additional set of warnings about potential wrong code
|
||
+ Improved error messages
|
||
+ Improved code generation
|
||
+ Improved cross reference information
|
||
+ Improved inlining
|
||
+ Better run-time check elimination
|
||
+ Better error recovery
|
||
+ More efficient implementation of unbounded strings
|
||
+ Added features in GNAT.Sockets, GNAT.OS_Lib, GNAT.Debug_Pools,
|
||
...
|
||
+ New GNAT.xxxx packages (e.g. GNAT.Strings,
|
||
GNAT.Exception_Action)
|
||
+ New pragmas
|
||
+ New -gnatS switch replacing gnatpsta
|
||
+ Implementation of new Ada features (in particular limited
|
||
with, limited aggregates)
|
||
|
||
C/Objective-C/C++
|
||
|
||
* Precompiled headers are now supported. Precompiled headers can
|
||
dramatically speed up compilation of some projects. There are some
|
||
known defects in the current precompiled header implementation that
|
||
will result in compiler crashes in relatively rare situations.
|
||
Therefore, precompiled headers should be considered a "technology
|
||
preview" in this release. Read the manual for details about how to
|
||
use precompiled headers.
|
||
* File handling in the preprocessor has been rewritten. GCC no longer
|
||
gets confused by symlinks and hardlinks, and now has a correct
|
||
implementation of #import and #pragma once. These two directives
|
||
have therefore been un-deprecated.
|
||
* The undocumented extension that allowed C programs to have a label
|
||
at the end of a compound statement, which has been deprecated since
|
||
GCC 3.0, has been removed.
|
||
* The cast-as-lvalue extension has been removed for C++ and
|
||
deprecated for C and Objective-C. In particular, code like this:
|
||
int i;
|
||
(char) i = 5;
|
||
|
||
or this:
|
||
char *p;
|
||
((int *) p)++;
|
||
|
||
is no longer accepted for C++ and will not be accepted for C and
|
||
Objective-C in a future version.
|
||
* The conditional-expression-as-lvalue extension has been deprecated
|
||
for C and Objective-C. In particular, code like this:
|
||
int a, b, c;
|
||
(a ? b : c) = 2;
|
||
|
||
will not be accepted for C and Objective-C in a future version.
|
||
* The compound-expression-as-lvalue extension has been deprecated for
|
||
C and Objective-C. In particular, code like this:
|
||
int a, b;
|
||
(a, b) = 2;
|
||
|
||
will not be accepted for C and Objective-C in a future version. A
|
||
possible non-intrusive workaround is the following:
|
||
(*(a, &b)) = 2;
|
||
|
||
* Several [10]built-in functions such as __builtin_popcount for
|
||
counting bits, finding the highest and lowest bit in a word, and
|
||
parity have been added.
|
||
* The -fwritable-strings option has been deprecated and will be
|
||
removed.
|
||
* Many C math library functions are now recognized as built-ins and
|
||
optimized.
|
||
* The C, C++, and Objective-C compilers can now handle source files
|
||
written in any character encoding supported by the host C library.
|
||
The default input character set is taken from the current locale,
|
||
and may be overridden with the -finput-charset command line option.
|
||
In the future we will add support for inline encoding markers.
|
||
|
||
C++
|
||
|
||
* G++ is now much closer to full conformance to the ISO/ANSI C++
|
||
standard. This means, among other things, that a lot of invalid
|
||
constructs which used to be accepted in previous versions will now
|
||
be rejected. It is very likely that existing C++ code will need to
|
||
be fixed. This document lists some of the most common issues.
|
||
* A hand-written recursive-descent C++ parser has replaced the
|
||
YACC-derived C++ parser from previous GCC releases. The new parser
|
||
contains much improved infrastructure needed for better parsing of
|
||
C++ source codes, handling of extensions, and clean separation
|
||
(where possible) between proper semantics analysis and parsing. The
|
||
new parser fixes many bugs that were found in the old parser.
|
||
* You must now use the typename and template keywords to disambiguate
|
||
dependent names, as required by the C++ standard.
|
||
struct K {
|
||
typedef int mytype_t;
|
||
};
|
||
|
||
template <class T1> struct A {
|
||
template <class T2> struct B {
|
||
void callme(void);
|
||
};
|
||
|
||
template <int N> void bar(void)
|
||
{
|
||
// Use 'typename' to tell the parser that T1::mytype_t names
|
||
// a type. This is needed because the name is dependent (in
|
||
// this case, on template parameter T1).
|
||
typename T1::mytype_t x;
|
||
x = 0;
|
||
}
|
||
};
|
||
|
||
template <class T> void template_func(void)
|
||
{
|
||
// Use 'template' to prefix member templates within
|
||
// dependent types (a has type A<T>, which depends on
|
||
// the template parameter T).
|
||
A<T> a;
|
||
a.template bar<0>();
|
||
|
||
// Use 'template' to tell the parser that B is a nested
|
||
// template class (dependent on template parameter T), and
|
||
// 'typename' because the whole A<T>::B<int> is
|
||
// the name of a type (again, dependent).
|
||
typename A<T>::template B<int> b;
|
||
b.callme();
|
||
}
|
||
|
||
void non_template_func(void)
|
||
{
|
||
// Outside of any template class or function, no names can be
|
||
// dependent, so the use of the keyword 'typename' and 'template'
|
||
// is not needed (and actually forbidden).
|
||
A<K> a;
|
||
a.bar<0>();
|
||
A<K>::B<float> b;
|
||
b.callme();
|
||
}
|
||
* In a template definition, unqualified names will no longer find
|
||
members of a dependent base (as specified by [temp.dep]/3 in the
|
||
C++ standard). For example,
|
||
template <typename T> struct B {
|
||
int m;
|
||
int n;
|
||
int f ();
|
||
int g ();
|
||
};
|
||
int n;
|
||
int g ();
|
||
template <typename T> struct C : B<T> {
|
||
void h ()
|
||
{
|
||
m = 0; // error
|
||
f (); // error
|
||
n = 0; // ::n is modified
|
||
g (); // ::g is called
|
||
}
|
||
};
|
||
You must make the names dependent, e.g. by prefixing them with
|
||
this->. Here is the corrected definition of C<T>::h,
|
||
template <typename T> void C<T>::h ()
|
||
{
|
||
this->m = 0;
|
||
this->f ();
|
||
this->n = 0
|
||
this->g ();
|
||
}
|
||
As an alternative solution (unfortunately not backwards compatible
|
||
with GCC 3.3), you may use using declarations instead of this->:
|
||
template <typename T> struct C : B<T> {
|
||
using B<T>::m;
|
||
using B<T>::f;
|
||
using B<T>::n;
|
||
using B<T>::g;
|
||
void h ()
|
||
{
|
||
m = 0;
|
||
f ();
|
||
n = 0;
|
||
g ();
|
||
}
|
||
};
|
||
* In templates, all non-dependent names are now looked up and bound
|
||
at definition time (while parsing the code), instead of later when
|
||
the template is instantiated. For instance:
|
||
void foo(int);
|
||
|
||
template <int> struct A {
|
||
static void bar(void){
|
||
foo('a');
|
||
}
|
||
};
|
||
|
||
void foo(char);
|
||
|
||
int main()
|
||
{
|
||
A<0>::bar(); // Calls foo(int), used to call foo(char).
|
||
}
|
||
|
||
* In an explicit instantiation of a class template, you must use
|
||
class or struct before the template-id:
|
||
template <int N>
|
||
class A {};
|
||
|
||
template A<0>; // error, not accepted anymore
|
||
template class A<0>; // OK
|
||
* The "named return value" and "implicit typename" extensions have
|
||
been removed.
|
||
* Default arguments in function types have been deprecated and will
|
||
be removed.
|
||
* ARM-style name-injection of friend declarations has been deprecated
|
||
and will be removed. For example: struct S { friend void f(); };
|
||
void g() { f(); } will not be accepted by future versions of G++;
|
||
instead a declaration of "f" will need to be present outside of the
|
||
scope of "S".
|
||
* Covariant returns are implemented for all but varadic functions
|
||
that require an adjustment.
|
||
* When -pedantic is used, G++ now issues errors about spurious
|
||
semicolons. For example,
|
||
namespace N {}; // Invalid semicolon.
|
||
void f() {}; // Invalid semicolon.
|
||
* G++ no longer accepts attributes for a declarator after the
|
||
initializer associated with that declarator. For example,
|
||
X x(1) __attribute__((...));
|
||
is no longer accepted. Instead, use:
|
||
X x __attribute__((...)) (1);
|
||
* Inside the scope of a template class, the name of the class itself
|
||
can be treated as either a class or a template. So GCC used to
|
||
accept the class name as argument of type template, and template
|
||
template parameter. However this is not C++ standard compliant. Now
|
||
the name is not treated as a valid template template argument
|
||
unless you qualify the name by its scope. For example, the code
|
||
below no longer compiles.
|
||
template <template <class> class TT> class X {};
|
||
template <class T> class Y {
|
||
X<Y> x; // Invalid, Y is always a type template parameter.
|
||
};
|
||
The valid code for the above example is
|
||
X< ::Y> x; // Valid.
|
||
(Notice the space between < and : to prevent GCC to interpret this
|
||
as a digraph for [.)
|
||
* Friend declarations that refer to template specializations are
|
||
rejected if the template has not already been declared. For
|
||
example,
|
||
template <typename T>
|
||
class C {
|
||
friend void f<> (C&);
|
||
};
|
||
is rejected. You must first declare f as a template,
|
||
template <typename T>
|
||
void f(T);
|
||
* In case of friend declarations, every name used in the friend
|
||
declaration must be accessible at the point of that declaration.
|
||
Previous versions of G++ used to be less strict about this and
|
||
allowed friend declarations for private class members, for example.
|
||
See the ISO C++ Standard Committee's [11]defect report #209 for
|
||
details.
|
||
* Declaration of member functions of class templates as friends are
|
||
supported. For example,
|
||
template <typename T> struct A {
|
||
void f();
|
||
};
|
||
class C {
|
||
template <typename T> friend void A<T>::f();
|
||
};
|
||
* You must use template <> to introduce template specializations, as
|
||
required by the standard. For example,
|
||
template <typename T>
|
||
struct S;
|
||
|
||
struct S<int> { };
|
||
is rejected. You must write,
|
||
template <> struct S<int> {};
|
||
* G++ used to accept code like this,
|
||
struct S {
|
||
int h();
|
||
void f(int i = g());
|
||
int g(int i = h());
|
||
};
|
||
This behavior is not mandated by the standard. Now G++ issues an
|
||
error about this code. To avoid the error, you must move the
|
||
declaration of g before the declaration of f. The default arguments
|
||
for g must be visible at the point where it is called.
|
||
* The C++ ABI Section 3.3.3 specifications for the array construction
|
||
routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return
|
||
NULL when the allocator argument returns NULL. These changes are
|
||
incorporated into the libstdc++ runtime library.
|
||
* Using a name introduced by a typedef in a friend declaration or in
|
||
an explicit instantiation is now rejected, as specified by the ISO
|
||
C++ standard.
|
||
class A;
|
||
typedef A B;
|
||
class C {
|
||
friend class B; // error, no typedef name here
|
||
friend B; // error, friend always needs class/struct/enum
|
||
friend class A; // OK
|
||
};
|
||
|
||
template <int> class Q {};
|
||
typedef Q<0> R;
|
||
template class R; // error, no typedef name here
|
||
template class Q<0>; // OK
|
||
* When allocating an array with a new expression, GCC used to allow
|
||
parentheses around the type name. This is actually ill-formed and
|
||
it is now rejected:
|
||
int* a = new (int)[10]; // error, not accepted anymore
|
||
int* a = new int[10]; // OK
|
||
* When binding an rvalue of class type to a reference, the copy
|
||
constructor of the class must be accessible. For instance, consider
|
||
the following code:
|
||
class A
|
||
{
|
||
public:
|
||
A();
|
||
|
||
private:
|
||
A(const A&); // private copy ctor
|
||
};
|
||
|
||
A makeA(void);
|
||
void foo(const A&);
|
||
|
||
void bar(void)
|
||
{
|
||
foo(A()); // error, copy ctor is not accessible
|
||
foo(makeA()); // error, copy ctor is not accessible
|
||
|
||
A a1;
|
||
foo(a1); // OK, a1 is a lvalue
|
||
}
|
||
This might be surprising at first sight, especially since most
|
||
popular compilers do not correctly implement this rule ([12]further
|
||
details).
|
||
* When forming a pointer to member or a pointer to member function,
|
||
access checks for class visibility (public, protected, private) are
|
||
now performed using the qualifying scope of the name itself. This
|
||
is better explained with an example:
|
||
class A
|
||
{
|
||
public:
|
||
void pub_func();
|
||
protected:
|
||
void prot_func();
|
||
private:
|
||
void priv_func();
|
||
};
|
||
|
||
class B : public A
|
||
{
|
||
public:
|
||
void foo()
|
||
{
|
||
&A::pub_func; // OK, pub_func is accessible through A
|
||
&A::prot_func; // error, cannot access prot_func through A
|
||
&A::priv_func; // error, cannot access priv_func through A
|
||
|
||
&B::pub_func; // OK, pub_func is accessible through B
|
||
&B::prot_func; // OK, can access prot_func through B (within B)
|
||
&B::priv_func; // error, cannot access priv_func through B
|
||
}
|
||
};
|
||
|
||
Runtime Library (libstdc++)
|
||
|
||
* Optimization work:
|
||
+ Streamlined streambuf, filebuf, separate synched with C
|
||
Standard I/O streambuf.
|
||
+ All formatted I/O now uses cached locale information.
|
||
+ STL optimizations (memory/speed for list, red-black trees as
|
||
used by sets and maps).
|
||
+ More use of GCC builtins.
|
||
+ String optimizations (avoid contention on
|
||
increment/decrement-and-test of the reference count in the
|
||
empty-string object, constructor from input_iterators
|
||
speedup).
|
||
* Static linkage size reductions.
|
||
* Large File Support (files larger than 2 GB on 32-bit systems).
|
||
* Wide character and variable encoding filebuf work (UTF-8, Unicode).
|
||
* Generic character traits.
|
||
* Also support wchar_t specializations on Mac OS 10.3.x, FreeBSD 5.x,
|
||
Solaris 2.7 and above, AIX 5.x, Irix 6.5.
|
||
* The allocator class is now standard-conformant, and two additional
|
||
extension allocators have been added, mt_alloc and
|
||
bitmap_allocator.
|
||
* PCH support: -include bits/stdc++.h (2x compile speedup).
|
||
* Rewrote __cxa_demangle with support for C++ style allocators.
|
||
* New debug modes for STL containers and iterators.
|
||
* Testsuite rewrite: five times as many tests, plus increasingly
|
||
sophisticated tests, including I/O, MT, multi-locale, wide and
|
||
narrow characters.
|
||
* Use current versions of GNU "autotools" for build/configuration.
|
||
|
||
Objective-C
|
||
|
||
* The Objective-C front end has been updated to include the numerous
|
||
bug fixes and enhancements previously available only in Apple's
|
||
version of GCC. These include:
|
||
+ Structured exception (@try... @catch... @finally, @throw) and
|
||
synchronization (@synchronized) support. These are accessible
|
||
via the -fobjc-exceptions switch; as of this writing, they may
|
||
only be used in conjunction with -fnext-runtime on Mac OS X
|
||
10.3 and later. See [13]Options Controlling Objective-C
|
||
Dialect for more information.
|
||
+ An overhaul of @encode logic. The C99 _Bool and C++ bool type
|
||
may now be encoded as 'B'. In addition, the back-end/codegen
|
||
dependencies have been removed.
|
||
+ An overhaul of message dispatch construction, ensuring that
|
||
the various receiver types (and casts thereof) are handled
|
||
properly, and that correct diagnostics are issued.
|
||
+ Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
|
||
(-freplace-objc-classes) debugging modes, currently available
|
||
on Mac OS X 10.3 and later. See [14]Options Controlling
|
||
Objective-C Dialect for more information.
|
||
+ Access to optimized runtime entry points (-fno-nil-receivers )
|
||
on the assumption that message receivers are never nil. This
|
||
is currently available on Mac OS X 10.3 and later. See
|
||
[15]Options Controlling Objective-C Dialect for more
|
||
information.
|
||
|
||
Java
|
||
|
||
* Compiling a .jar file will now cause non-.class entries to be
|
||
automatically compiled as resources.
|
||
* libgcj has been ported to Darwin.
|
||
* Jeff Sturm has adapted Jan Hubicka's call graph optimization code
|
||
to gcj.
|
||
* libgcj has a new gcjlib URL type; this lets URLClassLoader load
|
||
code from shared libraries.
|
||
* libgcj has been much more completely merged with [16]GNU Classpath.
|
||
* Class loading is now much more correct; in particular the caller's
|
||
class loader is now used when that is required.
|
||
* [17]Eclipse 2.x will run out of the box using gij.
|
||
* Parts of java.nio have been implemented. Direct and indirect
|
||
buffers work, as do fundamental file and socket operations.
|
||
* java.awt has been improved, though it is still not ready for
|
||
general use.
|
||
* The HTTP protocol handler now uses HTTP/1.1 and can handle the POST
|
||
method.
|
||
* The MinGW port has matured. Enhancements include socket timeout
|
||
support, thread interruption, improved Runtime.exec() handling and
|
||
support for accented characters in filenames.
|
||
|
||
Fortran
|
||
|
||
* Fortran improvements are listed in the [18]Fortran documentation.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
Alpha
|
||
|
||
* Several [19]built-in functions have been added such as
|
||
__builtin_alpha_zap to allow utilizing the more obscure
|
||
instructions of the CPU.
|
||
* Parameter passing of complex arguments has changed to match the
|
||
ABI. This change is incompatible with previous GCC versions, but
|
||
does fix compatibility with the Tru64 compiler and several corner
|
||
cases where GCC was incompatible with itself.
|
||
|
||
ARM
|
||
|
||
* Nicolas Pitre has contributed his hand-coded floating-point support
|
||
code for ARM. It is both significantly smaller and faster than the
|
||
existing C-based implementation, even when building applications
|
||
for Thumb. The arm-elf configuration has been converted to use the
|
||
new code.
|
||
* Support for the Intel's iWMMXt architecture, a second generation
|
||
XScale processor, has been added. Enabled at run time with the
|
||
-mcpu=iwmmxt command line switch.
|
||
* A new ARM target has been added: arm-wince-pe. This is similar to
|
||
the arm-pe target, but it defaults to using the APCS32 ABI.
|
||
* The existing ARM pipeline description has been converted to the use
|
||
the [20]DFA processor pipeline model. There is not much change in
|
||
code performance, but the description is now [21]easier to
|
||
understand.
|
||
* Support for the Cirrus EP9312 Maverick floating point co-processor
|
||
added. Enabled at run time with the -mcpu=ep9312 command line
|
||
switch. Note however that the multilibs to support this chip are
|
||
currently disabled in gcc/config/arm/t-arm-elf, so if you want to
|
||
enable their production you will have to uncomment the entries in
|
||
that file.
|
||
|
||
H8/300
|
||
|
||
* Support for long long has been added.
|
||
* Support for saveall attribute has been added.
|
||
* Pavel Pisa contributed hand-written 32-bit-by-32-bit division code
|
||
for H8/300H and H8S, which is much faster than the previous
|
||
implementation.
|
||
* A lot of small performance improvements.
|
||
|
||
IA-32/AMD64 (x86-64)
|
||
|
||
* Tuning for K8 (AMD Opteron/Athlon64) core is available via
|
||
-march=k8 and -mcpu=k8.
|
||
* Scalar SSE code generation carefully avoids reformatting penalties,
|
||
hidden dependencies and minimizes the number of uops generated on
|
||
both Intel and AMD CPUs.
|
||
* Vector MMX and SSE operands are now passed in registers to improve
|
||
performance and match the argument passing convention used by the
|
||
Intel C++ Compiler. As a result it is not possible to call
|
||
functions accepting vector arguments compiled by older GCC version.
|
||
* Conditional jump elimination is now more aggressive on modern CPUs.
|
||
* The Athlon ports has been converted to use the DFA processor
|
||
pipeline description.
|
||
* Optimization of indirect tail calls is now possible in a similar
|
||
fashion as direct sibcall optimization.
|
||
* Further small performance improvements.
|
||
* -m128bit-long-double is now less buggy.
|
||
* __float128 support in 64-bit compilation.
|
||
* Support for data structures exceeding 2GB in 64-bit mode.
|
||
* -mcpu has been renamed to -mtune.
|
||
|
||
IA-64
|
||
|
||
* Tuning code for the Itanium 2 processor has been added. The
|
||
generation of code tuned for Itanium 2 (option -mtune=itanium2) is
|
||
enabled by default now. To generate code tuned for Itanium 1 the
|
||
option -mtune=itanium1 should be used.
|
||
* [22]DFA processor pipeline descriptions for the IA-64 processors
|
||
have been added. This resulted in about 3% improvement on the
|
||
SPECInt2000 benchmark for Itanium 2.
|
||
* Instruction bundling for the IA-64 processors has been rewritten
|
||
using the DFA pipeline hazard recognizer. It resulted in about 60%
|
||
compiler speedup on the SPECInt2000 C programs.
|
||
|
||
M32R
|
||
|
||
* Support for the M32R/2 processor has been added by Renesas.
|
||
* Support for an M32R GNU/Linux target and PIC code generation has
|
||
been added by Renesas.
|
||
|
||
M68000
|
||
|
||
* Bernardo Innocenti (Develer S.r.l.) has contributed the
|
||
m68k-uclinux target, based on former work done by Paul Dale
|
||
(SnapGear Inc.). Code generation for the ColdFire processors family
|
||
has been enhanced and extended to support the MCF 53xx and MCF 54xx
|
||
cores, integrating former work done by Peter Barada (Motorola).
|
||
|
||
MIPS
|
||
|
||
Processor-specific changes
|
||
|
||
* Support for the RM7000 and RM9000 processors has been added. It can
|
||
be selected using the -march compiler option and should work with
|
||
any MIPS I (mips-*) or MIPS III (mips64-*) configuration.
|
||
* Support for revision 2 of the MIPS32 ISA has been added. It can be
|
||
selected with the command-line option -march=mips32r2.
|
||
* There is a new option, -mfix-sb1, to work around certain SB-1
|
||
errata.
|
||
|
||
Configuration
|
||
|
||
* It is possible to customize GCC using the following configure-time
|
||
options:
|
||
+ --with-arch, which specifies the default value of the -march
|
||
option.
|
||
+ --with-tune, which specifies the default value of the -mtune
|
||
option.
|
||
+ --with-abi, which specifies the default ABI.
|
||
+ --with-float=soft, which tells GCC to use software floating
|
||
point by default.
|
||
+ --with-float=hard, which tells GCC to use hardware floating
|
||
point by default.
|
||
* A 64-bit GNU/Linux port has been added. The associated
|
||
configurations are mips64-linux-gnu and mips64el-linux-gnu.
|
||
* The 32-bit GNU/Linux port now supports Java.
|
||
* The IRIX 6 configuration now supports the o32 ABI and will build
|
||
o32 multilibs by default. This support is compatible with both
|
||
binutils and the SGI tools, but note that several features,
|
||
including debugging information and DWARF2 exception handling, are
|
||
only available when using the GNU assembler. Use of the GNU
|
||
assembler and linker (version 2.15 or above) is strongly
|
||
recommended.
|
||
* The IRIX 6 configuration now supports 128-bit long doubles.
|
||
* There are two new RTEMS-specific configurations, mips-rtems and
|
||
mipsel-rtems.
|
||
* There are two new *-elf configurations, mipsisa32r2-elf and
|
||
mipsisa32r2el-elf.
|
||
|
||
General
|
||
|
||
* Several [23]ABI bugs have been fixed. Unfortunately, these changes
|
||
will break binary compatibility with earlier releases.
|
||
* GCC can now use explicit relocation operators when generating
|
||
-mabicalls code. This behavior is controlled by -mexplicit-relocs
|
||
and can have several performance benefits. For example:
|
||
+ It allows for more optimization of GOT accesses, including
|
||
better scheduling and redundancy elimination.
|
||
+ It allows sibling calls to be implemented as jumps.
|
||
+ n32 and n64 leaf functions can use a call-clobbered global
|
||
pointer instead of $28.
|
||
+ The code to set up $gp can be removed from functions that
|
||
don't need it.
|
||
* A new option, -mxgot, allows the GOT to be bigger than 64k. This
|
||
option is equivalent to the assembler's -xgot option and should be
|
||
used instead of -Wa,-xgot.
|
||
* Frame pointer elimination is now supported when generating 64-bit
|
||
MIPS16 code.
|
||
* Inline block moves have been optimized to take more account of
|
||
alignment information.
|
||
* Many internal changes have been made to the MIPS port, mostly aimed
|
||
at reducing the reliance on assembler macros.
|
||
|
||
PowerPC
|
||
|
||
* GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
|
||
[24]ABI incompatibilities regarding the way parameters are passed
|
||
during functions calls. These changes may result in incompatibility
|
||
between code compiled with GCC 3.3 and GCC 3.4.
|
||
|
||
PowerPC Darwin
|
||
|
||
* Support for shared/dylib gcc libraries has been added. It is
|
||
enabled by default on powerpc-apple-darwin7.0.0 and up.
|
||
* Libgcj is enabled by default. On systems older than
|
||
powerpc-apple-darwin7.0.0 you need to install dlcompat.
|
||
* 128-bit IBM extended precision format support added for long
|
||
double.
|
||
|
||
PowerPC64 GNU/Linux
|
||
|
||
* By default, PowerPC64 GNU/Linux now uses natural alignment of
|
||
structure elements. The old four byte alignment for double, with
|
||
special rules for a struct starting with a double, can be chosen
|
||
with -malign-power. This change may result in incompatibility
|
||
between code compiled with GCC 3.3 and GCC 3.4.
|
||
* -mabi=altivec is now the default rather than -mabi=no-altivec.
|
||
* 128-bit IBM extended precision format support added for long
|
||
double.
|
||
|
||
S/390 and zSeries
|
||
|
||
* New command-line options allow to specify the intended execution
|
||
environment for generated code:
|
||
+ -mesa/-mzarch allows to specify whether to generate code
|
||
running in ESA/390 mode or in z/Architecture mode (this is
|
||
applicable to 31-bit code only).
|
||
+ -march allows to specify a minimum processor architecture
|
||
level (g5, g6, z900, or z990).
|
||
+ -mtune allows to specify which processor to tune for.
|
||
* It is possible to customize GCC using the following configure-time
|
||
options:
|
||
+ --with-mode, which specifies whether to default to assuming
|
||
ESA/390 or z/Architecture mode.
|
||
+ --with-arch, which specifies the default value of the -march
|
||
option.
|
||
+ --with-tune, which specifies the default value of the -mtune
|
||
option.
|
||
* Support for the z990 processor has been added, and can be selected
|
||
using -march=z990 or -mtune=z990. This includes instruction
|
||
scheduling tuned for the superscalar instruction pipeline of the
|
||
z990 processor as well as support for all new instructions provided
|
||
by the long-displacement facility.
|
||
* Support to generate 31-bit code optimized for zSeries processors
|
||
(running in ESA/390 or in z/Architecture mode) has been added. This
|
||
can be selected using -march=z900 and -mzarch respectively.
|
||
* Instruction scheduling for the z900 and z990 processors now uses
|
||
the DFA pipeline hazard recognizer.
|
||
* GCC no longer generates code to maintain a stack backchain,
|
||
previously used to generate stack backtraces for debugging
|
||
purposes. As replacement that does not incur runtime overhead,
|
||
DWARF-2 call frame information is provided by GCC; this is
|
||
supported by GDB 6.1. The old behavior can be restored using the
|
||
-mbackchain option.
|
||
* The stack frame size of functions may now exceed 2 GB in 64-bit
|
||
code.
|
||
* A port for the 64-bit IBM TPF operating system has been added; the
|
||
configuration is s390x-ibm-tpf. This configuration is supported as
|
||
cross-compilation target only.
|
||
* Various changes to improve the generated code have been
|
||
implemented, including:
|
||
+ GCC now uses the MULTIPLY AND ADD and MULTIPLY AND SUBTRACT
|
||
instructions to significantly speed up many floating-point
|
||
applications.
|
||
+ GCC now uses the ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL
|
||
WITH BORROW instructions to speed up long long arithmetic.
|
||
+ GCC now uses the SEARCH STRING instruction to implement
|
||
strlen().
|
||
+ In many cases, function call overhead for 31-bit code has been
|
||
reduced by placing the literal pool after the function code
|
||
instead of after the function prolog.
|
||
+ Register 14 is no longer reserved in 64-bit code.
|
||
+ Handling of global register variables has been improved.
|
||
|
||
SPARC
|
||
|
||
* The option -mflat is deprecated.
|
||
* Support for large (> 2GB) frames has been added to the 64-bit port.
|
||
* Several [25]ABI bugs have been fixed. Unfortunately, these changes
|
||
will break binary compatibility with earlier releases.
|
||
* The default debugging format has been switched from STABS to
|
||
DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
|
||
the default debugging format for 64-bit code on Solaris.
|
||
|
||
SuperH
|
||
|
||
* Support for the SH2E processor has been added. Enabled at run time
|
||
with the -m2e command line switch, or at configure time by
|
||
specifying sh2e as the machine part of the target triple.
|
||
|
||
V850
|
||
|
||
* Support for the Mitsubishi V850E1 processor has been added. This is
|
||
a variant of the V850E processor with some additional debugging
|
||
instructions.
|
||
|
||
Xtensa
|
||
|
||
* Several ABI bugs have been fixed. Unfortunately, these changes
|
||
break binary compatibility with earlier releases.
|
||
+ For big-endian processors, the padding of aggregate return
|
||
values larger than a word has changed. If the size of an
|
||
aggregate return value is not a multiple of 32 bits, previous
|
||
versions of GCC inserted padding in the most-significant bytes
|
||
of the first return value register. Aggregates larger than a
|
||
word are now padded in the least-significant bytes of the last
|
||
return value register used. Aggregates smaller than a word are
|
||
still padded in the most-significant bytes. The return value
|
||
padding has not changed for little-endian processors.
|
||
+ Function arguments with 16-byte alignment are now properly
|
||
aligned.
|
||
+ The implementation of the va_list type has changed. A va_list
|
||
value created by va_start from a previous release cannot be
|
||
used with va_arg from this release, or vice versa.
|
||
* More processor configuration options for Xtensa processors are
|
||
supported:
|
||
+ the ABS instruction is now optional;
|
||
+ the ADDX* and SUBX* instructions are now optional;
|
||
+ an experimental CONST16 instruction can be used to synthesize
|
||
constants instead of loading them from constant pools.
|
||
These and other Xtensa processor configuration options can no
|
||
longer be enabled or disabled by command-line options; the
|
||
processor configuration must be specified by the xtensa-config.h
|
||
header file when building GCC. Additionally, the
|
||
-mno-serialize-volatile option is no longer supported.
|
||
|
||
Obsolete Systems
|
||
|
||
Support for a number of older systems has been declared obsolete in GCC
|
||
3.4. Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
|
||
All configurations of the following processor architectures have been
|
||
declared obsolete:
|
||
* Mitsubishi D30V, d30v-*
|
||
* AT&T DSP1600 and DSP1610, dsp16xx-*
|
||
* Intel 80960, i960
|
||
|
||
Also, some individual systems have been obsoleted:
|
||
* ARM Family
|
||
+ Support for generating code for operation in APCS/26 mode
|
||
(-mapcs-26).
|
||
* IBM ESA/390
|
||
+ "Bigfoot" port, i370-*. (The other port, s390-*, is actively
|
||
maintained and supported.)
|
||
* Intel 386 family
|
||
+ MOSS, i?86-moss-msdos and i?86-*-moss*
|
||
+ NCR 3000 running System V r.4, i?86-ncr-sysv4*
|
||
+ FreeBSD with a.out object format, i?86-*-freebsd*aout* and
|
||
i?86-*-freebsd2*
|
||
+ GNU/Linux with a.out object format, i?86-linux*aout*
|
||
+ GNU/Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
|
||
+ Interix versions before Interix 3, i?86-*-interix
|
||
+ Mach microkernel, i?86-mach*
|
||
+ SCO UnixWare with UDK, i?86-*-udk*
|
||
+ Generic System V releases 1, 2, and 3, i?86-*-sysv[123]*
|
||
+ VSTa microkernel, i386-*-vsta
|
||
* Motorola M68000 family
|
||
+ HPUX, m68k-hp-hpux* and m68000-hp-hpux*
|
||
+ NetBSD with a.out object format (before NetBSD 1.4),
|
||
m68k-*-*-netbsd* except m68k-*-*-netbsdelf*
|
||
+ Generic System V r.4, m68k-*-sysv4*
|
||
* VAX
|
||
+ Generic VAX, vax-*-* (This is generic VAX only; we have not
|
||
obsoleted any VAX triples for specific operating systems.)
|
||
|
||
Documentation improvements
|
||
|
||
Other significant improvements
|
||
|
||
* The build system has undergone several significant cleanups.
|
||
Subdirectories will only be configured if they are being built, and
|
||
all subdirectory configures are run from the make command. The top
|
||
level has been autoconfiscated.
|
||
* Building GCC no longer writes to its source directory. This should
|
||
help those wishing to share a read-only source directory over NFS
|
||
or build from a CD. The exceptions to this feature are if you
|
||
configure with either --enable-maintainer-mode or
|
||
--enable-generated-files-in-srcdir.
|
||
* The -W warning option has been renamed to -Wextra, which is more
|
||
easily understood. The older spelling will be retained for
|
||
backwards compatibility.
|
||
* Substantial improvements in compile time have been made,
|
||
particularly for non-optimizing compilations.
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.0
|
||
|
||
Bug Fixes
|
||
|
||
A vast number of bugs have been fixed in 3.4.0, too many to publish a
|
||
complete list here. [26]Follow this link to query the Bugzilla database
|
||
for the list of over 900 bugs fixed in 3.4.0. This is the list of all
|
||
bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
|
||
regressions.
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.1
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Bootstrap failures
|
||
|
||
* [27]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
|
||
emitted - PIC related
|
||
* [28]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
|
||
* [29]14760 A bug in configure.in prevents using both
|
||
--program-suffix and --program-prefix
|
||
* [30]14671 [hppa64] bootstrap fails: ICE in
|
||
save_call_clobbered_regs, in caller_save.c
|
||
* [31]15093 [alpha][Java] make bootstrap fails to configure libffi on
|
||
Alpha
|
||
* [32]15178 Solaris 9/x86 fails linking after stage 3
|
||
|
||
Multi-platform internal compiler errors (ICEs)
|
||
|
||
* [33]12753 (preprocessor) Memory corruption in preprocessor on bad
|
||
input
|
||
* [34]13985 ICE in gcc.c-torture/compile/930621-1.c
|
||
* [35]14810 (c++) tree check failures with invalid code involving
|
||
templates
|
||
* [36]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
|
||
cp/parser.c
|
||
* [37]15044 (c++) ICE on syntax error, template header
|
||
* [38]15057 (c++) Compiling of conditional value throw constructs
|
||
cause a segmentation violation
|
||
* [39]15064 (c++) typeid of template parameter gives ICE
|
||
* [40]15142 (c++) ICE when passing a string where a char* is expected
|
||
in a throw statement
|
||
* [41]15159 ICE in rtl_verify_flow_info_1
|
||
* [42]15165 (c++) ICE in instantiate_template
|
||
* [43]15193 Unary minus using pointer to V4SF vector causes
|
||
-fforce-mem to exhaust all memory
|
||
* [44]15209 (c++) Runs out of memory with packed structs
|
||
* [45]15227 (c++) Trouble with invalid function definition
|
||
* [46]15285 (c++) instantiate_type ICE when forming pointer to
|
||
template function
|
||
* [47]15299 (c++) ICE in resolve_overloaded_unification
|
||
* [48]15329 (c++) ICE on constructor of member template
|
||
* [49]15550 ICE in extract_insn, in recog.c
|
||
* [50]15554 (c++) ICE in tsubst_copy, in cp/pt.c
|
||
* [51]15640 (c++) ICE on invalid code in arg_assoc, in
|
||
cp/name-lookup.c
|
||
* [52]15666 [unit-at-a-time] Gcc abort on valid code
|
||
* [53]15696 (c++) ICE with bad pointer-to-member code
|
||
* [54]15701 (c++) ICE with friends and template template parameter
|
||
* [55]15761 ICE in do_SUBST, in combine.c
|
||
* [56]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
|
||
|
||
Ada
|
||
|
||
* [57]14538 All RTEMS targets broken for gnat
|
||
|
||
C front end
|
||
|
||
* [58]12391 missing warning about assigning to an incomplete type
|
||
* [59]14649 atan(1.0) should not be a constant expression
|
||
* [60]15004 [unit-at-a-time] no warning for unused paramater in
|
||
static function
|
||
* [61]15749 --pedantic-errors behaves differently from --pedantic
|
||
with C-compiler on GNU/Linux
|
||
|
||
C++ compiler and library
|
||
|
||
* [62]10646 non-const reference is incorrectly matched in a "const T"
|
||
partial specialization
|
||
* [63]12077 wcin.rdbuf()->in_avail() return value too high
|
||
* [64]13598 enc_filebuf doesn't work
|
||
* [65]14211 const_cast returns lvalue but should be rvalue
|
||
* [66]14220 num_put::do_put() undesired float/double behavior
|
||
* [67]14245 problem with user-defined allocators in std::basic_string
|
||
* [68]14340 libstdc++ Debug mode: failure to convert iterator to
|
||
const_iterator
|
||
* [69]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
|
||
FILE*
|
||
* [70]14668 no warning anymore for reevaluation of declaration
|
||
* [71]14775 LFS (large file support) tests missing
|
||
* [72]14821 Duplicate namespace alias declaration should not conflict
|
||
* [73]14930 Friend declaration ignored
|
||
* [74]14932 cannot use offsetof to get offsets of array elements in
|
||
g++ 3.4.0
|
||
* [75]14950 [non unit-at-a-time] always_inline does not mix with
|
||
templates and -O0
|
||
* [76]14962 g++ ignores #pragma redefine_extname
|
||
* [77]14975 Segfault on low-level write error during imbue
|
||
* [78]15002 Linewise stream input is unusably slow (std::string slow)
|
||
* [79]15025 compiler accepts redeclaration of template as
|
||
non-template
|
||
* [80]15046 [arm] Math functions misdetected by cross configuration
|
||
* [81]15069 a bit test on a variable of enum type is miscompiled
|
||
* [82]15074 g++ -lsupc++ still links against libstdc++
|
||
* [83]15083 spurious "statement has no effect" warning
|
||
* [84]15096 parse error with templates and pointer to const member
|
||
* [85]15287 combination of operator[] and operator .* fails in
|
||
templates
|
||
* [86]15317 __attribute__ unused in first parameter of constructor
|
||
gives error
|
||
* [87]15337 sizeof on incomplete type diagnostic
|
||
* [88]15361 bitset<>::_Find_next fails
|
||
* [89]15412 _GLIBCXX_ symbols symbols defined and used in different
|
||
namespaces
|
||
* [90]15427 valid code results in incomplete type error
|
||
* [91]15471 Incorrect member pointer offsets in anonymous
|
||
structs/unions
|
||
* [92]15503 nested template problem
|
||
* [93]15507 compiler hangs while laying out union
|
||
* [94]15542 operator & and template definitions
|
||
* [95]15565 SLES9: leading + sign for unsigned int with showpos
|
||
* [96]15625 friend defined inside a template fails to find static
|
||
function
|
||
* [97]15629 Function templates, overloads, and friend name injection
|
||
* [98]15742 'noreturn' attribute ignored in method of template
|
||
functions.
|
||
* [99]15775 Allocator::pointer consistently ignored
|
||
* [100]15821 Duplicate namespace alias within namespace rejected
|
||
* [101]15862 'enum yn' fails (confict with undeclared builtin)
|
||
* [102]15875 rejects pointer to member in template
|
||
* [103]15877 valid code using templates and anonymous enums is
|
||
rejected
|
||
* [104]15947 Puzzling error message for wrong destructor declaration
|
||
in template class
|
||
* [105]16020 cannot copy __gnu_debug::bitset
|
||
* [106]16154 input iterator concept too restrictive
|
||
* [107]16174 deducing top-level consts
|
||
|
||
Java
|
||
|
||
* [108]14315 Java compiler is not parallel make safe
|
||
|
||
Fortran
|
||
|
||
* [109]15151 [g77] incorrect logical i/o in 64-bit mode
|
||
|
||
Objective-C
|
||
|
||
* [110]7993 private variables cannot be shadowed in subclasses
|
||
|
||
Optimization bugs
|
||
|
||
* [111]15228 useless copies of floating point operands
|
||
* [112]15345 [non-unit-at-a-time] unreferenced nested inline
|
||
functions not optimized away
|
||
* [113]15945 Incorrect floating point optimization
|
||
* [114]15526 ftrapv aborts on 0 * (-1)
|
||
* [115]14690 Miscompiled POOMA tests
|
||
* [116]15112 GCC generates code to write to unchanging memory
|
||
|
||
Preprocessor
|
||
|
||
* [117]15067 Minor glitch in the source of cpp
|
||
|
||
Main driver program bugs
|
||
|
||
* [118]1963 collect2 interprets -oldstyle_liblookup as -o
|
||
ldstyle_liblookup
|
||
|
||
x86-specific (Intel/AMD)
|
||
|
||
* [119]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
|
||
section}
|
||
|
||
HPPA-specific
|
||
|
||
* [120]14782 GCC produces an unaligned data access at -O2
|
||
* [121]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
|
||
* [122]15202 ICE in reload_cse_simplify_operands, in postreload.c
|
||
|
||
IA64-specific
|
||
|
||
* [123]14610 __float80 constants incorrectly emitted
|
||
* [124]14813 init_array sections are initialized in the wrong order
|
||
* [125]14857 GCC segfault on duplicated asm statement
|
||
* [126]15598 Gcc 3.4 ICE on valid code
|
||
* [127]15653 Gcc 3.4 ICE on valid code
|
||
|
||
MIPS-specific
|
||
|
||
* [128]15189 wrong filling of delay slot with -march=mips1 -G0
|
||
-mno-split-addresses -mno-explicit-relocs
|
||
* [129]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
|
||
2.14.91
|
||
* [130]16144 Bogus reference to __divdf3 when -O1
|
||
* [131]16176 Miscompilation of unaligned data in MIPS backend
|
||
|
||
PowerPC-specific
|
||
|
||
* [132]11591 ICE in gcc.dg/altivec-5.c
|
||
* [133]12028 powerpc-eabispe produces bad sCOND operation
|
||
* [134]14478 rs6000 geu/ltu patterns generate incorrect code
|
||
* [135]14567 long double and va_arg complex args
|
||
* [136]14715 Altivec stack layout may overlap gpr save with stack
|
||
temps
|
||
* [137]14902 (libstdc++) Stream checking functions fail when -pthread
|
||
option is used.
|
||
* [138]14924 Compiler ICE on valid code
|
||
* [139]14960 -maltivec affects vector return with -mabi=no-altivec
|
||
* [140]15106 vector varargs failure passing from altivec to
|
||
non-altivec code for -m32
|
||
* [141]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
|
||
half-word operation
|
||
* [142]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
|
||
and stvx
|
||
* [143]15662 Segmentation fault when an exception is thrown - even if
|
||
try and catch are specified
|
||
|
||
s390-specific
|
||
|
||
* [144]15054 Bad code due to overlapping stack temporaries
|
||
|
||
SPARC-specific
|
||
|
||
* [145]15783 ICE with union assignment in 64-bit mode
|
||
* [146]15626 GCC 3.4 emits "ld: warning: relocation error:
|
||
R_SPARC_UA32"
|
||
|
||
x86-64-specific
|
||
|
||
* [147]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
|
||
* [148]14723 Backported -march=nocona from mainline
|
||
* [149]15290 __float128 failed to pass to function properly
|
||
|
||
Cygwin/Mingw32-specific
|
||
|
||
* [150]15250 Option -mms-bitfields support on GCC 3.4 is not
|
||
conformant to MS layout
|
||
* [151]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
|
||
worker on windows32 targets
|
||
|
||
Bugs specific to embedded processors
|
||
|
||
* [152]8309 [m68k] -m5200 produces erroneous SImode set of short
|
||
varaible on stack
|
||
* [153]13250 [SH] Gcc code for rotation clobbers the register, but
|
||
gcc continues to use the register as if it was not clobbered
|
||
* [154]13803 [coldfire] movqi operand constraints too restrictivefor
|
||
TARGET_COLDFIRE
|
||
* [155]14093 [SH] ICE for code when using -mhitachi option in SH
|
||
* [156]14457 [m6811hc] ICE with simple c++ source
|
||
* [157]14542 [m6811hc] ICE on simple source
|
||
* [158]15100 [SH] cc1plus got hang-up on
|
||
libstdc++-v3/testsuite/abi_check.cc
|
||
* [159]15296 [CRIS] Delayed branch scheduling causing invalid code on
|
||
cris-*
|
||
* [160]15396 [SH] ICE with -O2 -fPIC
|
||
* [161]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
|
||
ColdFire
|
||
|
||
Testsuite problems (compiler not affected)
|
||
|
||
* [162]11610 libstdc++ testcases 27_io/* don't work properly remotely
|
||
* [163]15488 (libstdc++) possibly insufficient file permissions for
|
||
executing test suite
|
||
* [164]15489 (libstdc++) testsuite_files determined incorrectly
|
||
|
||
Documentation bugs
|
||
|
||
* [165]13928 (libstdc++) no whatis info in some man pages generated
|
||
by doxygen
|
||
* [166]14150 Ada documentation out of date
|
||
* [167]14949 (c++) Need to document method visibility changes
|
||
* [168]15123 libstdc++-doc: Allocators.3 manpage is empty
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.2
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Bootstrap failures and issues
|
||
|
||
* [169]16469 [mips-sgi-irix5.3] bootstrap fails in
|
||
libstdc++-v3/testsuite
|
||
* [170]16344 [hppa-linux-gnu] libstdc++'s PCH built by
|
||
profiledbootstrap does not work with the built compiler
|
||
* [171]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
|
||
|
||
Multi-platform internal compiler errors (ICEs)
|
||
|
||
* [172]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
|
||
cp_parser_class_specifier, in cp/parser.c
|
||
* [173]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
|
||
* [174]15461 (c++) ICE due to NRV and inlining
|
||
* [175]15890 (c++) ICE in c_expand_expr, in c-common.c
|
||
* [176]16180 ICE: segmentation fault in RTL optimization
|
||
* [177]16224 (c++) ICE in write_unscoped_name (template/namespace)
|
||
* [178]16408 ICE: in delete_insn, in cfgrtl.c
|
||
* [179]16529 (c++) ICE for: namespace-alias shall not be declared as
|
||
the name of any other entity
|
||
* [180]16698 (c++) ICE with exceptions and declaration of __cxa_throw
|
||
* [181]16706 (c++) ICE in finish_member_declaration, in
|
||
cp/semantics.c
|
||
* [182]16810 (c++) Legal C++ program with cast gives ICE in
|
||
build_ptrmemfunc
|
||
* [183]16851 (c++) ICE when throwing a comma expression
|
||
* [184]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
|
||
* [185]16904 (c++) ICE in finish_class_member_access_expr, in
|
||
cp/typeck.c
|
||
* [186]16905 (c++) ICE (segfault) with exceptions
|
||
* [187]16964 (c++) ICE in cp_parser_class_specifier due to
|
||
redefinition
|
||
* [188]17068 (c++) ICE: tree check: expected class 'd', have 'x'
|
||
(identifier_node) in dependent_template_p, in cp/pt.c
|
||
|
||
Preprocessor bugs
|
||
|
||
* [189]16366 Preprocessor option -remap causes memory corruption
|
||
|
||
Optimization
|
||
|
||
* [190]15345 unreferenced nested inline functions not optimized away
|
||
* [191]16590 Incorrect execution when compiling with -O2
|
||
* [192]16693 Bitwise AND is lost when used within a cast to an enum
|
||
of the same precision
|
||
* [193]17078 Jump into if(0) substatement fails
|
||
|
||
Problems in generated debug information
|
||
|
||
* [194]13956 incorrect stabs for nested local variables
|
||
|
||
C front end bugs
|
||
|
||
* [195]16684 GCC should not warn about redundant redeclarations of
|
||
built-ins
|
||
|
||
C++ compiler and library
|
||
|
||
* [196]12658 Thread safety problems in locale::global() and
|
||
locale::locale()
|
||
* [197]13092 g++ accepts invalid pointer-to-member conversion
|
||
* [198]15320 Excessive memory consumption
|
||
* [199]16246 Incorrect template argument deduction
|
||
* [200]16273 Memory exhausted when using nested classes and virtual
|
||
functions
|
||
* [201]16401 ostringstream in gcc 3.4.x very slow for big data
|
||
* [202]16411 undefined reference to
|
||
__gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
|
||
>::file()
|
||
* [203]16489 G++ incorrectly rejects use of a null constant integral
|
||
expression as a null constant pointer
|
||
* [204]16618 offsetof fails with constant member
|
||
* [205]16637 syntax error reported for valid input code
|
||
* [206]16717 __attribute__((constructor)) broken in C++
|
||
* [207]16813 compiler error in DEBUG version of range insertion
|
||
std::map::insert
|
||
* [208]16853 pointer-to-member initialization from incompatible one
|
||
accepted
|
||
* [209]16889 ambiguity is not detected
|
||
* [210]16959 Segmentation fault in ios_base::sync_with_stdio
|
||
|
||
Java compiler and library
|
||
|
||
* [211]7587 direct threaded interpreter not thread-safe
|
||
* [212]16473 ServerSocket accept() leaks file descriptors
|
||
* [213]16478 Hash synchronization deadlock with finalizers
|
||
|
||
Alpha-specific
|
||
|
||
* [214]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
|
||
* [215]16974 could not split insn (ice in final_scan_insn, in
|
||
final.c)
|
||
|
||
x86-specific
|
||
|
||
* [216]16298 ICE in output_operand
|
||
* [217]17113 ICE with SSE2 intrinsics
|
||
|
||
x86-64 specific
|
||
|
||
* [218]14697 libstdc++ couldn't find 32bit libgcc_s
|
||
|
||
MIPS-specific
|
||
|
||
* [219]15869 [mips64] No NOP after LW (with -mips1 -O0)
|
||
* [220]16325 [mips64] value profiling clobbers gp on mips
|
||
* [221]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
|
||
char[]s
|
||
* [222]16380 [mips64] Use of uninitialised register after dbra
|
||
conversion
|
||
* [223]16407 [mips64] Unaligned access to local variables
|
||
* [224]16643 [mips64] verify_local_live_at_start ICE after
|
||
crossjumping & cfgcleanup
|
||
|
||
ARM-specific
|
||
|
||
* [225]15927 THUMB -O2: strength-reduced iteration variable ends up
|
||
off by 1
|
||
* [226]15948 THUMB: ICE with non-commutative cbranch
|
||
* [227]17019 THUMB: bad switch statement in md code for
|
||
addsi3_cbranch_scratch
|
||
|
||
IA64-specific
|
||
|
||
* [228]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
|
||
(-mtune=merced)
|
||
* [229]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
|
||
(-mtune=itanium)
|
||
* [230]16278 Gcc failed to build Linux kernel with -mtune=merced
|
||
* [231]16414 ICE on valid code: typo in comparison of asm_noperands
|
||
result
|
||
* [232]16445 ICE on valid code: don't count ignored insns
|
||
* [233]16490 ICE (segfault) while compiling with -fprofile-use
|
||
* [234]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
|
||
|
||
PowerPC-specific
|
||
|
||
* [235]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
|
||
* [236]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
|
||
issue)
|
||
|
||
SPARC-specific
|
||
|
||
* [237]16199 ICE while compiling apache 2.0.49
|
||
* [238]16416 -m64 doesn't imply -mcpu=v9 anymore
|
||
* [239]16430 ICE when returning non-C aggregates larger than 16 bytes
|
||
|
||
Bugs specific to embedded processors
|
||
|
||
* [240]16379 [m32r] can't output large model function call of memcpy
|
||
* [241]17093 [m32r] ICE with -msdata=use -O0
|
||
* [242]17119 [m32r] ICE at switch case 0x8000
|
||
|
||
DJGPP-specific
|
||
|
||
* [243]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
|
||
|
||
Alpha Tru64-specific
|
||
|
||
* [244]16210 libstdc++ gratuitously omits "long long" I/O
|
||
|
||
Testsuite, documentation issues (compiler is not affected):
|
||
|
||
* [245]15488 (libstdc++) possibly insufficient file permissions for
|
||
executing test suite
|
||
* [246]16250 ada/doctools runs makeinfo even in release tarball
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.3
|
||
|
||
This is the [247]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Bootstrap failures
|
||
|
||
* [248]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
|
||
* [249]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
|
||
when undeclared
|
||
|
||
Internal compiler errors (ICEs) affecting multiple platforms
|
||
|
||
* [250]13948 (java) GCJ segmentation fault while compiling GL4Java
|
||
.class files
|
||
* [251]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
|
||
* [252]16301 (c++) ICE when "strong" attribute is attached to a using
|
||
directive
|
||
* [253]16566 ICE with flexible arrays
|
||
* [254]17023 ICE with nested functions in parameter declaration
|
||
* [255]17027 ICE with noreturn function in loop at -O2
|
||
* [256]17524 ICE in grokdeclarator, in cp/decl.c
|
||
* [257]17826 (c++) ICE in cp_tree_equal
|
||
|
||
C and optimization bugs
|
||
|
||
* [258]15526 -ftrapv aborts on 0 * (-1)
|
||
* [259]16999 #ident stopped working
|
||
* [260]17503 quadratic behaviour in invalid_mode_change_p
|
||
* [261]17581 Long long arithmetic fails inside a switch/case
|
||
statement when compiled with -O2
|
||
* [262]18129 -fwritable-strings doesn't work
|
||
|
||
C++ compiler and library bugs
|
||
|
||
* [263]10975 incorrect initial ostringstream::tellp()
|
||
* [264]11722 Unbuffered filebuf::sgetn is slow
|
||
* [265]14534 Unrecognizing static function as a template parameter
|
||
when its return value is also templated
|
||
* [266]15172 Copy constructor optimization in aggregate
|
||
initialization
|
||
* [267]15786 Bad error message for frequently occuring error.
|
||
* [268]16162 Rejects valid member-template-definition
|
||
* [269]16612 empty basic_strings can't live in shared memory
|
||
* [270]16715 std::basic_iostream is instantiated when used, even
|
||
though instantiations are already contained in libstdc++
|
||
* [271]16848 code in /ext/demangle.h appears broken
|
||
* [272]17132 GCC fails to eliminate function template specialization
|
||
when argument deduction fails
|
||
* [273]17259 One more _S_leaf incorrectly qualified with _RopeRep::
|
||
in ropeimpl.h
|
||
* [274]17327 use of `enumeral_type' in template type unification
|
||
* [275]17393 "unused variable '._0'" warning with -Wall
|
||
* [276]17501 Confusion with member templates
|
||
* [277]17537 g++ not passing -lstdc++ to linker when all command line
|
||
arguments are libraries
|
||
* [278]17585 usage of unqualified name of static member from within
|
||
class not allowed
|
||
* [279]17821 Poor diagnostic for using "." instead of "->"
|
||
* [280]17829 wrong error: call of overloaded function is ambiguous
|
||
* [281]17851 Misleading diagnostic for invalid function declarations
|
||
with undeclared types
|
||
* [282]17976 Destructor is called twice
|
||
* [283]18020 rejects valid definition of enum value in template
|
||
* [284]18093 bogus conflict in namespace aliasing
|
||
* [285]18140 C++ parser bug when using >> in templates
|
||
|
||
Fortran
|
||
|
||
* [286]17541 data statements with double precision constants fail
|
||
|
||
x86-specific
|
||
|
||
* [287]17853 -O2 ICE for MMX testcase
|
||
|
||
SPARC-specific
|
||
|
||
* [288]17245 ICE compiling gsl-1.5 statistics/lag1.c
|
||
|
||
Darwin-specific
|
||
|
||
* [289]17167 FATAL:Symbol L_foo$stub already defined.
|
||
|
||
AIX-specific
|
||
|
||
* [290]17277 could not catch an exception when specified -maix64
|
||
|
||
Solaris-specific
|
||
|
||
* [291]17505 <cmath> calls acosf(), ceilf(), and other functions
|
||
missing from system libraries
|
||
|
||
HP/UX specific:
|
||
|
||
* [292]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
|
||
|
||
ARM-specific
|
||
|
||
* [293]17384 ICE with mode attribute on structures
|
||
|
||
MIPS-specific
|
||
|
||
* [294]17770 No NOP after LWL with -mips1
|
||
|
||
Other embedded target specific
|
||
|
||
* [295]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
|
||
* [296]14064 [avr-elf] -fdata-sections triggers ICE
|
||
* [297]14678 [m68hc11-elf] gcc ICE
|
||
* [298]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
|
||
* [299]15790 [i686-coff] Alignment error building gcc with i686-coff
|
||
target
|
||
* [300]15886 [SH] Miscompilation with -O2 -fPIC
|
||
* [301]16884 [avr-elf] [fweb related] bug while initializing
|
||
variables
|
||
|
||
Bugs relating to debugger support
|
||
|
||
* [302]13841 missing debug info for _Complex function arguments
|
||
* [303]15860 [big-endian targets] No DW_AT_location debug info is
|
||
emitted for formal arguments to a function that uses "register"
|
||
qualifiers
|
||
|
||
Testsuite issues (compiler not affected)
|
||
|
||
* [304]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
|
||
* [305]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
|
||
* [306]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
|
||
testsuite
|
||
|
||
Documentation
|
||
|
||
* [307]15498 typo in gcc manual: non-existing locale example en_UK,
|
||
should be en_GB
|
||
* [308]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
|
||
document broken shell
|
||
* [309]16406 USE_LD_AS_NEEDED undocumented
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.4
|
||
|
||
This is the [310]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.5
|
||
|
||
This is the [311]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Bootstrap issues
|
||
|
||
* [312]24688 sco_math fixincl breaks math.h
|
||
|
||
C compiler bugs
|
||
|
||
* [313]17188 struct Foo { } redefinition
|
||
* [314]20187 wrong code for ((unsigned char)(unsigned long
|
||
long)((a?a:1)&(a*b)))?0:1)
|
||
* [315]21873 infinite warning loop on bad array initializer
|
||
* [316]21899 enum definition accepts values to be overriden
|
||
* [317]22061 ICE in find_function_data, in function.c
|
||
* [318]22308 Failure to diagnose violation of constraint 6.516p2
|
||
* [319]22458 ICE on missing brace
|
||
* [320]22589 ICE casting to long long
|
||
* [321]24101 Segfault with preprocessed source
|
||
|
||
C++ compiler and library bugs
|
||
|
||
* [322]10611 operations on vector mode not recognized in C++
|
||
* [323]13377 unexpected behavior of namespace usage directive
|
||
* [324]16002 Strange error message with new parser
|
||
* [325]17413 local classes as template argument
|
||
* [326]17609 spurious error message after using keyword
|
||
* [327]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
|
||
* [328]18124 ICE with invalid template template parameter
|
||
* [329]18155 typedef in template declaration not rejected
|
||
* [330]18177 ICE with const_cast for undeclared variable
|
||
* [331]18368 C++ error message regression
|
||
* [332]16378 ICE when returning a copy of a packed member
|
||
* [333]18466 int ::i; accepted
|
||
* [334]18512 ICE on invalid usage of template base class
|
||
* [335]18454 ICE when returning undefined type
|
||
* [336]18738 typename not allowed with non-dependent qualified name
|
||
* [337]18803 rejects access to operator() in template
|
||
* [338]19004 ICE in uses_template_parms, in cp/pt.c
|
||
* [339]19208 Spurious error about variably modified type
|
||
* [340]18253 bad error message / ICE for invalid template parameter
|
||
* [341]19608 ICE after friend function definition in local class
|
||
* [342]19884 ICE on explicit instantiation of a non-template
|
||
constructor
|
||
* [343]20153 ICE when C++ template function contains anonymous union
|
||
* [344]20563 Infinite loop in diagnostic (and ice after error
|
||
message)
|
||
* [345]20789 ICE with incomplete type in template
|
||
* [346]21336 Internal compiler error when using custom new operators
|
||
* [347]21768 ICE in error message due to violation of coding
|
||
conventions
|
||
* [348]21853 constness of pointer to data member ignored
|
||
* [349]21903 Default argument of template function causes a
|
||
compile-time error
|
||
* [350]21983 multiple diagnostics
|
||
* [351]21987 New testsuite failure
|
||
g++.dg/warn/conversion-function-1.C
|
||
* [352]22153 ICE on invalid template specialization
|
||
* [353]22172 Internal compiler error, seg fault.
|
||
* [354]21286 filebuf::xsgetn vs pipes
|
||
* [355]22233 ICE with wrong number of template parameters
|
||
* [356]22508 ICE after invalid operator new
|
||
* [357]22545 ICE with pointer to class member & user defined
|
||
conversion operator
|
||
* [358]23528 Wrong default allocator in ext/hash_map
|
||
* [359]23550 char_traits requirements/1.cc test bad math
|
||
* [360]23586 Bad diagnostic for invalid namespace-name
|
||
* [361]23624 ICE in invert_truthvalue, in fold-const.c
|
||
* [362]23639 Bad error message: not a member of '<declaration error>'
|
||
* [363]23797 ICE on typename outside template
|
||
* [364]23965 Bogus error message: no matching function for call to
|
||
'foo(<type error>)'
|
||
* [365]24052 &#`label_decl' not supported by dump_expr#<expression
|
||
error>
|
||
* [366]24580 virtual base class cause exception not to be caught
|
||
|
||
Problems in generated debug information
|
||
|
||
* [367]24267 Bad DWARF for altivec vectors
|
||
|
||
Optimizations issues
|
||
|
||
* [368]17810 ICE in verify_local_live_at_start
|
||
* [369]17860 Wrong generated code for loop with varying bound
|
||
* [370]21709 ICE on compile-time complex NaN
|
||
* [371]21964 broken tail call at -O2 or more
|
||
* [372]22167 Strange optimization bug when using -Os
|
||
* [373]22619 Compilation failure for real_const_1.f and
|
||
real_const_2.f90
|
||
* [374]23241 Invalid code generated for comparison of uchar to 255
|
||
* [375]23478 Miscompilation due to reloading of a var that is also
|
||
used in EH pad
|
||
* [376]24470 segmentation fault in cc1plus when compiling with -O
|
||
* [377]24950 ICE in operand_subword_force
|
||
|
||
Precompiled headers problems
|
||
|
||
* [378]14400 Cannot compile qt-x11-free-3.3.0
|
||
* [379]14940 PCH largefile test fails on various platforms
|
||
|
||
Preprocessor bugs
|
||
|
||
* [380]20239 ICE on empty preprocessed input
|
||
* [381]15220 "gcc -E -MM -MG" reports missing system headers in
|
||
source directory
|
||
|
||
Testsuite issues
|
||
|
||
* [382]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
|
||
i686-pc-linux-gnu
|
||
|
||
Alpha specific
|
||
|
||
* [383]21888 bootstrap failure with linker relaxation enabled
|
||
|
||
ARM specific
|
||
|
||
* [384]15342 [arm-linux]: ICE in verify_local_live_at_start
|
||
* [385]23985 Memory aliasing information incorrect in inlined memcpy
|
||
|
||
ColdFile specific
|
||
|
||
* [386]16719 Illegal move of byte into address register causes
|
||
compiler to ICE
|
||
|
||
HPPA specific
|
||
|
||
* [387]21723 ICE while building libgfortran
|
||
* [388]21841 -mhp-ld/-mgnu-ld documentation
|
||
|
||
IA-64 specific
|
||
|
||
* [389]23644 IA-64 hardware models and configuration options
|
||
documentation error
|
||
* [390]24718 Shared libgcc not used for linking by default
|
||
|
||
M68000 specific
|
||
|
||
* [391]18421 ICE in reload_cse_simplify_operands, in postreload.c
|
||
|
||
MIPS specific
|
||
|
||
* [392]20621 ICE in change_address_1, in emit-rtl.c
|
||
|
||
PowerPC and PowerPC64 specific
|
||
|
||
* [393]18583 error on valid code: const
|
||
__attribute__((altivec(vector__))) doesn't work in arrays
|
||
* [394]20191 ICE in reload_cse_simplify_operands
|
||
* [395]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
|
||
* [396]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
|
||
* [397]23404 gij trashes args of functions with more than 8 fp args
|
||
* [398]23539 C & C++ compiler generating misaligned references
|
||
regardless of compiler flags
|
||
* [399]24102 floatdisf2_internal2 broken
|
||
* [400]24465 -mminimal-toc miscompilation of __thread vars
|
||
|
||
Solaris specific
|
||
|
||
* [401]19933 Problem with define of HUGE_VAL in math_c99
|
||
* [402]21889 Native Solaris assembler cannot grok DTP-relative debug
|
||
symbols
|
||
|
||
SPARC specific
|
||
|
||
* [403]19300 PCH failures on sparc-linux
|
||
* [404]20301 Assembler labels have a leading "-"
|
||
* [405]20673 C PCH testsuite assembly comparison failure
|
||
|
||
x86 and x86_64 specific
|
||
|
||
* [406]18582 ICE with arrays of type V2DF
|
||
* [407]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
|
||
-fsched2-use-traces
|
||
* [408]21716 ICE in reg-stack.c's swap_rtx_condition
|
||
* [409]24315 amd64 fails -fpeephole2
|
||
__________________________________________________________________
|
||
|
||
GCC 3.4.6
|
||
|
||
This is the [410]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.4.6 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [411]GCC manuals. If that fails, the
|
||
[412]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [413]gcc@gcc.gnu.org. All of [414]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [415]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [416]maintained by the GCC team. Last modified
|
||
2018-09-30[417].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
|
||
2. http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
|
||
3. http://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
|
||
4. http://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
|
||
5. http://gcc.gnu.org/gcc-3.4/mips-abi.html
|
||
6. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
|
||
7. https://www.boost.org/
|
||
8. https://gcc.gnu.org/PR11953
|
||
9. https://gcc.gnu.org/PR8361
|
||
10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
|
||
11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
|
||
12. http://gcc.gnu.org/bugs/#cxx_rvalbind
|
||
13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
|
||
14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
|
||
15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
|
||
16. http://www.gnu.org/software/classpath/
|
||
17. http://www.eclipse.org/
|
||
18. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
|
||
19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
|
||
20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
|
||
21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
|
||
22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
|
||
23. http://gcc.gnu.org/gcc-3.4/mips-abi.html
|
||
24. http://gcc.gnu.org/gcc-3.4/powerpc-abi.html
|
||
25. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
|
||
26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
|
||
27. https://gcc.gnu.org/PR10129
|
||
28. https://gcc.gnu.org/PR14576
|
||
29. https://gcc.gnu.org/PR14760
|
||
30. https://gcc.gnu.org/PR14671
|
||
31. https://gcc.gnu.org/PR15093
|
||
32. https://gcc.gnu.org/PR15178
|
||
33. https://gcc.gnu.org/PR12753
|
||
34. https://gcc.gnu.org/PR13985
|
||
35. https://gcc.gnu.org/PR14810
|
||
36. https://gcc.gnu.org/PR14883
|
||
37. https://gcc.gnu.org/PR15044
|
||
38. https://gcc.gnu.org/PR15057
|
||
39. https://gcc.gnu.org/PR15064
|
||
40. https://gcc.gnu.org/PR15142
|
||
41. https://gcc.gnu.org/PR15159
|
||
42. https://gcc.gnu.org/PR15165
|
||
43. https://gcc.gnu.org/PR15193
|
||
44. https://gcc.gnu.org/PR15209
|
||
45. https://gcc.gnu.org/PR15227
|
||
46. https://gcc.gnu.org/PR15285
|
||
47. https://gcc.gnu.org/PR15299
|
||
48. https://gcc.gnu.org/PR15329
|
||
49. https://gcc.gnu.org/PR15550
|
||
50. https://gcc.gnu.org/PR15554
|
||
51. https://gcc.gnu.org/PR15640
|
||
52. https://gcc.gnu.org/PR15666
|
||
53. https://gcc.gnu.org/PR15696
|
||
54. https://gcc.gnu.org/PR15701
|
||
55. https://gcc.gnu.org/PR15761
|
||
56. https://gcc.gnu.org/PR15829
|
||
57. https://gcc.gnu.org/PR14538
|
||
58. https://gcc.gnu.org/PR12391
|
||
59. https://gcc.gnu.org/PR14649
|
||
60. https://gcc.gnu.org/PR15004
|
||
61. https://gcc.gnu.org/PR15749
|
||
62. https://gcc.gnu.org/PR10646
|
||
63. https://gcc.gnu.org/PR12077
|
||
64. https://gcc.gnu.org/PR13598
|
||
65. https://gcc.gnu.org/PR14211
|
||
66. https://gcc.gnu.org/PR14220
|
||
67. https://gcc.gnu.org/PR14245
|
||
68. https://gcc.gnu.org/PR14340
|
||
69. https://gcc.gnu.org/PR14600
|
||
70. https://gcc.gnu.org/PR14668
|
||
71. https://gcc.gnu.org/PR14775
|
||
72. https://gcc.gnu.org/PR14821
|
||
73. https://gcc.gnu.org/PR14930
|
||
74. https://gcc.gnu.org/PR14932
|
||
75. https://gcc.gnu.org/PR14950
|
||
76. https://gcc.gnu.org/PR14962
|
||
77. https://gcc.gnu.org/PR14975
|
||
78. https://gcc.gnu.org/PR15002
|
||
79. https://gcc.gnu.org/PR15025
|
||
80. https://gcc.gnu.org/PR15046
|
||
81. https://gcc.gnu.org/PR15069
|
||
82. https://gcc.gnu.org/PR15074
|
||
83. https://gcc.gnu.org/PR15083
|
||
84. https://gcc.gnu.org/PR15096
|
||
85. https://gcc.gnu.org/PR15287
|
||
86. https://gcc.gnu.org/PR15317
|
||
87. https://gcc.gnu.org/PR15337
|
||
88. https://gcc.gnu.org/PR15361
|
||
89. https://gcc.gnu.org/PR15412
|
||
90. https://gcc.gnu.org/PR15427
|
||
91. https://gcc.gnu.org/PR15471
|
||
92. https://gcc.gnu.org/PR15503
|
||
93. https://gcc.gnu.org/PR15507
|
||
94. https://gcc.gnu.org/PR15542
|
||
95. https://gcc.gnu.org/PR15565
|
||
96. https://gcc.gnu.org/PR15625
|
||
97. https://gcc.gnu.org/PR15629
|
||
98. https://gcc.gnu.org/PR15742
|
||
99. https://gcc.gnu.org/PR15775
|
||
100. https://gcc.gnu.org/PR15821
|
||
101. https://gcc.gnu.org/PR15862
|
||
102. https://gcc.gnu.org/PR15875
|
||
103. https://gcc.gnu.org/PR15877
|
||
104. https://gcc.gnu.org/PR15947
|
||
105. https://gcc.gnu.org/PR16020
|
||
106. https://gcc.gnu.org/PR16154
|
||
107. https://gcc.gnu.org/PR16174
|
||
108. https://gcc.gnu.org/PR14315
|
||
109. https://gcc.gnu.org/PR15151
|
||
110. https://gcc.gnu.org/PR7993
|
||
111. https://gcc.gnu.org/PR15228
|
||
112. https://gcc.gnu.org/PR15345
|
||
113. https://gcc.gnu.org/PR15945
|
||
114. https://gcc.gnu.org/PR15526
|
||
115. https://gcc.gnu.org/PR14690
|
||
116. https://gcc.gnu.org/PR15112
|
||
117. https://gcc.gnu.org/PR15067
|
||
118. https://gcc.gnu.org/PR1963
|
||
119. https://gcc.gnu.org/PR15717
|
||
120. https://gcc.gnu.org/PR14782
|
||
121. https://gcc.gnu.org/PR14828
|
||
122. https://gcc.gnu.org/PR15202
|
||
123. https://gcc.gnu.org/PR14610
|
||
124. https://gcc.gnu.org/PR14813
|
||
125. https://gcc.gnu.org/PR14857
|
||
126. https://gcc.gnu.org/PR15598
|
||
127. https://gcc.gnu.org/PR15653
|
||
128. https://gcc.gnu.org/PR15189
|
||
129. https://gcc.gnu.org/PR15331
|
||
130. https://gcc.gnu.org/PR16144
|
||
131. https://gcc.gnu.org/PR16176
|
||
132. https://gcc.gnu.org/PR11591
|
||
133. https://gcc.gnu.org/PR12028
|
||
134. https://gcc.gnu.org/PR14478
|
||
135. https://gcc.gnu.org/PR14567
|
||
136. https://gcc.gnu.org/PR14715
|
||
137. https://gcc.gnu.org/PR14902
|
||
138. https://gcc.gnu.org/PR14924
|
||
139. https://gcc.gnu.org/PR14960
|
||
140. https://gcc.gnu.org/PR15106
|
||
141. https://gcc.gnu.org/PR16026
|
||
142. https://gcc.gnu.org/PR15191
|
||
143. https://gcc.gnu.org/PR15662
|
||
144. https://gcc.gnu.org/PR15054
|
||
145. https://gcc.gnu.org/PR15783
|
||
146. https://gcc.gnu.org/PR15626
|
||
147. https://gcc.gnu.org/PR14326
|
||
148. https://gcc.gnu.org/PR14723
|
||
149. https://gcc.gnu.org/PR15290
|
||
150. https://gcc.gnu.org/PR15250
|
||
151. https://gcc.gnu.org/PR15551
|
||
152. https://gcc.gnu.org/PR8309
|
||
153. https://gcc.gnu.org/PR13250
|
||
154. https://gcc.gnu.org/PR13803
|
||
155. https://gcc.gnu.org/PR14093
|
||
156. https://gcc.gnu.org/PR14457
|
||
157. https://gcc.gnu.org/PR14542
|
||
158. https://gcc.gnu.org/PR15100
|
||
159. https://gcc.gnu.org/PR15296
|
||
160. https://gcc.gnu.org/PR15396
|
||
161. https://gcc.gnu.org/PR15782
|
||
162. https://gcc.gnu.org/PR11610
|
||
163. https://gcc.gnu.org/PR15488
|
||
164. https://gcc.gnu.org/PR15489
|
||
165. https://gcc.gnu.org/PR13928
|
||
166. https://gcc.gnu.org/PR14150
|
||
167. https://gcc.gnu.org/PR14949
|
||
168. https://gcc.gnu.org/PR15123
|
||
169. https://gcc.gnu.org/PR16469
|
||
170. https://gcc.gnu.org/PR16344
|
||
171. https://gcc.gnu.org/PR16842
|
||
172. https://gcc.gnu.org/PR12608
|
||
173. https://gcc.gnu.org/PR14492
|
||
174. https://gcc.gnu.org/PR15461
|
||
175. https://gcc.gnu.org/PR15890
|
||
176. https://gcc.gnu.org/PR16180
|
||
177. https://gcc.gnu.org/PR16224
|
||
178. https://gcc.gnu.org/PR16408
|
||
179. https://gcc.gnu.org/PR16529
|
||
180. https://gcc.gnu.org/PR16698
|
||
181. https://gcc.gnu.org/PR16706
|
||
182. https://gcc.gnu.org/PR16810
|
||
183. https://gcc.gnu.org/PR16851
|
||
184. https://gcc.gnu.org/PR16870
|
||
185. https://gcc.gnu.org/PR16904
|
||
186. https://gcc.gnu.org/PR16905
|
||
187. https://gcc.gnu.org/PR16964
|
||
188. https://gcc.gnu.org/PR17068
|
||
189. https://gcc.gnu.org/PR16366
|
||
190. https://gcc.gnu.org/PR15345
|
||
191. https://gcc.gnu.org/PR16590
|
||
192. https://gcc.gnu.org/PR16693
|
||
193. https://gcc.gnu.org/PR17078
|
||
194. https://gcc.gnu.org/PR13956
|
||
195. https://gcc.gnu.org/PR16684
|
||
196. https://gcc.gnu.org/PR12658
|
||
197. https://gcc.gnu.org/PR13092
|
||
198. https://gcc.gnu.org/PR15320
|
||
199. https://gcc.gnu.org/PR16246
|
||
200. https://gcc.gnu.org/PR16273
|
||
201. https://gcc.gnu.org/PR16401
|
||
202. https://gcc.gnu.org/PR16411
|
||
203. https://gcc.gnu.org/PR16489
|
||
204. https://gcc.gnu.org/PR16618
|
||
205. https://gcc.gnu.org/PR16637
|
||
206. https://gcc.gnu.org/PR16717
|
||
207. https://gcc.gnu.org/PR16813
|
||
208. https://gcc.gnu.org/PR16853
|
||
209. https://gcc.gnu.org/PR16889
|
||
210. https://gcc.gnu.org/PR16959
|
||
211. https://gcc.gnu.org/PR7587
|
||
212. https://gcc.gnu.org/PR16473
|
||
213. https://gcc.gnu.org/PR16478
|
||
214. https://gcc.gnu.org/PR10695
|
||
215. https://gcc.gnu.org/PR16974
|
||
216. https://gcc.gnu.org/PR16298
|
||
217. https://gcc.gnu.org/PR17113
|
||
218. https://gcc.gnu.org/PR14697
|
||
219. https://gcc.gnu.org/PR15869
|
||
220. https://gcc.gnu.org/PR16325
|
||
221. https://gcc.gnu.org/PR16357
|
||
222. https://gcc.gnu.org/PR16380
|
||
223. https://gcc.gnu.org/PR16407
|
||
224. https://gcc.gnu.org/PR16643
|
||
225. https://gcc.gnu.org/PR15927
|
||
226. https://gcc.gnu.org/PR15948
|
||
227. https://gcc.gnu.org/PR17019
|
||
228. https://gcc.gnu.org/PR16130
|
||
229. https://gcc.gnu.org/PR16142
|
||
230. https://gcc.gnu.org/PR16278
|
||
231. https://gcc.gnu.org/PR16414
|
||
232. https://gcc.gnu.org/PR16445
|
||
233. https://gcc.gnu.org/PR16490
|
||
234. https://gcc.gnu.org/PR16683
|
||
235. https://gcc.gnu.org/PR16195
|
||
236. https://gcc.gnu.org/PR16239
|
||
237. https://gcc.gnu.org/PR16199
|
||
238. https://gcc.gnu.org/PR16416
|
||
239. https://gcc.gnu.org/PR16430
|
||
240. https://gcc.gnu.org/PR16379
|
||
241. https://gcc.gnu.org/PR17093
|
||
242. https://gcc.gnu.org/PR17119
|
||
243. https://gcc.gnu.org/PR15928
|
||
244. https://gcc.gnu.org/PR16210
|
||
245. https://gcc.gnu.org/PR15488
|
||
246. https://gcc.gnu.org/PR16250
|
||
247. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
|
||
248. https://gcc.gnu.org/PR17369
|
||
249. https://gcc.gnu.org/PR17850
|
||
250. https://gcc.gnu.org/PR13948
|
||
251. https://gcc.gnu.org/PR14492
|
||
252. https://gcc.gnu.org/PR16301
|
||
253. https://gcc.gnu.org/PR16566
|
||
254. https://gcc.gnu.org/PR17023
|
||
255. https://gcc.gnu.org/PR17027
|
||
256. https://gcc.gnu.org/PR17524
|
||
257. https://gcc.gnu.org/PR17826
|
||
258. https://gcc.gnu.org/PR15526
|
||
259. https://gcc.gnu.org/PR16999
|
||
260. https://gcc.gnu.org/PR17503
|
||
261. https://gcc.gnu.org/PR17581
|
||
262. https://gcc.gnu.org/PR18129
|
||
263. https://gcc.gnu.org/PR10975
|
||
264. https://gcc.gnu.org/PR11722
|
||
265. https://gcc.gnu.org/PR14534
|
||
266. https://gcc.gnu.org/PR15172
|
||
267. https://gcc.gnu.org/PR15786
|
||
268. https://gcc.gnu.org/PR16162
|
||
269. https://gcc.gnu.org/PR16612
|
||
270. https://gcc.gnu.org/PR16715
|
||
271. https://gcc.gnu.org/PR16848
|
||
272. https://gcc.gnu.org/PR17132
|
||
273. https://gcc.gnu.org/PR17259
|
||
274. https://gcc.gnu.org/PR17327
|
||
275. https://gcc.gnu.org/PR17393
|
||
276. https://gcc.gnu.org/PR17501
|
||
277. https://gcc.gnu.org/PR17537
|
||
278. https://gcc.gnu.org/PR17585
|
||
279. https://gcc.gnu.org/PR17821
|
||
280. https://gcc.gnu.org/PR17829
|
||
281. https://gcc.gnu.org/PR17851
|
||
282. https://gcc.gnu.org/PR17976
|
||
283. https://gcc.gnu.org/PR18020
|
||
284. https://gcc.gnu.org/PR18093
|
||
285. https://gcc.gnu.org/PR18140
|
||
286. https://gcc.gnu.org/PR17541
|
||
287. https://gcc.gnu.org/PR17853
|
||
288. https://gcc.gnu.org/PR17245
|
||
289. https://gcc.gnu.org/PR17167
|
||
290. https://gcc.gnu.org/PR17277
|
||
291. https://gcc.gnu.org/PR17505
|
||
292. https://gcc.gnu.org/PR17684
|
||
293. https://gcc.gnu.org/PR17384
|
||
294. https://gcc.gnu.org/PR17770
|
||
295. https://gcc.gnu.org/PR11476
|
||
296. https://gcc.gnu.org/PR14064
|
||
297. https://gcc.gnu.org/PR14678
|
||
298. https://gcc.gnu.org/PR15583
|
||
299. https://gcc.gnu.org/PR15790
|
||
300. https://gcc.gnu.org/PR15886
|
||
301. https://gcc.gnu.org/PR16884
|
||
302. https://gcc.gnu.org/PR13841
|
||
303. https://gcc.gnu.org/PR15860
|
||
304. https://gcc.gnu.org/PR17465
|
||
305. https://gcc.gnu.org/PR17469
|
||
306. https://gcc.gnu.org/PR18138
|
||
307. https://gcc.gnu.org/PR15498
|
||
308. https://gcc.gnu.org/PR15747
|
||
309. https://gcc.gnu.org/PR16406
|
||
310. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
|
||
311. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
|
||
312. https://gcc.gnu.org/PR24688
|
||
313. https://gcc.gnu.org/PR17188
|
||
314. https://gcc.gnu.org/PR20187
|
||
315. https://gcc.gnu.org/PR21873
|
||
316. https://gcc.gnu.org/PR21899
|
||
317. https://gcc.gnu.org/PR22061
|
||
318. https://gcc.gnu.org/PR22208
|
||
319. https://gcc.gnu.org/PR22458
|
||
320. https://gcc.gnu.org/PR22589
|
||
321. https://gcc.gnu.org/PR24101
|
||
322. https://gcc.gnu.org/PR10611
|
||
323. https://gcc.gnu.org/PR13377
|
||
324. https://gcc.gnu.org/PR16002
|
||
325. https://gcc.gnu.org/PR17413
|
||
326. https://gcc.gnu.org/PR17609
|
||
327. https://gcc.gnu.org/PR17618
|
||
328. https://gcc.gnu.org/PR18124
|
||
329. https://gcc.gnu.org/PR18155
|
||
330. https://gcc.gnu.org/PR18177
|
||
331. https://gcc.gnu.org/PR18368
|
||
332. https://gcc.gnu.org/PR18378
|
||
333. https://gcc.gnu.org/PR18466
|
||
334. https://gcc.gnu.org/PR18512
|
||
335. https://gcc.gnu.org/PR18545
|
||
336. https://gcc.gnu.org/PR18738
|
||
337. https://gcc.gnu.org/PR18803
|
||
338. https://gcc.gnu.org/PR19004
|
||
339. https://gcc.gnu.org/PR19208
|
||
340. https://gcc.gnu.org/PR19253
|
||
341. https://gcc.gnu.org/PR19608
|
||
342. https://gcc.gnu.org/PR19884
|
||
343. https://gcc.gnu.org/PR20153
|
||
344. https://gcc.gnu.org/PR20563
|
||
345. https://gcc.gnu.org/PR20789
|
||
346. https://gcc.gnu.org/PR21336
|
||
347. https://gcc.gnu.org/PR21768
|
||
348. https://gcc.gnu.org/PR21853
|
||
349. https://gcc.gnu.org/PR21903
|
||
350. https://gcc.gnu.org/PR21983
|
||
351. https://gcc.gnu.org/PR21987
|
||
352. https://gcc.gnu.org/PR22153
|
||
353. https://gcc.gnu.org/PR22172
|
||
354. https://gcc.gnu.org/PR21286
|
||
355. https://gcc.gnu.org/PR22233
|
||
356. https://gcc.gnu.org/PR22508
|
||
357. https://gcc.gnu.org/PR22545
|
||
358. https://gcc.gnu.org/PR23528
|
||
359. https://gcc.gnu.org/PR23550
|
||
360. https://gcc.gnu.org/PR23586
|
||
361. https://gcc.gnu.org/PR23624
|
||
362. https://gcc.gnu.org/PR23639
|
||
363. https://gcc.gnu.org/PR23797
|
||
364. https://gcc.gnu.org/PR23965
|
||
365. https://gcc.gnu.org/PR24052
|
||
366. https://gcc.gnu.org/PR24580
|
||
367. https://gcc.gnu.org/PR24267
|
||
368. https://gcc.gnu.org/PR17810
|
||
369. https://gcc.gnu.org/PR17860
|
||
370. https://gcc.gnu.org/PR21709
|
||
371. https://gcc.gnu.org/PR21964
|
||
372. https://gcc.gnu.org/PR22167
|
||
373. https://gcc.gnu.org/PR22619
|
||
374. https://gcc.gnu.org/PR23241
|
||
375. https://gcc.gnu.org/PR23478
|
||
376. https://gcc.gnu.org/PR24470
|
||
377. https://gcc.gnu.org/PR24950
|
||
378. https://gcc.gnu.org/PR14400
|
||
379. https://gcc.gnu.org/PR14940
|
||
380. https://gcc.gnu.org/PR20239
|
||
381. https://gcc.gnu.org/PR15220
|
||
382. https://gcc.gnu.org/PR19275
|
||
383. https://gcc.gnu.org/PR21888
|
||
384. https://gcc.gnu.org/PR15342
|
||
385. https://gcc.gnu.org/PR23985
|
||
386. https://gcc.gnu.org/PR16719
|
||
387. https://gcc.gnu.org/PR21723
|
||
388. https://gcc.gnu.org/PR21841
|
||
389. https://gcc.gnu.org/PR23644
|
||
390. https://gcc.gnu.org/PR24718
|
||
391. https://gcc.gnu.org/PR18421
|
||
392. https://gcc.gnu.org/PR20621
|
||
393. https://gcc.gnu.org/PR18583
|
||
394. https://gcc.gnu.org/PR20191
|
||
395. https://gcc.gnu.org/PR22083
|
||
396. https://gcc.gnu.org/PR23070
|
||
397. https://gcc.gnu.org/PR23404
|
||
398. https://gcc.gnu.org/PR23539
|
||
399. https://gcc.gnu.org/PR24102
|
||
400. https://gcc.gnu.org/PR24465
|
||
401. https://gcc.gnu.org/PR19933
|
||
402. https://gcc.gnu.org/PR21889
|
||
403. https://gcc.gnu.org/PR19300
|
||
404. https://gcc.gnu.org/PR20301
|
||
405. https://gcc.gnu.org/PR20673
|
||
406. https://gcc.gnu.org/PR18582
|
||
407. https://gcc.gnu.org/PR19340
|
||
408. https://gcc.gnu.org/PR21716
|
||
409. https://gcc.gnu.org/PR24315
|
||
410. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
|
||
411. https://gcc.gnu.org/onlinedocs/
|
||
412. mailto:gcc-help@gcc.gnu.org
|
||
413. mailto:gcc@gcc.gnu.org
|
||
414. https://gcc.gnu.org/lists.html
|
||
415. https://www.fsf.org/
|
||
416. https://gcc.gnu.org/about.html
|
||
417. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.3/index.html
|
||
GCC 3.3 Release Series
|
||
|
||
May 03, 2005
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.3.6.
|
||
|
||
This release is a bug-fix release, containing fixes for regressions in
|
||
GCC 3.3.5 relative to previous releases of GCC.
|
||
|
||
This release is the last of the series 3.3.x.
|
||
|
||
The GCC 3.3 release series includes numerous [2]new features,
|
||
improvements, bug fixes, and other changes, thanks to an [3]amazing
|
||
group of volunteers.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 3.3.6
|
||
May 3, 2005 ([4]changes)
|
||
|
||
GCC 3.3.5
|
||
September 30, 2004 ([5]changes)
|
||
|
||
GCC 3.3.4
|
||
May 31, 2004 ([6]changes)
|
||
|
||
GCC 3.3.3
|
||
February 14, 2004 ([7]changes)
|
||
|
||
GCC 3.3.2
|
||
October 16, 2003 ([8]changes)
|
||
|
||
GCC 3.3.1
|
||
August 8, 2003 ([9]changes)
|
||
|
||
GCC 3.3
|
||
May 14, 2003 ([10]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [11]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [12]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [13]GCC
|
||
project web site or contact the [14]GCC development mailing list.
|
||
|
||
To obtain GCC please use [15]our mirror sites, or our CVS server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [16]GCC manuals. If that fails, the
|
||
[17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [21]maintained by the GCC team. Last modified
|
||
2018-09-30[22].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-3.3/changes.html
|
||
3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
4. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
|
||
5. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
|
||
6. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
|
||
7. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.3
|
||
8. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.2
|
||
9. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
|
||
10. http://gcc.gnu.org/gcc-3.3/changes.html
|
||
11. http://gcc.gnu.org/gcc-3.3/buildstat.html
|
||
12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
13. http://gcc.gnu.org/index.html
|
||
14. mailto:gcc@gcc.gnu.org
|
||
15. http://gcc.gnu.org/mirrors.html
|
||
16. https://gcc.gnu.org/onlinedocs/
|
||
17. mailto:gcc-help@gcc.gnu.org
|
||
18. mailto:gcc@gcc.gnu.org
|
||
19. https://gcc.gnu.org/lists.html
|
||
20. https://www.fsf.org/
|
||
21. https://gcc.gnu.org/about.html
|
||
22. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.3/changes.html
|
||
GCC 3.3 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 3.3 release series is [1]GCC 3.3.6.
|
||
|
||
Caveats
|
||
|
||
* The preprocessor no longer accepts multi-line string literals. They
|
||
were deprecated in 3.0, 3.1, and 3.2.
|
||
* The preprocessor no longer supports the -A- switch when appearing
|
||
alone. -A- followed by an assertion is still supported.
|
||
* Support for all the systems [2]obsoleted in GCC 3.1 has been
|
||
removed from GCC 3.3. See below for a [3]list of systems which are
|
||
obsoleted in this release.
|
||
* Checking for null format arguments has been decoupled from the rest
|
||
of the format checking mechanism. Programs which use the format
|
||
attribute may regain this functionality by using the new [4]nonnull
|
||
function attribute. Note that all functions for which GCC has a
|
||
built-in format attribute, an appropriate built-in nonnull
|
||
attribute is also applied.
|
||
* The DWARF (version 1) debugging format has been deprecated and will
|
||
be removed in a future version of GCC. Version 2 of the DWARF
|
||
debugging format will continue to be supported for the foreseeable
|
||
future.
|
||
* The C and Objective-C compilers no longer accept the "Naming Types"
|
||
extension (typedef foo = bar); it was already unavailable in C++.
|
||
Code which uses it will need to be changed to use the "typeof"
|
||
extension instead: typedef typeof(bar) foo. (We have removed this
|
||
extension without a period of deprecation because it has caused the
|
||
compiler to crash since version 3.0 and no one noticed until very
|
||
recently. Thus we conclude it is not in widespread use.)
|
||
* The -traditional C compiler option has been removed. It was
|
||
deprecated in 3.1 and 3.2. (Traditional preprocessing remains
|
||
available.) The <varargs.h> header, used for writing variadic
|
||
functions in traditional C, still exists but will produce an error
|
||
message if used.
|
||
* GCC 3.3.1 automatically places zero-initialized variables in the
|
||
.bss section on some operating systems. Versions of GNU Emacs up to
|
||
(and including) 21.3 will not work correctly when using this
|
||
optimization; you can use -fno-zero-initialized-in-bss to disable
|
||
it.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* A new scheme for accurately describing processor pipelines, the
|
||
[5]DFA scheduler, has been added.
|
||
* Pavel Nejedly, Charles University Prague, has contributed new file
|
||
format used by the edge coverage profiler (-fprofile-arcs).
|
||
The new format is robust and diagnoses common mistakes where
|
||
profiles from different versions (or compilations) of the program
|
||
are combined resulting in nonsensical profiles and slow code to
|
||
produced with profile feedback. Additionally this format allows
|
||
extra data to be gathered. Currently, overall statistics are
|
||
produced helping optimizers to identify hot spots of a program
|
||
globally replacing the old intra-procedural scheme and resulting in
|
||
better code. Note that the gcov tool from older GCC versions will
|
||
not be able to parse the profiles generated by GCC 3.3 and vice
|
||
versa.
|
||
* Jan Hubicka, SuSE Labs, has contributed a new superblock formation
|
||
pass enabled using -ftracer. This pass simplifies the control flow
|
||
of functions allowing other optimizations to do better job.
|
||
He also contributed the function reordering pass
|
||
(-freorder-functions) to optimize function placement using profile
|
||
feedback.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
C/ObjC/C++
|
||
|
||
* The preprocessor now accepts directives within macro arguments. It
|
||
processes them just as if they had not been within macro arguments.
|
||
* The separate ISO and traditional preprocessors have been completely
|
||
removed. The front end handles either type of preprocessed output
|
||
if necessary.
|
||
* In C99 mode preprocessor arithmetic is done in the precision of the
|
||
target's intmax_t, as required by that standard.
|
||
* The preprocessor can now copy comments inside macros to the output
|
||
file when the macro is expanded. This feature, enabled using the
|
||
-CC option, is intended for use by applications which place
|
||
metadata or directives inside comments, such as lint.
|
||
* The method of constructing the list of directories to be searched
|
||
for header files has been revised. If a directory named by a -I
|
||
option is a standard system include directory, the option is
|
||
ignored to ensure that the default search order for system
|
||
directories and the special treatment of system header files are
|
||
not defeated.
|
||
* A few more [6]ISO C99 features now work correctly.
|
||
* A new function attribute, nonnull, has been added which allows
|
||
pointer arguments to functions to be specified as requiring a
|
||
non-null value. The compiler currently uses this information to
|
||
issue a warning when it detects a null value passed in such an
|
||
argument slot.
|
||
* A new type attribute, may_alias, has been added. Accesses to
|
||
objects with types with this attribute are not subjected to
|
||
type-based alias analysis, but are instead assumed to be able to
|
||
alias any other type of objects, just like the char type.
|
||
|
||
C++
|
||
|
||
* Type based alias analysis has been implemented for C++ aggregate
|
||
types.
|
||
|
||
Objective-C
|
||
|
||
* Generate an error if Objective-C objects are passed by value in
|
||
function and method calls.
|
||
* When -Wselector is used, check the whole list of selectors at the
|
||
end of compilation, and emit a warning if a @selector() is not
|
||
known.
|
||
* Define __NEXT_RUNTIME__ when compiling for the NeXT runtime.
|
||
* No longer need to include objc/objc-class.h to compile self calls
|
||
in class methods (NeXT runtime only).
|
||
* New -Wundeclared-selector option.
|
||
* Removed selector bloating which was causing object files to be 10%
|
||
bigger on average (GNU runtime only).
|
||
* Using at run time @protocol() objects has been fixed in certain
|
||
situations (GNU runtime only).
|
||
* Type checking has been fixed and improved in many situations
|
||
involving protocols.
|
||
|
||
Java
|
||
|
||
* The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK
|
||
1.4) API.
|
||
* The JDK 1.4 assert facility has been implemented.
|
||
* The bytecode interpreter is now direct threaded and thus faster.
|
||
|
||
Fortran
|
||
|
||
* Fortran improvements are listed in [7]the Fortran documentation.
|
||
|
||
Ada
|
||
|
||
* Ada tasking now works with glibc 2.3.x threading libraries.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
* The following changes have been made to the HP-PA port:
|
||
+ The port now defaults to scheduling for the PA8000 series of
|
||
processors.
|
||
+ Scheduling support for the PA7300 processor has been added.
|
||
+ The 32-bit port now supports weak symbols under HP-UX 11.
|
||
+ The handling of initializers and finalizers has been improved
|
||
under HP-UX 11. The 64-bit port no longer uses collect2.
|
||
+ Dwarf2 EH support has been added to the 32-bit GNU/Linux port.
|
||
+ ABI fixes to correct the passing of small structures by value.
|
||
* The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to
|
||
use the DFA processor pipeline description.
|
||
* The following NetBSD configurations for the SuperH processor family
|
||
have been added:
|
||
+ SH3, big-endian, sh-*-netbsdelf*
|
||
+ SH3, little-endian, shle-*-netbsdelf*
|
||
+ SH5, SHmedia, big-endian, 32-bit default, sh5-*-netbsd*
|
||
+ SH5, SHmedia, little-endian, 32-bit default, sh5le-*-netbsd*
|
||
+ SH5, SHmedia, big-endian, 64-bit default, sh64-*-netbsd*
|
||
+ SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd*
|
||
* The following changes have been made to the IA-32/x86-64 port:
|
||
+ SSE2 and 3dNOW! intrinsics are now supported.
|
||
+ Support for thread local storage has been added to the IA-32
|
||
and x86-64 ports.
|
||
+ The x86-64 port has been significantly improved.
|
||
* The following changes have been made to the MIPS port:
|
||
+ All configurations now accept the -mabi switch. Note that you
|
||
will need appropriate multilibs for this option to work
|
||
properly.
|
||
+ ELF configurations will always pass an ABI flag to the
|
||
assembler, except when the MIPS EABI is selected.
|
||
+ -mabi=64 no longer selects MIPS IV code.
|
||
+ The -mcpu option, which was deprecated in 3.1 and 3.2, has
|
||
been removed from this release.
|
||
+ -march now changes the core ISA level. In previous releases,
|
||
it would change the use of processor-specific extensions, but
|
||
would leave the core ISA unchanged. For example, mips64-elf
|
||
-march=r8000 will now generate MIPS IV code.
|
||
+ Under most configurations, -mipsN now acts as a synonym for
|
||
-march.
|
||
+ There are some new preprocessor macros to describe the -march
|
||
and -mtune settings. See the documentation of those options
|
||
for details.
|
||
+ Support for the NEC VR-Series processors has been added. This
|
||
includes the 54xx, 5500, and 41xx series.
|
||
+ Support for the Sandcraft sr71k processor has been added.
|
||
* The following changes have been made to the S/390 port:
|
||
+ Support to build the Java runtime libraries has been added.
|
||
Java is now enabled by default on s390-*-linux* and
|
||
s390x-*-linux* targets.
|
||
+ Multilib support for the s390x-*-linux* target has been added;
|
||
this allows to build 31-bit binaries using the -m31 option.
|
||
+ Support for thread local storage has been added.
|
||
+ Inline assembler code may now use the 'Q' constraint to
|
||
specify memory operands without index register.
|
||
+ Various platform-specific performance improvements have been
|
||
implemented; in particular, the compiler now uses the BRANCH
|
||
ON COUNT family of instructions and makes more frequent use of
|
||
the TEST UNDER MASK family of instructions.
|
||
* The following changes have been made to the PowerPC port:
|
||
+ Support for IBM Power4 processor added.
|
||
+ Support for Motorola e500 SPE added.
|
||
+ Support for AIX 5.2 added.
|
||
+ Function and Data sections now supported on AIX.
|
||
+ Sibcall optimizations added.
|
||
* The support for H8 Tiny is added to the H8/300 port with -mn.
|
||
|
||
Obsolete Systems
|
||
|
||
Support for a number of older systems has been declared obsolete in GCC
|
||
3.3. Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
|
||
All configurations of the following processor architectures have been
|
||
declared obsolete:
|
||
* Matsushita MN10200, mn10200-*-*
|
||
* Motorola 88000, m88k-*-*
|
||
* IBM ROMP, romp-*-*
|
||
|
||
Also, some individual systems have been obsoleted:
|
||
* Alpha
|
||
+ Interix, alpha*-*-interix*
|
||
+ Linux libc1, alpha*-*-linux*libc1*
|
||
+ Linux ECOFF, alpha*-*-linux*ecoff*
|
||
* ARM
|
||
+ Generic a.out, arm*-*-aout*
|
||
+ Conix, arm*-*-conix*
|
||
+ "Old ABI," arm*-*-oabi
|
||
+ StrongARM/COFF, strongarm-*-coff*
|
||
* HPPA (PA-RISC)
|
||
+ Generic OSF, hppa1.0-*-osf*
|
||
+ Generic BSD, hppa1.0-*-bsd*
|
||
+ HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
|
||
+ HiUX, hppa*-*-hiux*
|
||
+ Mach Lites, hppa*-*-lites*
|
||
* Intel 386 family
|
||
+ Windows NT 3.x, i?86-*-win32
|
||
* MC68000 family
|
||
+ HP systems, m68000-hp-bsd* and m68k-hp-bsd*
|
||
+ Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and
|
||
m68k-sun-mach*
|
||
+ AT&T systems, m68000-att-sysv*
|
||
+ Atari systems, m68k-atari-sysv*
|
||
+ Motorola systems, m68k-motorola-sysv*
|
||
+ NCR systems, m68k-ncr-sysv*
|
||
+ Plexus systems, m68k-plexus-sysv*
|
||
+ Commodore systems, m68k-cbm-sysv*
|
||
+ Citicorp TTI, m68k-tti-*
|
||
+ Unos, m68k-crds-unos*
|
||
+ Concurrent RTU, m68k-ccur-rtu*
|
||
+ Linux a.out, m68k-*-linux*aout*
|
||
+ Linux libc1, m68k-*-linux*libc1*
|
||
+ pSOS, m68k-*-psos*
|
||
* MIPS
|
||
+ Generic ECOFF, mips*-*-ecoff*
|
||
+ SINIX, mips-sni-sysv4
|
||
+ Orion RTEMS, mips64orion-*-rtems*
|
||
* National Semiconductor 32000
|
||
+ OpenBSD, ns32k-*-openbsd*
|
||
* POWER (aka RS/6000) and PowerPC
|
||
+ AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
|
||
+ Bull BOSX, rs6000-bull-bosx
|
||
+ Generic Mach, rs6000-*-mach*
|
||
+ Generic SysV, powerpc*-*-sysv*
|
||
+ Linux libc1, powerpc*-*-linux*libc1*
|
||
* Sun SPARC
|
||
+ Generic a.out, sparc-*-aout*, sparclet-*-aout*,
|
||
sparclite-*-aout*, and sparc86x-*-aout*
|
||
+ NetBSD a.out, sparc-*-netbsd*aout*
|
||
+ Generic BSD, sparc-*-bsd*
|
||
+ ChorusOS, sparc-*-chorusos*
|
||
+ Linux a.out, sparc-*-linux*aout*
|
||
+ Linux libc1, sparc-*-linux*libc1*
|
||
+ LynxOS, sparc-*-lynxos*
|
||
+ Solaris on HAL hardware, sparc-hal-solaris2*
|
||
+ SunOS versions 3 and 4, sparc-*-sunos[34]*
|
||
* NEC V850
|
||
+ RTEMS, v850-*-rtems*
|
||
* VAX
|
||
+ VMS, vax-*-vms*
|
||
|
||
Documentation improvements
|
||
|
||
Other significant improvements
|
||
|
||
* Almost all front-end dependencies in the compiler have been
|
||
separated out into a set of language hooks. This should make adding
|
||
a new front end clearer and easier.
|
||
* One effect of removing the separate preprocessor is a small
|
||
increase in the robustness of the compiler in general, and the
|
||
maintainability of target descriptions. Previously target-specific
|
||
built-in macros and others, such as __FAST_MATH__, had to be
|
||
handled with so-called specs that were hard to maintain. Often they
|
||
would fail to behave properly when conflicting options were
|
||
supplied on the command line, and define macros in the user's
|
||
namespace even when strict ISO compliance was requested.
|
||
Integrating the preprocessor has cleanly solved these issues.
|
||
* The Makefile suite now supports redirection of make install by
|
||
means of the variable DESTDIR.
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3
|
||
|
||
Detailed release notes for the GCC 3.3 release follow.
|
||
|
||
Bug Fixes
|
||
|
||
bootstrap failures
|
||
|
||
* [8]10140 cross compiler build failures: missing __mempcpy (DUP:
|
||
[9]10198,[10]10338)
|
||
|
||
Internal compiler errors (multi-platform)
|
||
|
||
* [11]3581 large string causes segmentation fault in cc1
|
||
* [12]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
|
||
* [13]5533 (c++) ICE when processing std::accumulate(begin, end,
|
||
init, invalid_op)
|
||
* [14]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
|
||
* [15]6412 (c++) ICE in retrieve_specialization
|
||
* [16]6620 (c++) partial template specialization causes an ICE
|
||
(segmentation fault)
|
||
* [17]6663 (c++) ICE with attribute aligned
|
||
* [18]7068 ICE with incomplete types
|
||
* [19]7083 (c++) ICE using -gstabs with dodgy class derivation
|
||
* [20]7647 (c++) ICE when data member has the name of the enclosing
|
||
class
|
||
* [21]7675 ICE in fixup_var_refs_1
|
||
* [22]7718 'complex' template instantiation causes ICE
|
||
* [23]8116 (c++) ICE in member template function
|
||
* [24]8358 (ada) Ada compiler accesses freed memory, crashes
|
||
* [25]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
|
||
fault
|
||
* [26]8564 (c++) ICE in find_function_data, in function.c
|
||
* [27]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
|
||
* [28]8766 (c++) ICE after failed initialization of static template
|
||
variable
|
||
* [29]8803 ICE in instantiate_virtual_regs_1, in function.c
|
||
* [30]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
|
||
* [31]8906 (c++) ICE (Segmentation fault) when parsing nested-class
|
||
definition
|
||
* [32]9216 (c++) ICE on missing template parameter
|
||
* [33]9261 (c++) ICE in arg_assoc, in cp/decl2.c
|
||
* [34]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
|
||
loop
|
||
* [35]9429 (c++) ICE in template instantiation with a pointered new
|
||
operator
|
||
* [36]9516 Internal error when using a big array
|
||
* [37]9600 (c++) ICE with typedefs in template class
|
||
* [38]9629 (c++) virtual inheritance segfault
|
||
* [39]9672 (c++) ICE: Error reporting routines re-entered
|
||
* [40]9749 (c++) ICE in write_expression on invalid function
|
||
prototype
|
||
* [41]9794 (fortran) ICE: floating point exception during constant
|
||
folding
|
||
* [42]9829 (c++) Missing colon in nested namespace usage causes ICE
|
||
* [43]9916 (c++) ICE with noreturn function in ?: statement
|
||
* [44]9936 ICE with local function and variable-length 2d array
|
||
* [45]10262 (c++) cc1plus crashes with large generated code
|
||
* [46]10278 (c++) ICE in parser for invalid code
|
||
* [47]10446 (c++) ICE on definition of nonexistent member function of
|
||
nested class in a class template
|
||
* [48]10451 (c++) ICE in grokdeclarator on spurious mutable
|
||
declaration
|
||
* [49]10506 (c++) ICE in build_new at cp/init.c with
|
||
-fkeep-inline-functions and multiple inheritance
|
||
* [50]10549 (c++) ICE in store_bit_field on bitfields that exceed the
|
||
precision of the declared type
|
||
|
||
Optimization bugs
|
||
|
||
* [51]2001 Inordinately long compile times in reload CSE regs
|
||
* [52]2391 Exponential compilation time explosion in combine
|
||
* [53]2960 Duplicate loop conditions even with -Os
|
||
* [54]4046 redundant conditional branch
|
||
* [55]6405 Loop-unrolling related performance regressions
|
||
* [56]6798 very long compile time with large case-statement
|
||
* [57]6871 const objects shouldn't be moved to .bss
|
||
* [58]6909 problem w/ -Os on modified loop-2c.c test case
|
||
* [59]7189 gcc -O2 -Wall does not print ``control reaches end of
|
||
non-void function'' warning
|
||
* [60]7642 optimization problem with signbit()
|
||
* [61]8634 incorrect code for inlining of memcpy under -O2
|
||
* [62]8750 Cygwin prolog generation erroneously emitting __alloca as
|
||
regular function call
|
||
|
||
C front end
|
||
|
||
* [63]2161 long if-else cascade overflows parser stack
|
||
* [64]4319 short accepted on typedef'd char
|
||
* [65]8602 incorrect line numbers in warning messages when using
|
||
inline functions
|
||
* [66]9177 -fdump-translation-unit: C front end deletes function_decl
|
||
AST nodes and breaks debugging dumps
|
||
* [67]9853 miscompilation of non-constant structure initializer
|
||
|
||
c++ compiler and library
|
||
|
||
* [68]45 legal template specialization code is rejected (DUP:
|
||
[69]3784)
|
||
* [70]764 lookup failure: friend operator and dereferencing a pointer
|
||
and templates (DUP: [71]5116)
|
||
* [72]2862 gcc accepts invalid explicit instantiation syntax (DUP:
|
||
2863)
|
||
* [73]3663 G++ doesn't check access control during template
|
||
instantiation
|
||
* [74]3797 gcc fails to emit explicit specialization of a template
|
||
member
|
||
* [75]3948 Two destructors are called when no copy destructor is
|
||
defined (ABI change)
|
||
* [76]4137 Conversion operator within template is not accepted
|
||
* [77]4361 bogus ambiguity taking the address of a member template
|
||
* [78]4802 g++ accepts illegal template code (access to private
|
||
member; DUP: [79]5837)
|
||
* [80]4803 inline function is used but never defined, and g++ does
|
||
not object
|
||
* [81]5094 Partial specialization cannot be friend?
|
||
* [82]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
|
||
* [83]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
|
||
time
|
||
* [84]7015 certain __asm__ constructs rejected
|
||
* [85]7086 compile time regression (quadratic behavior in
|
||
fixup_var_refs)
|
||
* [86]7099 G++ doesn't set the noreturn attribute on std::exit and
|
||
std::abort
|
||
* [87]7247 copy constructor missing when inlining enabled (invalid
|
||
optimization?)
|
||
* [88]7441 string array initialization compilation time regression
|
||
from seconds to minutes
|
||
* [89]7768 __PRETTY_FUNCTION__ for template destructor is wrong
|
||
* [90]7804 bad printing of floating point constant in warning message
|
||
* [91]8099 Friend classes and template specializations
|
||
* [92]8117 member function pointers and multiple inheritance
|
||
* [93]8205 using declaration and multiple inheritance
|
||
* [94]8645 unnecessary non-zero checks in stl_tree.h
|
||
* [95]8724 explicit destructor call for incomplete class allowed
|
||
* [96]8805 compile time regression with many member variables
|
||
* [97]8691 -O3 and -fno-implicit-templates are incompatible
|
||
* [98]8700 unhelpful error message for binding temp to reference
|
||
* [99]8724 explicit destructor call for incomplete class allowed
|
||
* [100]8949 numeric_limits<>::denorm_min() and is_iec559 problems
|
||
* [101]9016 Failure to consistently constant fold "constant" C++
|
||
objects
|
||
* [102]9053 g++ confused about ambiguity of overloaded function
|
||
templates
|
||
* [103]9152 undefined virtual thunks
|
||
* [104]9182 basic_filebuf<> does not report errors in codecvt<>::out
|
||
* [105]9297 data corruption due to codegen bug (when copying.)
|
||
* [106]9318 i/ostream::operator>>/<<(streambuf*) broken
|
||
* [107]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
|
||
* [108]9400 bogus -Wshadow warning: shadowed declaration of this in
|
||
local classes
|
||
* [109]9424 i/ostream::operator>>/<<(streambuf*) drops characters
|
||
* [110]9425 filebuf::pbackfail broken (DUP: [111]9439)
|
||
* [112]9474 GCC freezes in compiling a weird code mixing <iostream>
|
||
and <iostream.h>
|
||
* [113]9548 Incorrect results from setf(ios::fixed) and precision(-1)
|
||
[114][DR 231]
|
||
* [115]9555 ostream inserters fail to set badbit on exception
|
||
* [116]9561 ostream inserters rethrow exception of wrong type
|
||
* [117]9563 ostream::sentry returns true after a failed preparation
|
||
* [118]9582 one-definition rule violation in std::allocator
|
||
* [119]9622 __PRETTY_FUNCTION__ incorrect in template destructors
|
||
* [120]9683 bug in initialization chains for static const variables
|
||
from template classes
|
||
* [121]9791 -Woverloaded-virtual reports hiding of destructor
|
||
* [122]9817 collate::compare doesn't handle nul characters
|
||
* [123]9825 filebuf::sputbackc breaks sbumpc
|
||
* [124]9826 operator>>(basic_istream, basic_string) fails to compile
|
||
with custom traits
|
||
* [125]9924 Multiple using statements for builtin functions not
|
||
allowed
|
||
* [126]9946 destructor is not called for temporary object
|
||
* [127]9964 filebuf::close() sometimes fails to close file
|
||
* [128]9988 filebuf::overflow writes EOF to file
|
||
* [129]10033 optimization breaks polymorphic references w/ typeid
|
||
operator
|
||
* [130]10097 filebuf::underflow drops characters
|
||
* [131]10132 filebuf destructor can throw exceptions
|
||
* [132]10180 gcc fails to warn about non-inlined function
|
||
* [133]10199 method parametrized by template does not work everywhere
|
||
* [134]10300 use of array-new (nothrow) in segfaults on NULL return
|
||
* [135]10427 Stack corruption with variable-length automatic arrays
|
||
and virtual destructors
|
||
* [136]10503 Compilation never stops in fixed_type_or_null
|
||
|
||
Objective-C
|
||
|
||
* [137]5956 selectors aren't matched properly when added to the
|
||
selector table
|
||
|
||
Fortran compiler and library
|
||
|
||
* [138]1832 list directed i/o overflow hangs, -fbounds-check doesn't
|
||
detect
|
||
* [139]3924 g77 generates code that is rejected by GAS if COFF debug
|
||
info requested
|
||
* [140]5634 doc: explain that configure --prefix=~/... does not work
|
||
* [141]6367 multiple repeat counts confuse namelist read into array
|
||
* [142]6491 Logical operations error on logicals when using
|
||
-fugly-logint
|
||
* [143]6742 Generation of C++ Prototype for FORTRAN and extern "C"
|
||
* [144]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
|
||
on irix6.5
|
||
* [145]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
|
||
assume a direct access file
|
||
* [146]7278 g77 "bug"; the executable misbehaves (with -O2
|
||
-fno-automatic)
|
||
* [147]7384 DATE_AND_TIME milliseconds field inactive on Windows
|
||
* [148]7388 Incorrect output with 0-based array of characters
|
||
* [149]8587 Double complex zero ** double precision number -> NaN
|
||
instead of zero
|
||
* [150]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
|
||
unknown register name line-length-none
|
||
* [151]10197 Direct access files not unformatted by default
|
||
|
||
Java compiler and library
|
||
|
||
* [152]6005 gcj fails to build rhug on alpha
|
||
* [153]6389 System.getProperty("") should always throw an
|
||
IllegalArgumentException
|
||
* [154]6576 java.util.ResourceBundle.getResource ignores locale
|
||
* [155]6652 new java.io.File("").getCanonicalFile() throws exception
|
||
* [156]7060 getMethod() doesn't search super interface
|
||
* [157]7073 bytecode interpreter gives wrong answer for interface
|
||
getSuperclass()
|
||
* [158]7180 possible bug in
|
||
javax.naming.spi.NamingManager.getPlusPath()
|
||
* [159]7416 java.security startup refs "GNU libgcj.security"
|
||
* [160]7570 Runtime.exec with null envp: child doesn't inherit parent
|
||
env (DUP: [161]7578)
|
||
* [162]7611 Internal error while compiling libjava with -O
|
||
* [163]7709 NullPointerException in _Jv_ResolvePoolEntry
|
||
* [164]7766 ZipInputStream.available returns 0 immediately after
|
||
construction
|
||
* [165]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
|
||
* [166]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
|
||
* [167]8142 '$' in class names vs. dlopen 'dynamic string tokens'
|
||
* [168]8234 ZipInputStream chokes when InputStream.read() returns
|
||
small chunks
|
||
* [169]8415 reflection bug: exception info for Method
|
||
* [170]8481 java.Random.nextInt(int) may return negative
|
||
* [171]8593 Error reading GZIPped files with BufferedReader
|
||
* [172]8759 java.beans.Introspector has no flushCaches() or
|
||
flushFromCaches() methods
|
||
* [173]8997 spin() calls Thread.sleep
|
||
* [174]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
|
||
instead of the root content of C:
|
||
* [175]9254 java::lang::Object::wait(), threads-win32.cc returns
|
||
wrong return codes
|
||
* [176]9271 Severe bias in java.security.SecureRandom
|
||
|
||
Ada compiler and library
|
||
|
||
* [177]6767 make gnatlib-shared fails on -laddr2line
|
||
* [178]9911 gnatmake fails to link when GCC configured with
|
||
--with-sjlj-exceptions=yes
|
||
* [179]10020 Can't bootstrap gcc on AIX with Ada enabled
|
||
* [180]10546 Ada tasking not working on Red Hat 9
|
||
|
||
preprocessor
|
||
|
||
* [181]7029 preprocessor should ignore #warning with -M
|
||
|
||
ARM-specific
|
||
|
||
* [182]2903 [arm] Optimization bug with long long arithmetic
|
||
* [183]7873 arm-linux-gcc fails when assigning address to a bit field
|
||
|
||
FreeBSD-specific
|
||
|
||
* [184]7680 float functions undefined in math.h/cmath with #define
|
||
_XOPEN_SOURCE
|
||
|
||
HP-UX or HP-PA-specific
|
||
|
||
* [185]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
|
||
* [186]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
|
||
fputc_unlocked
|
||
* [187]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
|
||
|
||
m68hc11-specific
|
||
|
||
* [188]6744 Bad assembler code generated: reference to pseudo
|
||
register z
|
||
* [189]7361 Internal compiler error in reload_cse_simplify_operands,
|
||
in reload1.c
|
||
|
||
MIPS-specific
|
||
|
||
* [190]9496 [mips-linux] bug in optimizer?
|
||
|
||
PowerPC-specific
|
||
|
||
* [191]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
|
||
space
|
||
* [192]8480 reload ICEs for LAPACK code on powerpc64-linux
|
||
* [193]8784 [AIX] Internal compiler error in simplify_gen_subreg
|
||
* [194]10315 [powerpc] ICE: in extract_insn, in recog.c
|
||
|
||
SPARC-specific
|
||
|
||
* [195]10267 (documentation) Wrong build instructions for
|
||
*-*-solaris2*
|
||
|
||
x86-specific (Intel/AMD)
|
||
|
||
* [196]7916 ICE in instantiate_virtual_register_1
|
||
* [197]7926 (c++) i486 instructions in header files make c++ programs
|
||
crash on i386
|
||
* [198]8555 ICE in gen_split_1231
|
||
* [199]8994 ICE with -O -march=pentium4
|
||
* [200]9426 ICE with -fssa -funroll-loops -fprofile-arcs
|
||
* [201]9806 ICE in inline assembly with -fPIC flag
|
||
* [202]10077 gcc -msse2 generates movd to move dwords between xmm
|
||
regs
|
||
* [203]10233 64-bit comparison only comparing bottom 32-bits
|
||
* [204]10286 type-punning doesn't work with __m64 and -O
|
||
* [205]10308 [x86] ICE with -O -fgcse or -O2
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.1
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.3.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
Bootstrap failures
|
||
|
||
* [206]11272 [Solaris] make bootstrap fails while building libstdc++
|
||
|
||
Internal compiler errors (multi-platform)
|
||
|
||
* [207]5754 ICE on invalid nested template class
|
||
* [208]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
|
||
and --enable-checking
|
||
* [209]6949 (c++) ICE in tsubst_decl, in cp/pt.c
|
||
* [210]7053 (c++) ICE when declaring a function already defined as a
|
||
friend method of a template class
|
||
* [211]8164 (c++) ICE when using different const expressions as
|
||
template parameter
|
||
* [212]8384 (c++) ICE in is_base_type, in dwarf2out.c
|
||
* [213]9559 (c++) ICE with invalid initialization of a static const
|
||
* [214]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
|
||
when redeclaring a static member variable
|
||
* [215]9864 (fortran) ICE in add_abstract_origin_attribute, in
|
||
dwarfout.c with -g -O -finline-functions
|
||
* [216]10432 (c++) ICE in poplevel, in cp/decl.c
|
||
* [217]10475 ICE in subreg_highpart_offset for code with long long
|
||
* [218]10635 (c++) ICE when dereferencing an incomplete type casted
|
||
from a void pointer
|
||
* [219]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
|
||
instantiating static member variables
|
||
* [220]10700 ICE in copy_to_mode_reg on 64-bit targets
|
||
* [221]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
|
||
* [222]10796 (c++) ICE when defining an enum with two values: -1 and
|
||
MAX_INT_64BIT
|
||
* [223]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
|
||
sched.c
|
||
* [224]10939 (c++) ICE with template code
|
||
* [225]10956 (c++) ICE when specializing a template member function
|
||
of a template class, in tsubst, in cp/pt.c
|
||
* [226]11041 (c++) ICE: const myclass &x = *x; (when operator*()
|
||
defined)
|
||
* [227]11059 (c++) ICE with empty union
|
||
* [228]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
|
||
-O2 -fnon-call-exceptions
|
||
* [229]11105 (c++) ICE in mangle_conv_op_name_for_type
|
||
* [230]11149 (c++) ICE on error when instantiation with call function
|
||
of a base type
|
||
* [231]11228 (c++) ICE on new-expression using array operator new and
|
||
default-initialization
|
||
* [232]11282 (c++) Infinite memory usage after syntax error
|
||
* [233]11301 (fortran) ICE with -fno-globals
|
||
* [234]11308 (c++) ICE when using an enum type name as if it were a
|
||
class or namespace
|
||
* [235]11473 (c++) ICE with -gstabs when empty struct inherits from
|
||
an empty struct
|
||
* [236]11503 (c++) ICE when instantiating template with ADDR_EXPR
|
||
* [237]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
|
||
template member functions
|
||
|
||
Optimization bugs
|
||
|
||
* [238]11198 -O2 -frename-registers generates wrong code (aliasing
|
||
problem)
|
||
* [239]11304 Wrong code production with -fomit-frame-pointer
|
||
* [240]11381 volatile memory access optimized away
|
||
* [241]11536 [strength-reduce] -O2 optimization produces wrong code
|
||
* [242]11557 constant folding bug generates wrong code
|
||
|
||
C front end
|
||
|
||
* [243]5897 No warning for statement after return
|
||
* [244]11279 DWARF-2 output mishandles large enums
|
||
|
||
Preprocessor bugs
|
||
|
||
* [245]11022 no warning for non-compatible macro redefinition
|
||
|
||
C++ compiler and library
|
||
|
||
* [246]2330 static_cast<>() to a private base is allowed
|
||
* [247]5388 Incorrect message "operands to ?: have different types"
|
||
* [248]5390 Libiberty fails to demangle multi-digit template
|
||
parameters
|
||
* [249]7877 Incorrect parameter passing to specializations of member
|
||
function templates
|
||
* [250]9393 Anonymous namespaces and compiling the same file twice
|
||
* [251]10032 -pedantic converts some errors to warnings
|
||
* [252]10468 const typeof(x) is non-const, but only in templates
|
||
* [253]10527 confused error message with "new int()" parameter
|
||
initializer
|
||
* [254]10679 parameter MIN_INLINE_INSNS is not honored
|
||
* [255]10682 gcc chokes on a typedef for an enum inside a class
|
||
template
|
||
* [256]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
|
||
0.
|
||
* [257]10845 template member function (with nested template as
|
||
parameter) cannot be called anymore if another unrelated template
|
||
member function is defined
|
||
* [258]10849 Cannot define an out-of-class specialization of a
|
||
private nested template class
|
||
* [259]10888 Suppress -Winline warnings for system headers
|
||
* [260]10929 -Winline warns about functions for which no definition
|
||
is visible
|
||
* [261]10931 valid conversion static_cast<const unsigned
|
||
int&>(lvalue-of-type-int) is rejected
|
||
* [262]10940 Bad code with explicit specialization
|
||
* [263]10968 If member function implicitly instantiated, explicit
|
||
instantiation of class fails to instantiate it
|
||
* [264]10990 Cannot convert with dynamic_cast<> to a private base
|
||
class from within a member function
|
||
* [265]11039 Bad interaction between implicit typename deprecation
|
||
and friendship
|
||
* [266]11062 (libstdc++) avoid __attribute__ ((unused)); say
|
||
"__unused__" instead
|
||
* [267]11095 C++ iostream manipulator causes segfault when called
|
||
with negative argument
|
||
* [268]11098 g++ doesn't emit complete debugging information for
|
||
local variables in destructors
|
||
* [269]11137 GNU/Linux shared library constructors not called unless
|
||
there's one global object
|
||
* [270]11154 spurious ambiguity report for template class
|
||
specialization
|
||
* [271]11329 Compiler cannot find user defined implicit typecast
|
||
* [272]11332 Spurious error with casts in ?: expression
|
||
* [273]11431 static_cast behavior with subclasses when default
|
||
constructor available
|
||
* [274]11528 money_get facet does not accept "$.00" as valid
|
||
* [275]11546 Type lookup problems in out-of-line definition of a
|
||
class doubly nested from a template class
|
||
* [276]11567 C++ code containing templated member function with same
|
||
name as pure virtual member function results in linking failure
|
||
* [277]11645 Failure to deal with using and private inheritance
|
||
|
||
Java compiler and library
|
||
|
||
* [278]5179 Qualified static field access doesn't initialize its
|
||
class
|
||
* [279]8204 gcj -O2 to native reorders certain instructions
|
||
improperly
|
||
* [280]10838 java.io.ObjectInputStream syntax error
|
||
* [281]10886 The RMI registry that comes with GCJ does not work
|
||
correctly
|
||
* [282]11349 JNDI URL context factories not located correctly
|
||
|
||
x86-specific (Intel/AMD)
|
||
|
||
* [283]4823 ICE on inline assembly code
|
||
* [284]8878 miscompilation with -O and SSE
|
||
* [285]9815 (c++ library) atomicity.h - fails to compile with -O3
|
||
-masm=intel
|
||
* [286]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
|
||
in reload1.c
|
||
* [287]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
|
||
* [288]10673 ICE for x86-64 on freebsd libc vfprintf.c source
|
||
* [289]11044 [x86] out of range loop instructions for FP code on K6
|
||
* [290]11089 ICE: instantiate_virtual_regs_lossage while using SSE
|
||
built-ins
|
||
* [291]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
|
||
is used
|
||
|
||
SPARC- or Solaris- specific
|
||
|
||
* [292]9362 solaris 'as' dies when fed .s and "-gstabs"
|
||
* [293]10142 [SPARC64] gcc produces wrong code when passing
|
||
structures by value
|
||
* [294]10663 New configure check aborts with Sun tools.
|
||
* [295]10835 combinatorial explosion in scheduler on HyperSPARC
|
||
* [296]10876 ICE in calculate_giv_inc when building KDE
|
||
* [297]10955 wrong code at -O3 for structure argument in context of
|
||
structure return
|
||
* [298]11018 -mcpu=ultrasparc busts tar-1.13.25
|
||
* [299]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
|
||
Linux kernel
|
||
|
||
ia64 specific
|
||
|
||
* [300]10907 gcc violates the ia64 ABI (GP must be preserved)
|
||
* [301]11320 scheduler bug (in machine depended reorganization pass)
|
||
* [302]11599 bug with conditional and __builtin_prefetch
|
||
|
||
PowerPC specific
|
||
|
||
* [303]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
|
||
during loop)
|
||
* [304]10871 error in rs6000_stack_info save_size computation
|
||
* [305]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
|
||
cures it
|
||
|
||
m68k-specific
|
||
|
||
* [306]7594 [m68k] ICE on legal code associated with simplify-rtx
|
||
* [307]10557 [m68k] ICE in subreg_offset_representable_p
|
||
* [308]11054 [m68k] ICE in reg_overlap_mentioned_p
|
||
|
||
ARM-specific
|
||
|
||
* [309]10834 [arm] GCC 3.3 still generates incorrect instructions for
|
||
functions with __attribute__ ((interrupt ("IRQ")))
|
||
* [310]10842 [arm] Clobbered link register is copied to pc under
|
||
certain circumstances
|
||
* [311]11052 [arm] noce_process_if_block() can lose REG_INC notes
|
||
* [312]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
|
||
(3.4)
|
||
|
||
MIPS-specific
|
||
|
||
* [313]11084 ICE in propagate_one_insn, in flow.c
|
||
|
||
SH-specific
|
||
|
||
* [314]10331 can't compile c++ part of gcc cross compiler for sh-elf
|
||
* [315]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
|
||
* [316]11096 i686-linux to sh-linux cross compiler fails to compile
|
||
C++ files
|
||
|
||
GNU/Linux (or Hurd?) specific
|
||
|
||
* [317]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
|
||
|
||
UnixWare specific
|
||
|
||
* [318]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
|
||
7.1.1
|
||
|
||
Cygwin (or mingw) specific
|
||
|
||
* [319]5287 ICE with dllimport attribute
|
||
* [320]10148 [MingW/CygWin] Compiler dumps core
|
||
|
||
DJGPP specific
|
||
|
||
* [321]8787 GCC fails to emit .intel_syntax when invoked with
|
||
-masm=intel on DJGPP
|
||
|
||
Darwin (and MacOS X) specific
|
||
|
||
* [322]10900 trampolines crash
|
||
|
||
Documentation
|
||
|
||
* [323]1607 (c++) Format attributes on methods undocumented
|
||
* [324]4252 Invalid option `-fdump-translation-unit'
|
||
* [325]4490 Clarify restrictions on -m96bit-long-double,
|
||
-m128bit-long-double
|
||
* [326]10355 document an issue with regparm attribute on some systems
|
||
(e.g. Solaris)
|
||
* [327]10726 (fortran) Documentation for function "IDate Intrinsic
|
||
(Unix)" is wrong
|
||
* [328]10805 document bug in old version of Sun assembler
|
||
* [329]10815 warn against GNU binutils on AIX
|
||
* [330]10877 document need for newer binutils on i?86-*-linux-gnu
|
||
* [331]11280 Manual incorrect with respect to -freorder-blocks
|
||
* [332]11466 Document -mlittle-endian and its restrictions for the
|
||
sparc64 port
|
||
|
||
Testsuite bugs (compiler itself is not affected)
|
||
|
||
* [333]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
|
||
report failure
|
||
* [334]10810 gcc-3.3 fails make check: buffer overrun in
|
||
test_demangle.c
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.2
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracker
|
||
that are known to be fixed in the 3.3.2 release. This list might not be
|
||
complete (that is, it is possible that some PRs that have been fixed
|
||
are not listed here).
|
||
|
||
Bootstrap failures and problems
|
||
|
||
* [335]8336 [SCO5] bootstrap config still tries to use COFF options
|
||
* [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
|
||
--enable-threads=posix
|
||
* [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
|
||
* [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
|
||
7.1.1)
|
||
* [339]11687 xstormy16-elf build fails in libf2c
|
||
* [340]12263 [SGI IRIX] bootstrap fails during compile of
|
||
libf2c/libI77/backspace.c
|
||
* [341]12490 buffer overflow in scan-decls.c (during Solaris 9
|
||
fix-header processing)
|
||
|
||
Internal compiler errors (multi-platform)
|
||
|
||
* [342]7277 Casting integers to vector types causes ICE
|
||
* [343]7939 (c++) ICE on invalid function template specialization
|
||
* [344]11063 (c++) ICE on parsing initialization list of const array
|
||
member
|
||
* [345]11207 ICE with negative index in array element designator
|
||
* [346]11522 (fortran) g77 dwarf-2 ICE in
|
||
add_abstract_origin_attribute
|
||
* [347]11595 (c++) ICE on duplicate label definition
|
||
* [348]11646 (c++) ICE in commit_one_edge_insertion with
|
||
-fnon-call-exceptions -fgcse -O
|
||
* [349]11665 ICE in struct initializer when taking address
|
||
* [350]11852 (c++) ICE with bad struct initializer.
|
||
* [351]11878 (c++) ICE in cp_expr_size
|
||
* [352]11883 ICE with any -O on mercury-generated C code
|
||
* [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
|
||
cp/typeck2.c when applying typeid operator to template template
|
||
parameter
|
||
* [354]12146 ICE in lookup_template_function, in cp/pt.c
|
||
* [355]12215 ICE in make_label_edge with -fnon-call-exceptions
|
||
-fno-gcse -O2
|
||
* [356]12369 (c++) ICE with templates and friends
|
||
* [357]12446 ICE in emit_move_insn on complicated array reference
|
||
* [358]12510 ICE in final_scan_insn
|
||
* [359]12544 ICE with large parameters used in nested functions
|
||
|
||
C and optimization bugs
|
||
|
||
* [360]9862 spurious warnings with -W -finline-functions
|
||
* [361]10962 lookup_field is a linear search on a linked list (can be
|
||
slow if large struct)
|
||
* [362]11370 -Wunreachable-code gives false complaints
|
||
* [363]11637 invalid assembly with -fnon-call-exceptions
|
||
* [364]11885 Problem with bitfields in packed structs
|
||
* [365]12082 Inappropriate unreachable code warnings
|
||
* [366]12180 Inline optimization fails for variadic function
|
||
* [367]12340 loop unroller + gcse produces wrong code
|
||
|
||
C++ compiler and library
|
||
|
||
* [368]3907 nested template parameter collides with member name
|
||
* [369]5293 confusing message when binding a temporary to a reference
|
||
* [370]5296 [DR115] Pointers to functions and to template functions
|
||
behave differently in deduction
|
||
* [371]7939 ICE on function template specialization
|
||
* [372]8656 Unable to assign function with __attribute__ and pointer
|
||
return type to an appropriate variable
|
||
* [373]10147 Confusing error message for invalid template function
|
||
argument
|
||
* [374]11400 std::search_n() makes assumptions about Size parameter
|
||
* [375]11409 issues with using declarations, overloading, and
|
||
built-in functions
|
||
* [376]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
|
||
multiple bits in mask
|
||
* [377]11786 operator() call on variable in other namespace not
|
||
recognized
|
||
* [378]11867 static_cast ignores ambiguity
|
||
* [379]11928 bug with conversion operators that are typedefs
|
||
* [380]12114 Uninitialized memory accessed in dtor
|
||
* [381]12163 static_cast + explicit constructor regression
|
||
* [382]12181 Wrong code with comma operator and c++
|
||
* [383]12236 regparm and fastcall messes up parameters
|
||
* [384]12266 incorrect instantiation of unneeded template during
|
||
overload resolution
|
||
* [385]12296 istream::peek() doesn't set eofbit
|
||
* [386]12298 [sjlj exceptions] Stack unwind destroys
|
||
not-yet-constructed object
|
||
* [387]12369 ICE with templates and friends
|
||
* [388]12337 apparently infinite loop in g++
|
||
* [389]12344 stdcall attribute ignored if function returns a pointer
|
||
* [390]12451 missing(late) class forward declaration in cxxabi.h
|
||
* [391]12486 g++ accepts invalid use of a qualified name
|
||
|
||
x86 specific (Intel/AMD)
|
||
|
||
* [392]8869 [x86 MMX] ICE with const variable optimization and MMX
|
||
builtins
|
||
* [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
|
||
-O2
|
||
* [394]11689 g++3.3 emits un-assembleable code for k6 architecture
|
||
* [395]12116 [k6] Invalid assembly output values with X-MAME code
|
||
* [396]12070 ICE converting between double and long double with
|
||
-msoft-float
|
||
|
||
ia64-specific
|
||
|
||
* [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
|
||
* [398]11535 __builtin_return_address may not work on ia64
|
||
* [399]11693 [ia64] ICE in gen_nop_type
|
||
* [400]12224 [ia64] Thread-local storage doesn't work
|
||
|
||
PowerPC-specific
|
||
|
||
* [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
|
||
kernel
|
||
* [402]11319 loop miscompiled on ppc32
|
||
* [403]11949 ICE Compiler segfault with ffmpeg -maltivec code
|
||
|
||
SPARC-specific
|
||
|
||
* [404]11662 wrong code for expr. with cast to long long and
|
||
exclusive or
|
||
* [405]11965 invalid assembler code for a shift < 32 operation
|
||
* [406]12301 (c++) stack corruption when a returned expression throws
|
||
an exception
|
||
|
||
Alpha-specific
|
||
|
||
* [407]11717 [alpha-linux] unrecognizable insn compiling for.c of
|
||
kernel 2.4.22-pre8
|
||
|
||
HPUX-specific
|
||
|
||
* [408]11313 problem with #pragma weak and static inline functions
|
||
* [409]11712 __STDC_EXT__ not defined for C++ by default anymore?
|
||
|
||
Solaris specific
|
||
|
||
* [410]12166 Profiled programs crash if PROFDIR is set
|
||
|
||
Solaris-x86 specific
|
||
|
||
* [411]12101 i386 Solaris no longer works with GNU as?
|
||
|
||
Miscellaneous embedded target-specific bugs
|
||
|
||
* [412]10988 [m32r-elf] wrong blockmove code with -O3
|
||
* [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
|
||
-O2
|
||
* [414]11902 [sh4] spec file improperly inserts rpath even when none
|
||
needed
|
||
* [415]11903 [sh4] -pthread fails to link due to error in spec file
|
||
on sh4
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.3
|
||
|
||
Minor features
|
||
|
||
In addition to the bug fixes documented below, this release contains
|
||
few minor features such as:
|
||
* Support for --with-sysroot
|
||
* Support for automatic detection of executable stacks
|
||
* Support for SSE3 instructions
|
||
* Support for thread local storage debugging under GDB on S390
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracker
|
||
that are known to be fixed in the 3.3.3 release. This list might not be
|
||
complete (that is, it is possible that some PRs that have been fixed
|
||
are not listed here).
|
||
|
||
Bootstrap failures and issues
|
||
|
||
* [416]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
|
||
* [417]12399 boehm-gc fails (when building a cross compiler): libtool
|
||
unable to infer tagged configuration
|
||
* [418]13068 mklibgcc.in doesn't handle multi-level multilib
|
||
subdirectories properly
|
||
|
||
Internal compiler errors (multi-platform)
|
||
|
||
* [419]10060 ICE (stack overflow) on huge file (300k lines) due to
|
||
recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
|
||
* [420]10555 (c++) ICE on undefined template argument
|
||
* [421]10706 (c++) ICE in mangle_class_name_for_template
|
||
* [422]11496 (fortran) error in flow_loops_find when -funroll-loops
|
||
active
|
||
* [423]11741 ICE in pre_insert_copy_insn, in gcse.c
|
||
* [424]12440 GCC crashes during compilation of quicktime4linux 2.0.0
|
||
* [425]12632 (fortran) -fbounds-check ICE
|
||
* [426]12712 (c++) ICE on short legit C++ code fragment with gcc
|
||
3.3.2
|
||
* [427]12726 (c++) ICE (segfault) on trivial code
|
||
* [428]12890 (c++) ICE on compilation of class with throwing method
|
||
* [429]12900 (c++) ICE in rtl_verify_flow_info_1
|
||
* [430]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
|
||
correct code with -O2 -fno-force-mem
|
||
* [431]13289 (c++) ICE in regenerate_decl_from_template on recursive
|
||
template
|
||
* [432]13318 ICE: floating point exception in the loop optimizer
|
||
* [433]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
|
||
except.c
|
||
* [434]13574 (c++) invalid array default initializer in class lets
|
||
gcc consume all memory and die
|
||
* [435]13475 ICE on SIMD variables with partial value initialization
|
||
* [436]13797 (c++) ICE on invalid template parameter
|
||
* [437]13824 (java) gcj SEGV with simple .java program
|
||
|
||
C and optimization bugs
|
||
|
||
* [438]8776 loop invariants are not removed (most likely)
|
||
* [439]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
|
||
strncmp by memcmp
|
||
* [440]11350 undefined labels with -Os -fPIC
|
||
* [441]12826 Optimizer removes reference through volatile pointer
|
||
* [442]12500 stabs debug info: void no longer a predefined / builtin
|
||
type
|
||
* [443]12941 builtin-bitops-1.c miscompilation (latent bug)
|
||
* [444]12953 tree inliner bug (in inline_forbidden_p) and fix
|
||
* [445]13041 linux-2.6/sound/core/oss/rate.c miscompiled
|
||
* [446]13507 spurious printf format warning
|
||
* [447]13382 Type information for const pointer disappears during
|
||
optimization.
|
||
* [448]13394 noreturn attribute ignored on recursive invokation
|
||
* [449]13400 Compiled code crashes storing to read-only location
|
||
* [450]13521 Endless loop in calculate_global_regs_live
|
||
|
||
C++ compiler and library
|
||
|
||
Some of the bug fixes in this list were made to implement decisions
|
||
that the ISO C++ standards committee has made concerning several defect
|
||
reports (DRs). Links in the list below point to detailed discussion of
|
||
the relevant defect report.
|
||
* [451]2094 unimplemented: use of `ptrmem_cst' in template type
|
||
unification
|
||
* [452]2294 using declaration confusion
|
||
* [453]5050 template instantiation depth exceeds limit: recursion
|
||
problem?
|
||
* [454]9371 Bad exception handling in
|
||
i/ostream::operator>>/<<(streambuf*)
|
||
* [455]9546 bad exception handling in ostream members
|
||
* [456]10081 basic_ios::_M_cache_locale leaves NULL members in the
|
||
face of unknown locales
|
||
* [457]10093 [458][DR 61] Setting failbit in exceptions doesn't work
|
||
* [459]10095 istream::operator>>(int&) sets ios::badbit when
|
||
ios::failbit is set.
|
||
* [460]11554 Warning about reordering of initializers doesn't mention
|
||
location of constructor
|
||
* [461]12297 istream::sentry::sentry() handles eof() incorrectly.
|
||
* [462]12352 Exception safety problems in src/localename.cc
|
||
* [463]12438 Memory leak in locale::combine()
|
||
* [464]12540 Memory leak in locale::locale(const char*)
|
||
* [465]12594 DRs [466]60 [TC] and [467]63 [TC] not implemented
|
||
* [468]12657 Resolution of [469]DR 292 (WP) still unimplemented
|
||
* [470]12696 memory eating infinite loop in diagnostics (error
|
||
recovery problem)
|
||
* [471]12815 Code compiled with optimization behaves unexpectedly
|
||
* [472]12862 Conflicts between typedefs/enums and namespace member
|
||
declarations
|
||
* [473]12926 Wrong value after assignment in initialize list using
|
||
bit-fields
|
||
* [474]12967 Resolution of [475]DR 300 [WP] still unimplemented
|
||
* [476]12971 Resolution of [477]DR 328 [WP] still unimplemented
|
||
* [478]13007 basic_streambuf::pubimbue, imbue wrong
|
||
* [479]13009 Implicitly-defined assignment operator writes to wrong
|
||
memory
|
||
* [480]13057 regparm attribute not applied to destructor
|
||
* [481]13070 -Wformat option ignored in g++
|
||
* [482]13081 forward template declarations in <complex> let inlining
|
||
fail
|
||
* [483]13239 Assertion does not seem to work correctly anymore
|
||
* [484]13262 "xxx is private within this context" when initializing a
|
||
self-contained template class
|
||
* [485]13290 simple typo in concept checking for std::generate_n
|
||
* [486]13323 Template code does not compile in presence of typedef
|
||
* [487]13369 __verify_grouping (and __add_grouping?) not correct
|
||
* [488]13371 infinite loop with packed struct and inlining
|
||
* [489]13445 Template argument replacement "dereferences" a typedef
|
||
* [490]13461 Fails to access protected-ctor from public constant
|
||
* [491]13462 Non-standard-conforming type set::pointer
|
||
* [492]13478 gcc uses wrong constructor to initialize a const
|
||
reference
|
||
* [493]13544 "conflicting types" for enums in different scopes
|
||
* [494]13650 string::compare should not (always) use
|
||
traits_type::length()
|
||
* [495]13683 bogus warning about passing non-PODs through ellipsis
|
||
* [496]13688 Derived class is denied access to protected base class
|
||
member class
|
||
* [497]13774 Member variable cleared in virtual multiple inheritance
|
||
class
|
||
* [498]13884 Protect sstream.tcc from extern template use
|
||
|
||
Java compiler and library
|
||
|
||
* [499]10746 [win32] garbage collection crash in GCJ
|
||
|
||
Objective-C compiler and library
|
||
|
||
* [500]11433 Crash due to dereferencing null pointer when querying
|
||
protocol
|
||
|
||
Fortran compiler and library
|
||
|
||
* [501]12633 logical expression gives incorrect result with
|
||
-fugly-logint option
|
||
* [502]13037 [gcse-lm] g77 generates incorrect code
|
||
* [503]13213 Hex constant problem when compiling with -fugly-logint
|
||
and -ftypeless-boz
|
||
|
||
x86-specific (Intel/AMD)
|
||
|
||
* [504]4490 ICE with -m128bit-long-double
|
||
* [505]12292 [x86_64] ICE: RTL check: expected code `const_int', have
|
||
`reg' in make_field_assignment, in combine.c
|
||
* [506]12441 ICE: can't find a register to spill
|
||
* [507]12943 array static-init failure under -fpic, -fPIC
|
||
* [508]13608 Incorrect code with -O3 -ffast-math
|
||
|
||
PowerPC-specific
|
||
|
||
* [509]11598 testcase gcc.dg/20020118-1.c fails runtime check of
|
||
__attribute__((aligned(16)))
|
||
* [510]11793 ICE in extract_insn, in recog.c (const_vector's)
|
||
* [511]12467 vmsumubm emitted when vmsummbm appropriate (typo in
|
||
altivec.md)
|
||
* [512]12537 g++ generates writeable text sections
|
||
|
||
SPARC-specific
|
||
|
||
* [513]12496 wrong result for __atomic_add(&value, -1) when using -O0
|
||
-m64
|
||
* [514]12865 mprotect call to make trampoline executable may fail
|
||
* [515]13354 ICE in sparc_emit_set_const32
|
||
|
||
ARM-specific
|
||
|
||
* [516]10467 [arm] ICE in pre_insert_copy_insn,
|
||
|
||
ia64-specific
|
||
|
||
* [517]11226 ICE passing struct arg with two floats
|
||
* [518]11227 ICE for _Complex float, _Complex long double args
|
||
* [519]12644 GCC 3.3.2 fails to compile glibc on ia64
|
||
* [520]13149 build gcc-3.3.2 1305 error:unrecognizable insn
|
||
* Various fixes for libunwind
|
||
|
||
Alpha-specific
|
||
|
||
* [521]12654 Incorrect comparison code generated for Alpha
|
||
* [522]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
|
||
* [523]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
|
||
|
||
HPPA-specific
|
||
|
||
* [524]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
|
||
* [525]12158 [hppa] compilation does not terminate at -O1
|
||
|
||
S390-specific
|
||
|
||
* [526]11992 Wrong built-in code for memcmp with length 1<<24: only
|
||
(1<<24)-1 possible for CLCL-Instruction
|
||
|
||
SH-specific
|
||
|
||
* [527]9365 segfault in gen_far_branch (config/sh/sh.c)
|
||
* [528]10392 optimizer generates faulty array indexing
|
||
* [529]11322 SH profiler outputs multiple definitions of symbol
|
||
* [530]13069 gcc/config/sh/rtems.h broken
|
||
* [531]13302 Putting a va_list in a struct causes seg fault
|
||
* [532]13585 Incorrect optimization of call to sfunc
|
||
* Fix inappropriately exported libgcc functions from the shared
|
||
library
|
||
|
||
Other embedded target specific
|
||
|
||
* [533]8916 [mcore] unsigned char assign gets hosed.
|
||
* [534]11576 [h8300] ICE in change_address_1, in emit-rtl.c
|
||
* [535]13122 [h8300] local variable gets corrupted by function call
|
||
when -fomit-frame-pointer is given
|
||
* [536]13256 [cris] strict_low_part mistreated in delay slots
|
||
* [537]13373 [mcore] optimization with -frerun-cse-after-loop
|
||
-fexpensive-optimizations produces wrong code on mcore
|
||
|
||
GNU HURD-specific
|
||
|
||
* [538]12561 gcc/config/t-gnu needs updating to work with
|
||
--with-sysroot
|
||
|
||
Tru64 Unix specific
|
||
|
||
* [539]6243 testsuite fails almost all tests due to no libintl in
|
||
LD_LIBRARY_PATH during test.
|
||
* [540]11397 weak aliases broken on Tru64 UNIX
|
||
|
||
AIX-specific
|
||
|
||
* [541]12505 build failure due to defines of uchar in cpphash.h and
|
||
sys/types.h
|
||
* [542]13150 WEAK symbols not exported by collect2
|
||
|
||
IRIX-specific
|
||
|
||
* [543]12666 fixincludes problem on IRIX 6.5.19m
|
||
|
||
Solaris-specific
|
||
|
||
* [544]12969 Including sys/byteorder.h breaks configure checks
|
||
|
||
Testsuite problems (compiler is not affected)
|
||
|
||
* [545]10819 testsuite creates CR+LF on compiler version lines in
|
||
test summary files
|
||
* [546]11612 abi_check not finding correct libgcc_s.so.1
|
||
|
||
Miscellaneous
|
||
|
||
* [547]13211 using -###, incorrect warnings about unused linker file
|
||
are produced
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.4
|
||
|
||
This is the [548]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.3.4 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.5
|
||
|
||
This is the [549]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.3.5 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
__________________________________________________________________
|
||
|
||
GCC 3.3.6
|
||
|
||
This is the [550]list of problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.3.6 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here).
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [551]GCC manuals. If that fails, the
|
||
[552]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [553]gcc@gcc.gnu.org. All of [554]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [555]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [556]maintained by the GCC team. Last modified
|
||
2018-09-30[557].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
|
||
2. http://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
|
||
3. http://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
|
||
4. http://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
|
||
5. http://gcc.gnu.org/news/dfa.html
|
||
6. http://gcc.gnu.org/c99status.html
|
||
7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
|
||
8. https://gcc.gnu.org/PR10140
|
||
9. https://gcc.gnu.org/PR10198
|
||
10. https://gcc.gnu.org/PR10338
|
||
11. https://gcc.gnu.org/PR3581
|
||
12. https://gcc.gnu.org/PR4382
|
||
13. https://gcc.gnu.org/PR5533
|
||
14. https://gcc.gnu.org/PR6387
|
||
15. https://gcc.gnu.org/PR6412
|
||
16. https://gcc.gnu.org/PR6620
|
||
17. https://gcc.gnu.org/PR6663
|
||
18. https://gcc.gnu.org/PR7068
|
||
19. https://gcc.gnu.org/PR7083
|
||
20. https://gcc.gnu.org/PR7647
|
||
21. https://gcc.gnu.org/PR7675
|
||
22. https://gcc.gnu.org/PR7718
|
||
23. https://gcc.gnu.org/PR8116
|
||
24. https://gcc.gnu.org/PR8358
|
||
25. https://gcc.gnu.org/PR8511
|
||
26. https://gcc.gnu.org/PR8564
|
||
27. https://gcc.gnu.org/PR8660
|
||
28. https://gcc.gnu.org/PR8766
|
||
29. https://gcc.gnu.org/PR8803
|
||
30. https://gcc.gnu.org/PR8846
|
||
31. https://gcc.gnu.org/PR8906
|
||
32. https://gcc.gnu.org/PR9216
|
||
33. https://gcc.gnu.org/PR9261
|
||
34. https://gcc.gnu.org/PR9263
|
||
35. https://gcc.gnu.org/PR9429
|
||
36. https://gcc.gnu.org/PR9516
|
||
37. https://gcc.gnu.org/PR9600
|
||
38. https://gcc.gnu.org/PR9629
|
||
39. https://gcc.gnu.org/PR9672
|
||
40. https://gcc.gnu.org/PR9749
|
||
41. https://gcc.gnu.org/PR9794
|
||
42. https://gcc.gnu.org/PR9829
|
||
43. https://gcc.gnu.org/PR9916
|
||
44. https://gcc.gnu.org/PR9936
|
||
45. https://gcc.gnu.org/PR10262
|
||
46. https://gcc.gnu.org/PR10278
|
||
47. https://gcc.gnu.org/PR10446
|
||
48. https://gcc.gnu.org/PR10451
|
||
49. https://gcc.gnu.org/PR10506
|
||
50. https://gcc.gnu.org/PR10549
|
||
51. https://gcc.gnu.org/PR2001
|
||
52. https://gcc.gnu.org/PR2391
|
||
53. https://gcc.gnu.org/PR2960
|
||
54. https://gcc.gnu.org/PR4046
|
||
55. https://gcc.gnu.org/PR6405
|
||
56. https://gcc.gnu.org/PR6798
|
||
57. https://gcc.gnu.org/PR6871
|
||
58. https://gcc.gnu.org/PR6909
|
||
59. https://gcc.gnu.org/PR7189
|
||
60. https://gcc.gnu.org/PR7642
|
||
61. https://gcc.gnu.org/PR8634
|
||
62. https://gcc.gnu.org/PR8750
|
||
63. https://gcc.gnu.org/PR2161
|
||
64. https://gcc.gnu.org/PR4319
|
||
65. https://gcc.gnu.org/PR8602
|
||
66. https://gcc.gnu.org/PR9177
|
||
67. https://gcc.gnu.org/PR9853
|
||
68. https://gcc.gnu.org/PR45
|
||
69. https://gcc.gnu.org/PR3784
|
||
70. https://gcc.gnu.org/PR764
|
||
71. https://gcc.gnu.org/PR5116
|
||
72. https://gcc.gnu.org/PR2862
|
||
73. https://gcc.gnu.org/PR3663
|
||
74. https://gcc.gnu.org/PR3797
|
||
75. https://gcc.gnu.org/PR3948
|
||
76. https://gcc.gnu.org/PR4137
|
||
77. https://gcc.gnu.org/PR4361
|
||
78. https://gcc.gnu.org/PR4802
|
||
79. https://gcc.gnu.org/PR5837
|
||
80. https://gcc.gnu.org/PR4803
|
||
81. https://gcc.gnu.org/PR5094
|
||
82. https://gcc.gnu.org/PR5730
|
||
83. https://gcc.gnu.org/PR6713
|
||
84. https://gcc.gnu.org/PR7015
|
||
85. https://gcc.gnu.org/PR7086
|
||
86. https://gcc.gnu.org/PR7099
|
||
87. https://gcc.gnu.org/PR7247
|
||
88. https://gcc.gnu.org/PR7441
|
||
89. https://gcc.gnu.org/PR7768
|
||
90. https://gcc.gnu.org/PR7804
|
||
91. https://gcc.gnu.org/PR8099
|
||
92. https://gcc.gnu.org/PR8117
|
||
93. https://gcc.gnu.org/PR8205
|
||
94. https://gcc.gnu.org/PR8645
|
||
95. https://gcc.gnu.org/PR8724
|
||
96. https://gcc.gnu.org/PR8805
|
||
97. https://gcc.gnu.org/PR8691
|
||
98. https://gcc.gnu.org/PR8700
|
||
99. https://gcc.gnu.org/PR8724
|
||
100. https://gcc.gnu.org/PR8949
|
||
101. https://gcc.gnu.org/PR9016
|
||
102. https://gcc.gnu.org/PR9053
|
||
103. https://gcc.gnu.org/PR9152
|
||
104. https://gcc.gnu.org/PR9182
|
||
105. https://gcc.gnu.org/PR9297
|
||
106. https://gcc.gnu.org/PR9318
|
||
107. https://gcc.gnu.org/PR9320
|
||
108. https://gcc.gnu.org/PR9400
|
||
109. https://gcc.gnu.org/PR9424
|
||
110. https://gcc.gnu.org/PR9425
|
||
111. https://gcc.gnu.org/PR9439
|
||
112. https://gcc.gnu.org/PR9474
|
||
113. https://gcc.gnu.org/PR9548
|
||
114. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
|
||
115. https://gcc.gnu.org/PR9555
|
||
116. https://gcc.gnu.org/PR9561
|
||
117. https://gcc.gnu.org/PR9563
|
||
118. https://gcc.gnu.org/PR9582
|
||
119. https://gcc.gnu.org/PR9622
|
||
120. https://gcc.gnu.org/PR9683
|
||
121. https://gcc.gnu.org/PR9791
|
||
122. https://gcc.gnu.org/PR9817
|
||
123. https://gcc.gnu.org/PR9825
|
||
124. https://gcc.gnu.org/PR9826
|
||
125. https://gcc.gnu.org/PR9924
|
||
126. https://gcc.gnu.org/PR9946
|
||
127. https://gcc.gnu.org/PR9964
|
||
128. https://gcc.gnu.org/PR9988
|
||
129. https://gcc.gnu.org/PR10033
|
||
130. https://gcc.gnu.org/PR10097
|
||
131. https://gcc.gnu.org/PR10132
|
||
132. https://gcc.gnu.org/PR10180
|
||
133. https://gcc.gnu.org/PR10199
|
||
134. https://gcc.gnu.org/PR10300
|
||
135. https://gcc.gnu.org/PR10427
|
||
136. https://gcc.gnu.org/PR10503
|
||
137. https://gcc.gnu.org/PR5956
|
||
138. https://gcc.gnu.org/PR1832
|
||
139. https://gcc.gnu.org/PR3924
|
||
140. https://gcc.gnu.org/PR5634
|
||
141. https://gcc.gnu.org/PR6367
|
||
142. https://gcc.gnu.org/PR6491
|
||
143. https://gcc.gnu.org/PR6742
|
||
144. https://gcc.gnu.org/PR7113
|
||
145. https://gcc.gnu.org/PR7236
|
||
146. https://gcc.gnu.org/PR7278
|
||
147. https://gcc.gnu.org/PR7384
|
||
148. https://gcc.gnu.org/PR7388
|
||
149. https://gcc.gnu.org/PR8587
|
||
150. https://gcc.gnu.org/PR9038
|
||
151. https://gcc.gnu.org/PR10197
|
||
152. https://gcc.gnu.org/PR6005
|
||
153. https://gcc.gnu.org/PR6389
|
||
154. https://gcc.gnu.org/PR6576
|
||
155. https://gcc.gnu.org/PR6652
|
||
156. https://gcc.gnu.org/PR7060
|
||
157. https://gcc.gnu.org/PR7073
|
||
158. https://gcc.gnu.org/PR7180
|
||
159. https://gcc.gnu.org/PR7416
|
||
160. https://gcc.gnu.org/PR7570
|
||
161. https://gcc.gnu.org/PR7578
|
||
162. https://gcc.gnu.org/PR7611
|
||
163. https://gcc.gnu.org/PR7709
|
||
164. https://gcc.gnu.org/PR7766
|
||
165. https://gcc.gnu.org/PR7785
|
||
166. https://gcc.gnu.org/PR7786
|
||
167. https://gcc.gnu.org/PR8142
|
||
168. https://gcc.gnu.org/PR8234
|
||
169. https://gcc.gnu.org/PR8415
|
||
170. https://gcc.gnu.org/PR8481
|
||
171. https://gcc.gnu.org/PR8593
|
||
172. https://gcc.gnu.org/PR8759
|
||
173. https://gcc.gnu.org/PR8997
|
||
174. https://gcc.gnu.org/PR9253
|
||
175. https://gcc.gnu.org/PR9254
|
||
176. https://gcc.gnu.org/PR9271
|
||
177. https://gcc.gnu.org/PR6767
|
||
178. https://gcc.gnu.org/PR9911
|
||
179. https://gcc.gnu.org/PR10020
|
||
180. https://gcc.gnu.org/PR10546
|
||
181. https://gcc.gnu.org/PR7029
|
||
182. https://gcc.gnu.org/PR2903
|
||
183. https://gcc.gnu.org/PR7873
|
||
184. https://gcc.gnu.org/PR7680
|
||
185. https://gcc.gnu.org/PR8705
|
||
186. https://gcc.gnu.org/PR9986
|
||
187. https://gcc.gnu.org/PR10056
|
||
188. https://gcc.gnu.org/PR6744
|
||
189. https://gcc.gnu.org/PR7361
|
||
190. https://gcc.gnu.org/PR9496
|
||
191. https://gcc.gnu.org/PR7067
|
||
192. https://gcc.gnu.org/PR8480
|
||
193. https://gcc.gnu.org/PR8784
|
||
194. https://gcc.gnu.org/PR10315
|
||
195. https://gcc.gnu.org/PR10267
|
||
196. https://gcc.gnu.org/PR7916
|
||
197. https://gcc.gnu.org/PR7926
|
||
198. https://gcc.gnu.org/PR8555
|
||
199. https://gcc.gnu.org/PR8994
|
||
200. https://gcc.gnu.org/PR9426
|
||
201. https://gcc.gnu.org/PR9806
|
||
202. https://gcc.gnu.org/PR10077
|
||
203. https://gcc.gnu.org/PR10233
|
||
204. https://gcc.gnu.org/PR10286
|
||
205. https://gcc.gnu.org/PR10308
|
||
206. https://gcc.gnu.org/PR11272
|
||
207. https://gcc.gnu.org/PR5754
|
||
208. https://gcc.gnu.org/PR6597
|
||
209. https://gcc.gnu.org/PR6949
|
||
210. https://gcc.gnu.org/PR7053
|
||
211. https://gcc.gnu.org/PR8164
|
||
212. https://gcc.gnu.org/PR8384
|
||
213. https://gcc.gnu.org/PR9559
|
||
214. https://gcc.gnu.org/PR9649
|
||
215. https://gcc.gnu.org/PR9864
|
||
216. https://gcc.gnu.org/PR10432
|
||
217. https://gcc.gnu.org/PR10475
|
||
218. https://gcc.gnu.org/PR10635
|
||
219. https://gcc.gnu.org/PR10661
|
||
220. https://gcc.gnu.org/PR10700
|
||
221. https://gcc.gnu.org/PR10712
|
||
222. https://gcc.gnu.org/PR10796
|
||
223. https://gcc.gnu.org/PR10890
|
||
224. https://gcc.gnu.org/PR10939
|
||
225. https://gcc.gnu.org/PR10956
|
||
226. https://gcc.gnu.org/PR11041
|
||
227. https://gcc.gnu.org/PR11059
|
||
228. https://gcc.gnu.org/PR11083
|
||
229. https://gcc.gnu.org/PR11105
|
||
230. https://gcc.gnu.org/PR11149
|
||
231. https://gcc.gnu.org/PR11228
|
||
232. https://gcc.gnu.org/PR11282
|
||
233. https://gcc.gnu.org/PR11301
|
||
234. https://gcc.gnu.org/PR11308
|
||
235. https://gcc.gnu.org/PR11473
|
||
236. https://gcc.gnu.org/PR11503
|
||
237. https://gcc.gnu.org/PR11513
|
||
238. https://gcc.gnu.org/PR11198
|
||
239. https://gcc.gnu.org/PR11304
|
||
240. https://gcc.gnu.org/PR11381
|
||
241. https://gcc.gnu.org/PR11536
|
||
242. https://gcc.gnu.org/PR11557
|
||
243. https://gcc.gnu.org/PR5897
|
||
244. https://gcc.gnu.org/PR11279
|
||
245. https://gcc.gnu.org/PR11022
|
||
246. https://gcc.gnu.org/PR2330
|
||
247. https://gcc.gnu.org/PR5388
|
||
248. https://gcc.gnu.org/PR5390
|
||
249. https://gcc.gnu.org/PR7877
|
||
250. https://gcc.gnu.org/PR9393
|
||
251. https://gcc.gnu.org/PR10032
|
||
252. https://gcc.gnu.org/PR10468
|
||
253. https://gcc.gnu.org/PR10527
|
||
254. https://gcc.gnu.org/PR10679
|
||
255. https://gcc.gnu.org/PR10682
|
||
256. https://gcc.gnu.org/PR10689
|
||
257. https://gcc.gnu.org/PR10845
|
||
258. https://gcc.gnu.org/PR10849
|
||
259. https://gcc.gnu.org/PR10888
|
||
260. https://gcc.gnu.org/PR10929
|
||
261. https://gcc.gnu.org/PR10931
|
||
262. https://gcc.gnu.org/PR10940
|
||
263. https://gcc.gnu.org/PR10968
|
||
264. https://gcc.gnu.org/PR10990
|
||
265. https://gcc.gnu.org/PR11039
|
||
266. https://gcc.gnu.org/PR11062
|
||
267. https://gcc.gnu.org/PR11095
|
||
268. https://gcc.gnu.org/PR11098
|
||
269. https://gcc.gnu.org/PR11137
|
||
270. https://gcc.gnu.org/PR11154
|
||
271. https://gcc.gnu.org/PR11329
|
||
272. https://gcc.gnu.org/PR11332
|
||
273. https://gcc.gnu.org/PR11431
|
||
274. https://gcc.gnu.org/PR11528
|
||
275. https://gcc.gnu.org/PR11546
|
||
276. https://gcc.gnu.org/PR11567
|
||
277. https://gcc.gnu.org/PR11645
|
||
278. https://gcc.gnu.org/PR5179
|
||
279. https://gcc.gnu.org/PR8204
|
||
280. https://gcc.gnu.org/PR10838
|
||
281. https://gcc.gnu.org/PR10886
|
||
282. https://gcc.gnu.org/PR11349
|
||
283. https://gcc.gnu.org/PR4823
|
||
284. https://gcc.gnu.org/PR8878
|
||
285. https://gcc.gnu.org/PR9815
|
||
286. https://gcc.gnu.org/PR10402
|
||
287. https://gcc.gnu.org/PR10504
|
||
288. https://gcc.gnu.org/PR10673
|
||
289. https://gcc.gnu.org/PR11044
|
||
290. https://gcc.gnu.org/PR11089
|
||
291. https://gcc.gnu.org/PR11420
|
||
292. https://gcc.gnu.org/PR9362
|
||
293. https://gcc.gnu.org/PR10142
|
||
294. https://gcc.gnu.org/PR10663
|
||
295. https://gcc.gnu.org/PR10835
|
||
296. https://gcc.gnu.org/PR10876
|
||
297. https://gcc.gnu.org/PR10955
|
||
298. https://gcc.gnu.org/PR11018
|
||
299. https://gcc.gnu.org/PR11556
|
||
300. https://gcc.gnu.org/PR10907
|
||
301. https://gcc.gnu.org/PR11320
|
||
302. https://gcc.gnu.org/PR11599
|
||
303. https://gcc.gnu.org/PR9745
|
||
304. https://gcc.gnu.org/PR10871
|
||
305. https://gcc.gnu.org/PR11440
|
||
306. https://gcc.gnu.org/PR7594
|
||
307. https://gcc.gnu.org/PR10557
|
||
308. https://gcc.gnu.org/PR11054
|
||
309. https://gcc.gnu.org/PR10834
|
||
310. https://gcc.gnu.org/PR10842
|
||
311. https://gcc.gnu.org/PR11052
|
||
312. https://gcc.gnu.org/PR11183
|
||
313. https://gcc.gnu.org/PR11084
|
||
314. https://gcc.gnu.org/PR10331
|
||
315. https://gcc.gnu.org/PR10413
|
||
316. https://gcc.gnu.org/PR11096
|
||
317. https://gcc.gnu.org/PR2873
|
||
318. https://gcc.gnu.org/PR3163
|
||
319. https://gcc.gnu.org/PR5287
|
||
320. https://gcc.gnu.org/PR10148
|
||
321. https://gcc.gnu.org/PR8787
|
||
322. https://gcc.gnu.org/PR10900
|
||
323. https://gcc.gnu.org/PR1607
|
||
324. https://gcc.gnu.org/PR4252
|
||
325. https://gcc.gnu.org/PR4490
|
||
326. https://gcc.gnu.org/PR10355
|
||
327. https://gcc.gnu.org/PR10726
|
||
328. https://gcc.gnu.org/PR10805
|
||
329. https://gcc.gnu.org/PR10815
|
||
330. https://gcc.gnu.org/PR10877
|
||
331. https://gcc.gnu.org/PR11280
|
||
332. https://gcc.gnu.org/PR11466
|
||
333. https://gcc.gnu.org/PR10737
|
||
334. https://gcc.gnu.org/PR10810
|
||
335. https://gcc.gnu.org/PR8336
|
||
336. https://gcc.gnu.org/PR9330
|
||
337. https://gcc.gnu.org/PR9631
|
||
338. https://gcc.gnu.org/PR9877
|
||
339. https://gcc.gnu.org/PR11687
|
||
340. https://gcc.gnu.org/PR12263
|
||
341. https://gcc.gnu.org/PR12490
|
||
342. https://gcc.gnu.org/PR7277
|
||
343. https://gcc.gnu.org/PR7939
|
||
344. https://gcc.gnu.org/PR11063
|
||
345. https://gcc.gnu.org/PR11207
|
||
346. https://gcc.gnu.org/PR11522
|
||
347. https://gcc.gnu.org/PR11595
|
||
348. https://gcc.gnu.org/PR11646
|
||
349. https://gcc.gnu.org/PR11665
|
||
350. https://gcc.gnu.org/PR11852
|
||
351. https://gcc.gnu.org/PR11878
|
||
352. https://gcc.gnu.org/PR11883
|
||
353. https://gcc.gnu.org/PR11991
|
||
354. https://gcc.gnu.org/PR12146
|
||
355. https://gcc.gnu.org/PR12215
|
||
356. https://gcc.gnu.org/PR12369
|
||
357. https://gcc.gnu.org/PR12446
|
||
358. https://gcc.gnu.org/PR12510
|
||
359. https://gcc.gnu.org/PR12544
|
||
360. https://gcc.gnu.org/PR9862
|
||
361. https://gcc.gnu.org/PR10962
|
||
362. https://gcc.gnu.org/PR11370
|
||
363. https://gcc.gnu.org/PR11637
|
||
364. https://gcc.gnu.org/PR11885
|
||
365. https://gcc.gnu.org/PR12082
|
||
366. https://gcc.gnu.org/PR12180
|
||
367. https://gcc.gnu.org/PR12340
|
||
368. https://gcc.gnu.org/PR3907
|
||
369. https://gcc.gnu.org/PR5293
|
||
370. https://gcc.gnu.org/PR5296
|
||
371. https://gcc.gnu.org/PR7939
|
||
372. https://gcc.gnu.org/PR8656
|
||
373. https://gcc.gnu.org/PR10147
|
||
374. https://gcc.gnu.org/PR11400
|
||
375. https://gcc.gnu.org/PR11409
|
||
376. https://gcc.gnu.org/PR11740
|
||
377. https://gcc.gnu.org/PR11786
|
||
378. https://gcc.gnu.org/PR11867
|
||
379. https://gcc.gnu.org/PR11928
|
||
380. https://gcc.gnu.org/PR12114
|
||
381. https://gcc.gnu.org/PR12163
|
||
382. https://gcc.gnu.org/PR12181
|
||
383. https://gcc.gnu.org/PR12236
|
||
384. https://gcc.gnu.org/PR12266
|
||
385. https://gcc.gnu.org/PR12296
|
||
386. https://gcc.gnu.org/PR12298
|
||
387. https://gcc.gnu.org/PR12369
|
||
388. https://gcc.gnu.org/PR12337
|
||
389. https://gcc.gnu.org/PR12344
|
||
390. https://gcc.gnu.org/PR12451
|
||
391. https://gcc.gnu.org/PR12486
|
||
392. https://gcc.gnu.org/PR8869
|
||
393. https://gcc.gnu.org/PR9786
|
||
394. https://gcc.gnu.org/PR11689
|
||
395. https://gcc.gnu.org/PR12116
|
||
396. https://gcc.gnu.org/PR12070
|
||
397. https://gcc.gnu.org/PR11184
|
||
398. https://gcc.gnu.org/PR11535
|
||
399. https://gcc.gnu.org/PR11693
|
||
400. https://gcc.gnu.org/PR12224
|
||
401. https://gcc.gnu.org/PR11087
|
||
402. https://gcc.gnu.org/PR11319
|
||
403. https://gcc.gnu.org/PR11949
|
||
404. https://gcc.gnu.org/PR11662
|
||
405. https://gcc.gnu.org/PR11965
|
||
406. https://gcc.gnu.org/PR12301
|
||
407. https://gcc.gnu.org/PR11717
|
||
408. https://gcc.gnu.org/PR11313
|
||
409. https://gcc.gnu.org/PR11712
|
||
410. https://gcc.gnu.org/PR12166
|
||
411. https://gcc.gnu.org/PR12101
|
||
412. https://gcc.gnu.org/PR10988
|
||
413. https://gcc.gnu.org/PR11805
|
||
414. https://gcc.gnu.org/PR11902
|
||
415. https://gcc.gnu.org/PR11903
|
||
416. https://gcc.gnu.org/PR11890
|
||
417. https://gcc.gnu.org/PR12399
|
||
418. https://gcc.gnu.org/PR13068
|
||
419. https://gcc.gnu.org/PR10060
|
||
420. https://gcc.gnu.org/PR10555
|
||
421. https://gcc.gnu.org/PR10706
|
||
422. https://gcc.gnu.org/PR11496
|
||
423. https://gcc.gnu.org/PR11741
|
||
424. https://gcc.gnu.org/PR12440
|
||
425. https://gcc.gnu.org/PR12632
|
||
426. https://gcc.gnu.org/PR12712
|
||
427. https://gcc.gnu.org/PR12726
|
||
428. https://gcc.gnu.org/PR12890
|
||
429. https://gcc.gnu.org/PR12900
|
||
430. https://gcc.gnu.org/PR13060
|
||
431. https://gcc.gnu.org/PR13289
|
||
432. https://gcc.gnu.org/PR13318
|
||
433. https://gcc.gnu.org/PR13392
|
||
434. https://gcc.gnu.org/PR13574
|
||
435. https://gcc.gnu.org/PR13475
|
||
436. https://gcc.gnu.org/PR13797
|
||
437. https://gcc.gnu.org/PR13824
|
||
438. https://gcc.gnu.org/PR8776
|
||
439. https://gcc.gnu.org/PR10339
|
||
440. https://gcc.gnu.org/PR11350
|
||
441. https://gcc.gnu.org/PR12826
|
||
442. https://gcc.gnu.org/PR12500
|
||
443. https://gcc.gnu.org/PR12941
|
||
444. https://gcc.gnu.org/PR12953
|
||
445. https://gcc.gnu.org/PR13041
|
||
446. https://gcc.gnu.org/PR13507
|
||
447. https://gcc.gnu.org/PR13382
|
||
448. https://gcc.gnu.org/PR13394
|
||
449. https://gcc.gnu.org/PR13400
|
||
450. https://gcc.gnu.org/PR13521
|
||
451. https://gcc.gnu.org/PR2094
|
||
452. https://gcc.gnu.org/PR2294
|
||
453. https://gcc.gnu.org/PR5050
|
||
454. https://gcc.gnu.org/PR9371
|
||
455. https://gcc.gnu.org/PR9546
|
||
456. https://gcc.gnu.org/PR10081
|
||
457. https://gcc.gnu.org/PR10093
|
||
458. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
|
||
459. https://gcc.gnu.org/PR10095
|
||
460. https://gcc.gnu.org/PR11554
|
||
461. https://gcc.gnu.org/PR12297
|
||
462. https://gcc.gnu.org/PR12352
|
||
463. https://gcc.gnu.org/PR12438
|
||
464. https://gcc.gnu.org/PR12540
|
||
465. https://gcc.gnu.org/PR12594
|
||
466. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
|
||
467. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
|
||
468. https://gcc.gnu.org/PR12657
|
||
469. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
|
||
470. https://gcc.gnu.org/PR12696
|
||
471. https://gcc.gnu.org/PR12815
|
||
472. https://gcc.gnu.org/PR12862
|
||
473. https://gcc.gnu.org/PR12926
|
||
474. https://gcc.gnu.org/PR12967
|
||
475. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
|
||
476. https://gcc.gnu.org/PR12971
|
||
477. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
|
||
478. https://gcc.gnu.org/PR13007
|
||
479. https://gcc.gnu.org/PR13009
|
||
480. https://gcc.gnu.org/PR13057
|
||
481. https://gcc.gnu.org/PR13070
|
||
482. https://gcc.gnu.org/PR13081
|
||
483. https://gcc.gnu.org/PR13239
|
||
484. https://gcc.gnu.org/PR13262
|
||
485. https://gcc.gnu.org/PR13290
|
||
486. https://gcc.gnu.org/PR13323
|
||
487. https://gcc.gnu.org/PR13369
|
||
488. https://gcc.gnu.org/PR13371
|
||
489. https://gcc.gnu.org/PR13445
|
||
490. https://gcc.gnu.org/PR13461
|
||
491. https://gcc.gnu.org/PR13462
|
||
492. https://gcc.gnu.org/PR13478
|
||
493. https://gcc.gnu.org/PR13544
|
||
494. https://gcc.gnu.org/PR13650
|
||
495. https://gcc.gnu.org/PR13683
|
||
496. https://gcc.gnu.org/PR13688
|
||
497. https://gcc.gnu.org/PR13774
|
||
498. https://gcc.gnu.org/PR13884
|
||
499. https://gcc.gnu.org/PR10746
|
||
500. https://gcc.gnu.org/PR11433
|
||
501. https://gcc.gnu.org/PR12633
|
||
502. https://gcc.gnu.org/PR13037
|
||
503. https://gcc.gnu.org/PR13213
|
||
504. https://gcc.gnu.org/PR4490
|
||
505. https://gcc.gnu.org/PR12292
|
||
506. https://gcc.gnu.org/PR12441
|
||
507. https://gcc.gnu.org/PR12943
|
||
508. https://gcc.gnu.org/PR13608
|
||
509. https://gcc.gnu.org/PR11598
|
||
510. https://gcc.gnu.org/PR11793
|
||
511. https://gcc.gnu.org/PR12467
|
||
512. https://gcc.gnu.org/PR12537
|
||
513. https://gcc.gnu.org/PR12496
|
||
514. https://gcc.gnu.org/PR12865
|
||
515. https://gcc.gnu.org/PR13354
|
||
516. https://gcc.gnu.org/PR10467
|
||
517. https://gcc.gnu.org/PR11226
|
||
518. https://gcc.gnu.org/PR11227
|
||
519. https://gcc.gnu.org/PR12644
|
||
520. https://gcc.gnu.org/PR13149
|
||
521. https://gcc.gnu.org/PR12654
|
||
522. https://gcc.gnu.org/PR12965
|
||
523. https://gcc.gnu.org/PR13031
|
||
524. https://gcc.gnu.org/PR11634
|
||
525. https://gcc.gnu.org/PR12158
|
||
526. https://gcc.gnu.org/PR11992
|
||
527. https://gcc.gnu.org/PR9365
|
||
528. https://gcc.gnu.org/PR10392
|
||
529. https://gcc.gnu.org/PR11322
|
||
530. https://gcc.gnu.org/PR13069
|
||
531. https://gcc.gnu.org/PR13302
|
||
532. https://gcc.gnu.org/PR13585
|
||
533. https://gcc.gnu.org/PR8916
|
||
534. https://gcc.gnu.org/PR11576
|
||
535. https://gcc.gnu.org/PR13122
|
||
536. https://gcc.gnu.org/PR13256
|
||
537. https://gcc.gnu.org/PR13373
|
||
538. https://gcc.gnu.org/PR12561
|
||
539. https://gcc.gnu.org/PR6243
|
||
540. https://gcc.gnu.org/PR11397
|
||
541. https://gcc.gnu.org/PR12505
|
||
542. https://gcc.gnu.org/PR13150
|
||
543. https://gcc.gnu.org/PR12666
|
||
544. https://gcc.gnu.org/PR12969
|
||
545. https://gcc.gnu.org/PR10819
|
||
546. https://gcc.gnu.org/PR11612
|
||
547. https://gcc.gnu.org/PR13211
|
||
548. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
|
||
549. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
|
||
550. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
|
||
551. https://gcc.gnu.org/onlinedocs/
|
||
552. mailto:gcc-help@gcc.gnu.org
|
||
553. mailto:gcc@gcc.gnu.org
|
||
554. https://gcc.gnu.org/lists.html
|
||
555. https://www.fsf.org/
|
||
556. https://gcc.gnu.org/about.html
|
||
557. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.2/index.html
|
||
GCC 3.2 Release Series
|
||
|
||
April 25, 2003
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.2.3.
|
||
|
||
The purpose of the GCC 3.2 release series is to provide a stable
|
||
platform for OS distributors to use building their next releases. A
|
||
primary objective was to stabilize the C++ ABI; we believe that the
|
||
interface to the compiler and the C++ standard library are now
|
||
relatively stable.
|
||
|
||
Be aware that C++ code compiled by GCC 3.2.x will (in general) not
|
||
interoperate with code compiled by GCC 3.1.1 or earlier.
|
||
|
||
Please refer to our [2]detailed list of news, caveats, and bug-fixes
|
||
for further information.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 3.2.3
|
||
April 25, 2003 ([3]changes)
|
||
|
||
GCC 3.2.2
|
||
February 5, 2003 ([4]changes)
|
||
|
||
GCC 3.2.1
|
||
November 19, 2002 ([5]changes)
|
||
|
||
GCC 3.2
|
||
August 14, 2002 ([6]changes)
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [7]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, improvements, bug fixes, and other changes as
|
||
well as test results to GCC. This [8]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [9]GCC project
|
||
web site or contact the [10]GCC development mailing list.
|
||
|
||
To obtain GCC please use [11]our mirror sites, or our CVS server.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [12]GCC manuals. If that fails, the
|
||
[13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [17]maintained by the GCC team. Last modified
|
||
2018-09-30[18].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-3.2/changes.html
|
||
3. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
|
||
4. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.2
|
||
5. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
|
||
6. http://gcc.gnu.org/gcc-3.2/changes.html#3.2
|
||
7. http://gcc.gnu.org/gcc-3.2/buildstat.html
|
||
8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
9. http://gcc.gnu.org/index.html
|
||
10. mailto:gcc@gcc.gnu.org
|
||
11. http://gcc.gnu.org/mirrors.html
|
||
12. https://gcc.gnu.org/onlinedocs/
|
||
13. mailto:gcc-help@gcc.gnu.org
|
||
14. mailto:gcc@gcc.gnu.org
|
||
15. https://gcc.gnu.org/lists.html
|
||
16. https://www.fsf.org/
|
||
17. https://gcc.gnu.org/about.html
|
||
18. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.2/changes.html
|
||
GCC 3.2 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
The latest release in the 3.2 release series is [1]GCC 3.2.3.
|
||
|
||
Caveats and New Features
|
||
|
||
Caveats
|
||
|
||
* The C++ compiler does not correctly zero-initialize
|
||
pointers-to-data members. You must explicitly initialize them. For
|
||
example: int S::*m(0); will work, but depending on
|
||
default-initialization to zero will not work. This bug cannot be
|
||
fixed in GCC 3.2 without inducing unacceptable risks. It will be
|
||
fixed in GCC 3.3.
|
||
* This GCC release is based on the GCC 3.1 sourcebase, and thus has
|
||
all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
|
||
a number of C++ ABI fixes which make its C++ compiler generate
|
||
binary code which is incompatible with the C++ compilers found in
|
||
earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
|
||
|
||
Frontend Enhancements
|
||
|
||
C/C++/Objective-C
|
||
|
||
* The method of constructing the list of directories to be searched
|
||
for header files has been revised. If a directory named by a -I
|
||
option is a standard system include directory, the option is
|
||
ignored to ensure that the default search order for system
|
||
directories and the special treatment of system header files are
|
||
not defeated.
|
||
* The C and Objective-C compilers no longer accept the "Naming Types"
|
||
extension (typedef foo = bar); it was already unavailable in C++.
|
||
Code which uses it will need to be changed to use the "typeof"
|
||
extension instead: typedef typeof(bar) foo. (We have removed this
|
||
extension without a period of deprecation because it has caused the
|
||
compiler to crash since version 3.0 and no one noticed until very
|
||
recently. Thus we conclude it is not in widespread use.)
|
||
|
||
C++
|
||
|
||
* GCC 3.2 fixed serveral differences between the C++ ABI implemented
|
||
in GCC and the multi-vendor standard, but more have been found
|
||
since the release. 3.2.1 adds a new warning, -Wabi, to warn about
|
||
code which is affected by these bugs. We will fix these bugs in
|
||
some future release, once we are confident that all have been
|
||
found; until then, it is our intention to make changes to the ABI
|
||
only if they are necessary for correct compilation of C++, as
|
||
opposed to conformance to the ABI documents.
|
||
* For details on how to build an ABI compliant compiler for GNU/Linux
|
||
systems, check the [3]common C++ ABI page.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
IA-32
|
||
|
||
* Fixed a number of bugs in SSE and MMX intrinsics.
|
||
* Fixed common compiler crashes with SSE instruction set enabled
|
||
(implied by -march=pentium3, pentium4, athlon-xp)
|
||
* __m128 and __m128i is not 128bit aligned when used in structures.
|
||
|
||
x86-64
|
||
|
||
* A bug whereby the compiler could generate bad code for bzero has
|
||
been fixed.
|
||
* ABI fixes (implying ABI incompatibilities with previous version in
|
||
some corner cases)
|
||
* Fixed prefetch code generation
|
||
__________________________________________________________________
|
||
|
||
GCC 3.2.3
|
||
|
||
3.2.3 is a bug fix release only; there are no new features that were
|
||
not present in GCC 3.2.2.
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.2.3 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here), and some of the titles have been changed to
|
||
make them more clear.
|
||
|
||
Internal Compiler Errors (multi-platform)
|
||
|
||
* [4]3782: (c++) -quiet -fstats produces a segmentation fault in
|
||
cc1plus
|
||
* [5]6440: (c++) template specializations cause ICE
|
||
* [6]7050: (c++) ICE on: (i ? get_string() : throw)
|
||
* [7]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
|
||
* [8]7982: (c++) ICE due to infinite recursion (using STL set)
|
||
* [9]8068: exceedingly high (infinite) memory usage
|
||
* [10]8178: ICE with __builtin_ffs
|
||
* [11]8396: ICE in copy_to_mode_reg, in explow.c
|
||
* [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
|
||
* [13]9768: ICE when optimizing inline code at -O2
|
||
* [14]9798: (c++) Infinite recursion (segfault) in
|
||
cp/decl.c:push_using_directive with recursive using directives
|
||
* [15]9799: mismatching structure initializer with nested flexible
|
||
array member: ICE
|
||
* [16]9928: ICE on duplicate enum declaration
|
||
* [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
|
||
sparc, alpha)
|
||
* [18]10352: ICE in find_reloads_toplev
|
||
* [19]10336: ICE with -Wunreachable-code
|
||
|
||
C/optimizer bugs:
|
||
|
||
* [20]8224: Incorrect joining of signed and unsigned division
|
||
* [21]8613: -O2 produces wrong code with builtin strlen and
|
||
postincrements
|
||
* [22]8828: gcc reports some code is unreachable when it is not
|
||
* [23]9226: GCSE breaking argument passing
|
||
* [24]9853: miscompilation of non-constant structure initializer
|
||
* [25]9797: C99-style struct initializers are miscompiled
|
||
* [26]9967: Some standard C function calls should not be replaced
|
||
when optimizing for size
|
||
* [27]10116: ce2: invalid merge of join_bb in the context of switch
|
||
statements
|
||
* [28]10171: wrong code for inlined function
|
||
* [29]10175: -Wunreachable-code doesn't work for single lines
|
||
|
||
C++ compiler and library:
|
||
|
||
* [30]8316: Confusing diagnostic for code that misuses conversion
|
||
operators
|
||
* [31]9169: filebuf output fails if codecvt<>::out returns noconv
|
||
* [32]9420: incomplete type incorrectly reported
|
||
* [33]9459: typeof in return type specification of template not
|
||
supported
|
||
* [34]9507: filebuf::open handles ios_base::ate incorrectly
|
||
* [35]9538: Out-of-bounds memory access in streambuf::sputbackc
|
||
* [36]9602: Total confusion about template/friend/virtual/abstract
|
||
* [37]9993: destructor not called for local object created within and
|
||
returned from infinite loop
|
||
* [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
|
||
system
|
||
|
||
Java compiler and library:
|
||
|
||
* [39]9652: libgcj build fails on irix6.5.1[78]
|
||
* [40]10144: gas on solaris complains about bad .stabs lines for
|
||
java, native as unaffected
|
||
|
||
x86-specific (Intel/AMD):
|
||
|
||
* [41]8746: gcc miscompiles Linux kernel ppa driver on x86
|
||
* [42]9888: -mcpu=k6 -Os produces out of range loop instructions
|
||
* [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
|
||
failed
|
||
* [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
|
||
failed
|
||
|
||
SPARC-specific:
|
||
|
||
* [45]7784: [Sparc] ICE in extract_insn, in recog.c
|
||
* [46]7796: sparc extra failure with -m64 on execute/930921-1.c in
|
||
unroll.c
|
||
* [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
|
||
* [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
|
||
execute/loop-2d.c
|
||
* [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
|
||
* [50]9414: Scheduling bug on Ultrasparc
|
||
* [51]10067: GCC-3.2.2 outputs invalid asm on sparc64
|
||
|
||
m68k-specific:
|
||
|
||
* [52]7248: broken "inclusive or" code
|
||
* [53]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
|
||
|
||
PowerPC-specific:
|
||
|
||
* [54]9732: Wrong code with -O2 -fPIC
|
||
* [55]10073: ICE: powerpc cannot split insn
|
||
|
||
Alpha-specific:
|
||
|
||
* [56]7702: optimization problem on a DEC alpha under OSF1
|
||
* [57]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
|
||
|
||
HP-specific:
|
||
|
||
* [58]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
|
||
* [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
|
||
(missing symbol)
|
||
* [60]10271: Floating point args don't get reloaded across function
|
||
calls with -O2
|
||
|
||
MIPS specific:
|
||
|
||
* [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
|
||
compile/920501-4.c
|
||
|
||
CRIS specific:
|
||
|
||
* [62]10377: gcc-3.2.2 creates bad assembler code for cris
|
||
|
||
Miscellaneous and minor bugs:
|
||
|
||
* [63]6955: collect2 says "core dumped" when there is no core
|
||
__________________________________________________________________
|
||
|
||
GCC 3.2.2
|
||
|
||
Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
|
||
install by means of the DESTDIR variable. Parts of the GCC tree have
|
||
featured that support long before, but now it is available even from
|
||
the top level.
|
||
|
||
Other than that, GCC 3.2.2 is a bug fix release only; there are no new
|
||
features that were not present in GCC 3.2.1.
|
||
|
||
Bug Fixes
|
||
|
||
On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
|
||
functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
|
||
with FreeBSD 5.0 does not have this problem), Interix, a.out-based
|
||
GNU/Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI
|
||
change, and thus restores ABI-compatibility with previous releases
|
||
(except GCC 3.2.1) on these platforms.
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.2.2 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here) and some of the titles have been changed to
|
||
make them more clear.
|
||
|
||
Internal Compiler Errors (multi-platform)
|
||
|
||
* [64]5919: (c++) ICE when passing variable array to template
|
||
function
|
||
* [65]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
|
||
* [66]7507: ICE with -O2 when address of called function is a
|
||
complicated expression
|
||
* [67]7622: ICE with nested inline functions if function's address is
|
||
taken
|
||
* [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
|
||
[69]9258)
|
||
* [70]8031: (c++) ICE in code comparing typeids and casting from
|
||
virtual base
|
||
* [71]8275: ICE in simplify_subreg
|
||
* [72]8332: (c++) builtin strlen/template interaction causes ICE
|
||
* [73]8372: (c++) ICE on explicit call of destructor
|
||
* [74]8439: (c, not c++) empty struct causes ICE
|
||
* [75]8442: (c++) ICE with nested template classes
|
||
* [76]8518: ICE when compiling mplayer ("extern inline" issue)
|
||
* [77]8615: (c++) ICE with out-of-range character constant template
|
||
argument
|
||
* [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
|
||
* [79]8799: (c++) ICE: error reporting routines re-entered
|
||
* [80]9328: (c++) ICE with typeof(X) for overloaded X
|
||
* [81]9465: (preprocessor) cpp -traditional ICE on null bytes
|
||
|
||
C++ (compiler and library) bugs
|
||
|
||
* [82]47: scoping in nested classes is broken
|
||
* [83]6745: problems with iostream rdbuf() member function
|
||
* [84]8214: conversion from const char* const to char* sometimes
|
||
accepted illegally
|
||
* [85]8493: builtin strlen and overload resolution (same bug as
|
||
[86]8332)
|
||
* [87]8503: strange behaviour of function types
|
||
* [88]8727: compiler confused by inheritance from an anonymous struct
|
||
* [89]7445: poor performance of std::locale::classic() in
|
||
multi-threaded applications
|
||
* [90]8230: mishandling of overflow in vector<T>::resize
|
||
* [91]8399: sync_with_stdio(false) breaks unformatted input
|
||
* [92]8662: illegal access of private member of unnamed class is
|
||
accepted
|
||
* [93]8707: "make distclean" fails in libstdc++-v3 directory
|
||
* [94]8708: __USE_MALLOC doesn't work
|
||
* [95]8790: Use of non-thread-safe strtok in src/localename.cc
|
||
* [96]8887: Bug in date formats with --enable-clocale=generic
|
||
* [97]9076: Call Frame Instructions are not handled correctly during
|
||
unwind operation
|
||
* [98]9151: std::setprecision limited to 16 digits when outputting a
|
||
double to a stream
|
||
* [99]9168: codecvt<char, char, mbstate_t> overwrites output buffers
|
||
* [100]9269: libstdc++ headers: explicit specialization of function
|
||
must precede its first use
|
||
* [101]9322: return value of basic_streambuf<>::getloc affected by
|
||
locale::global
|
||
* [102]9433: segfault in runtime support for dynamic_cast
|
||
|
||
C and optimizer bugs
|
||
|
||
* [103]8032: GCC incorrectly initializes static structs that have
|
||
flexible arrays
|
||
* [104]8639: simple arithmetic expression broken
|
||
* [105]8794: optimization improperly eliminates certain expressions
|
||
* [106]8832: traditional "asm volatile" code is illegally optimized
|
||
* [107]8988: loop optimizer bug: with -O2, code is generated that
|
||
segfaults (found on i386, bug present for all platforms)
|
||
* [108]9492: structure copy clobbers subsequent stores to structure
|
||
|
||
Objective-C bugs
|
||
|
||
* [109]9267: Objective-C parser won't build with newer bison versions
|
||
(e.g. 1.875)
|
||
|
||
Ada bugs
|
||
|
||
* [110]8344: Ada build problem due to conflict between gcc/final.o,
|
||
gcc/ada/final.o
|
||
|
||
Preprocessor bugs
|
||
|
||
* [111]8524: _Pragma within macros is improperly expanded
|
||
* [112]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
|
||
-fshort-wchar
|
||
|
||
ARM-specific
|
||
|
||
* [113]9090: arm ICE with >= -O2; regression from gcc-2.95
|
||
|
||
x86-specific (Intel/AMD)
|
||
|
||
* [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
|
||
* [115]8599: loop unroll bug with -march=k6-3
|
||
* [116]9506: ABI breakage in structure return (affects BSD and
|
||
Cygwin, but not GNU/Linux)
|
||
|
||
FreeBSD 5.0 specific
|
||
|
||
* [117]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
|
||
|
||
RTEMS-specific
|
||
|
||
* [118]9292: hppa1.1-rtems configurery problems
|
||
* [119]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
|
||
* [120]9295: [mips-rtems] config/mips/rtems.h init/fini issue
|
||
* [121]9296: gthr-rtems regression
|
||
* [122]9316: powerpc-rtems: extending multilibs
|
||
|
||
HP-PA specific
|
||
|
||
* [123]9493: ICE with -O2 when building a simple function
|
||
|
||
Documentation
|
||
|
||
* [124]7341: hyperlink to gcov in GCC documentation doesn't work
|
||
* [125]8947: Please add a warning about "-malign-double" in docs
|
||
* [126]7448, [127]8882: typo cleanups
|
||
__________________________________________________________________
|
||
|
||
GCC 3.2.1
|
||
|
||
3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
|
||
generates code that is known not to be binary-compatible with the
|
||
vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included
|
||
in the distribution, for details.
|
||
|
||
This release also removes an old GCC extension, "naming types", and the
|
||
documentation now directs users to use a different GCC extension,
|
||
__typeof__, instead. The feature had evidently been broken for a while.
|
||
|
||
Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and
|
||
the new warning there are no new features that were not present in GCC
|
||
3.2.
|
||
|
||
In addition, the previous fix for [128]PR 7445 (poor performance of
|
||
std::locale::classic() in multi-threaded applications) was reverted
|
||
("unfixed"), because the "fix" was not thread-safe.
|
||
|
||
Bug Fixes
|
||
|
||
This section lists the problem reports (PRs) from GCC's bug tracking
|
||
system that are known to be fixed in the 3.2.1 release. This list might
|
||
not be complete (that is, it is possible that some PRs that have been
|
||
fixed are not listed here). As you can see, the number of bug fixes is
|
||
quite large, so it is strongly recommended that users of earlier GCC
|
||
3.x releases upgrade to GCC 3.2.1.
|
||
|
||
Internal Compiler Errors (multi-platform)
|
||
|
||
* [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
|
||
* [130]5661: (c++) ICE instantiating template on array of unknown
|
||
size (bad code)
|
||
* [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
|
||
64-bit platforms
|
||
* [132]6994: (c++) ICE in find_function_data
|
||
* [133]7150: preprocessor: GCC -dM -E gives an ICE
|
||
* [134]7160: ICE when optimizing branches without a return value
|
||
* [135]7228: (c++) ICE when using member template and template
|
||
function
|
||
* [136]7266: (c++) ICE with -pedantic on missing typename
|
||
* [137]7353: ICE from use of "Naming Types" extension, see above
|
||
* [138]7411: ICE in instantiate_virtual_regs_1, in function.c
|
||
* [139]7478: (c++) ICE on static_cast inside template
|
||
* [140]7526: preprocessor core dump when _Pragma implies #pragma
|
||
dependency
|
||
* [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803
|
||
is a duplicate)
|
||
* [143]7754: (c++) ICE on union with template parameter
|
||
* [144]7788: (c++) redeclaring a definition as an incomplete class
|
||
causes ICE
|
||
* [145]8031: (c++) ICE in comptypes, in cp/typeck.c
|
||
* [146]8055: preprocessor dies with SIG11 when building FreeBSD
|
||
kernel
|
||
* [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
|
||
variables
|
||
* [148]8134: (c++) ICE in force_store_init_value on legal code
|
||
* [149]8149: (c++) ICE on incomplete type
|
||
* [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
|
||
initialization
|
||
|
||
C++ (compiler and library) bugs
|
||
|
||
* [151]5607: No pointer adjustment in covariant return types
|
||
* [152]6579: Infinite loop with statement expressions in member
|
||
initialization
|
||
* [153]6803: Default copy constructor bug in GCC 3.1
|
||
* [154]7176: g++ confused by friend and static member with same name
|
||
* [155]7188: Segfault with template class and recursive (incorrect)
|
||
initializer list
|
||
* [156]7306: Regression: GCC 3.x fails to compile code with virtual
|
||
inheritance if a method has a variable number of arguments
|
||
* [157]7461: ctype<char>::classic_table() returns offset array on
|
||
Cygwin
|
||
* [158]7524: f(const float arg[3]) fails
|
||
* [159]7584: Erroneous ambiguous base error on using declaration
|
||
* [160]7676: Member template overloading problem
|
||
* [161]7679: infinite loop when a right parenthesis is missing
|
||
* [162]7811: default locale not taken from environment
|
||
* [163]7961: compare( char *) implemented incorrectly in
|
||
basic_string<>
|
||
* [164]8071: basic_ostream::operator<<(streambuf*) loops forever if
|
||
streambuf::underflow() leaves gptr() NULL (dups: [165]8127,
|
||
[166]6745)
|
||
* [167]8096: deque::at() throws std::range_error instead of
|
||
std::out_of_range
|
||
* [168]8127: cout << cin.rdbuf() infinite loop
|
||
* [169]8218: Excessively large memory consumed for classes with large
|
||
array members
|
||
* [170]8287: GCC 3.2: Destructor called for non-constructed local
|
||
object
|
||
* [171]8347: empty vector range used in string construction causes
|
||
core dump
|
||
* [172]8348: fail() flag is set in istringstream when eof() flag is
|
||
set
|
||
* [173]8391: regression: infinite loop in cp/decl2.c(finish_file)
|
||
|
||
C and optimizer bugs
|
||
|
||
* [174]6627: -fno-align-functions doesn't seem to disable function
|
||
alignment
|
||
* [175]6631: life_analysis misoptimizes code to initialize fields of
|
||
a structure
|
||
* [176]7102: unsigned char division results in floating exception
|
||
* [177]7120: Run once loop should *always* be unrolled
|
||
(pessimization)
|
||
* [178]7209: Bug involving array referencing and ?: operator
|
||
* [179]7515: invalid inlining of global function with -O3
|
||
* [180]7814: incorrect scheduling for glibc-2.2.92 strcpy test
|
||
* [181]8467: bug in sibling call optimization
|
||
|
||
Preprocessor bugs
|
||
|
||
* [182]4890: incorrect line markers from the traditional preprocessor
|
||
* [183]7357: -M option omits system headers files (making it the same
|
||
as -MM)
|
||
* [184]7358: Changes to Sun's make Dependencies
|
||
* [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
|
||
C headers
|
||
* [186]7862: Interrupting GCC -MD removes .d file but not .o
|
||
* [187]8190: Failed compilation deletes -MD dependency file
|
||
* [188]8524: _Pragma within macro is improperly expanded
|
||
|
||
x86 specific (Intel/AMD)
|
||
|
||
* [189]5351: (i686-only) function pass-by-value structure copy
|
||
corrupts stack ([190]7591 is a duplicate)
|
||
* [191]6845, [192]7034, [193]7124, [194]7174: ICE's with
|
||
-march=pentium3/pentium2/athlon (these are all the same underlying
|
||
bug, in MMX register use)
|
||
* [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same
|
||
as above?)
|
||
* [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
|
||
* [199]6981: wrong code in 64-bit manipulation on x86
|
||
* [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
|
||
macro
|
||
* [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
|
||
intrinsics are broken
|
||
* [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
|
||
-march=pentium4
|
||
* [203]7693: Typo in i386 mmintrin.h header
|
||
* [204]7723: ICE - Pentium3 sse - GCC 3.2
|
||
* [205]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
|
||
* [206]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
|
||
|
||
PowerPC specific
|
||
|
||
* [207]5967: GCC bug when profiling nested functions on powerpc
|
||
* [208]6984: wrong code generated with -O2, -O3, -Os for do-while
|
||
loop on PowerPC
|
||
* [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
|
||
* [210]7130: miscompiled code for GCC-3.1 on
|
||
powerpc-unknown-linux-gnu with -funroll-all-loops
|
||
* [211]7133: PowerPC ICE: unrecognizable insn
|
||
* [212]7380: ICE in extract_insn, at recog.c:2148
|
||
* [213]8252: ICE on Altivec code with optimization turned on
|
||
* [214]8451: Altivec ICE in GCC 3.2
|
||
|
||
HP/PA specific
|
||
|
||
* [215]7250: __ashrdi3 returns wrong value on 32 bit hppa
|
||
|
||
SPARC specific
|
||
|
||
* [216]6668: when using --disable-multilib, libgcc_s.so is installed
|
||
in the wrong place on sparc-solaris
|
||
* [217]7151: ICE when compiling for UltraSPARC
|
||
* [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
|
||
double and -O1
|
||
* [219]7842: [REGRESSION] SPARC code gen bug
|
||
|
||
ARM specific
|
||
|
||
* [220]7856: [arm] invalid offset in constant pool reference
|
||
* [221]7967: optimization produces wrong code (ARM)
|
||
|
||
Alpha specific
|
||
|
||
* [222]7374: __builtin_fabsl broken on alpha
|
||
|
||
IBM s390 specific
|
||
|
||
* [223]7370: ICE in fixup_var_refs_1 on s390x
|
||
* [224]7409: loop optimization bug on s390x-linux-gnu
|
||
* [225]8232: s390x: ICE when using bcmp with int length argument
|
||
|
||
SCO specific
|
||
|
||
* [226]7623: SCO OpenServer build fails with machmode.def: undefined
|
||
symbol: BITS_PER_UNIT
|
||
|
||
m68k/Coldfire specific
|
||
|
||
* [227]8314: crtbegin, crtend need to be multilib'ed for this
|
||
platform
|
||
|
||
Documentation
|
||
|
||
* [228]761: Document some undocumented options
|
||
* [229]5610: Fix documentation about invoking SSE instructions
|
||
(-mfpmath=sse)
|
||
* [230]7484: List -Wmissing-declarations as C-only option
|
||
* [231]7531: -mcmodel not documented for x86-64
|
||
* [232]8120: Update documentation of bad use of ##
|
||
__________________________________________________________________
|
||
|
||
GCC 3.2
|
||
|
||
3.2 is a small bug fix release, but there is a change to the
|
||
application binary interface (ABI), hence the change to the second part
|
||
of the version number.
|
||
|
||
The main purpose of the 3.2 release is to correct a couple of problems
|
||
in the C++ ABI, with the intention of providing a stable interface
|
||
going forward. Accordingly, 3.2 is only a small change to 3.1.1.
|
||
|
||
Bug Fixes
|
||
|
||
C++
|
||
|
||
* [233]7320: g++ 3.2 relocation problem
|
||
* [234]7470: vtable: virtual function pointers not in declaration
|
||
order
|
||
|
||
libstdc++
|
||
|
||
* [235]6410: Trouble with non-ASCII monetary symbols and wchar_t
|
||
* [236]6503, [237]6642, [238]7186: Problems with comparing or
|
||
subtracting various types of const and non-const iterators
|
||
* [239]7216: ambiguity with basic_iostream::traits_type
|
||
* [240]7220: problem with basic_istream::ignore(0,delimiter)
|
||
* [241]7222: locale::operator==() doesn't work on std::locale("")
|
||
* [242]7286: placement operator delete issue
|
||
* [243]7442: cxxabi.h does not match the C++ ABI
|
||
* [244]7445: poor performance of std::locale::classic() in
|
||
multi-threaded applications
|
||
|
||
x86-64 specific
|
||
|
||
* [245]7291: off-by-one in generated inline bzero code for x86-64
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [246]GCC manuals. If that fails, the
|
||
[247]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [248]gcc@gcc.gnu.org. All of [249]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [250]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [251]maintained by the GCC team. Last modified
|
||
2018-09-30[252].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
|
||
2. http://gcc.gnu.org/gcc-3.1/changes.html
|
||
3. http://gcc.gnu.org/gcc-3.2/c++-abi.html
|
||
4. https://gcc.gnu.org/PR3782
|
||
5. https://gcc.gnu.org/PR6440
|
||
6. https://gcc.gnu.org/PR7050
|
||
7. https://gcc.gnu.org/PR7741
|
||
8. https://gcc.gnu.org/PR7982
|
||
9. https://gcc.gnu.org/PR8068
|
||
10. https://gcc.gnu.org/PR8178
|
||
11. https://gcc.gnu.org/PR8396
|
||
12. https://gcc.gnu.org/PR8674
|
||
13. https://gcc.gnu.org/PR9768
|
||
14. https://gcc.gnu.org/PR9798
|
||
15. https://gcc.gnu.org/PR9799
|
||
16. https://gcc.gnu.org/PR9928
|
||
17. https://gcc.gnu.org/PR10114
|
||
18. https://gcc.gnu.org/PR10352
|
||
19. https://gcc.gnu.org/PR10336
|
||
20. https://gcc.gnu.org/PR8224
|
||
21. https://gcc.gnu.org/PR8613
|
||
22. https://gcc.gnu.org/PR8828
|
||
23. https://gcc.gnu.org/PR9226
|
||
24. https://gcc.gnu.org/PR9853
|
||
25. https://gcc.gnu.org/PR9797
|
||
26. https://gcc.gnu.org/PR9967
|
||
27. https://gcc.gnu.org/PR10116
|
||
28. https://gcc.gnu.org/PR10171
|
||
29. https://gcc.gnu.org/PR10175
|
||
30. https://gcc.gnu.org/PR8316
|
||
31. https://gcc.gnu.org/PR9169
|
||
32. https://gcc.gnu.org/PR9420
|
||
33. https://gcc.gnu.org/PR9459
|
||
34. https://gcc.gnu.org/PR9507
|
||
35. https://gcc.gnu.org/PR9538
|
||
36. https://gcc.gnu.org/PR9602
|
||
37. https://gcc.gnu.org/PR9993
|
||
38. https://gcc.gnu.org/PR10167
|
||
39. https://gcc.gnu.org/PR9652
|
||
40. https://gcc.gnu.org/PR10144
|
||
41. https://gcc.gnu.org/PR8746
|
||
42. https://gcc.gnu.org/PR9888
|
||
43. https://gcc.gnu.org/PR9638
|
||
44. https://gcc.gnu.org/PR9954
|
||
45. https://gcc.gnu.org/PR7784
|
||
46. https://gcc.gnu.org/PR7796
|
||
47. https://gcc.gnu.org/PR8281
|
||
48. https://gcc.gnu.org/PR8366
|
||
49. https://gcc.gnu.org/PR8726
|
||
50. https://gcc.gnu.org/PR9414
|
||
51. https://gcc.gnu.org/PR10067
|
||
52. https://gcc.gnu.org/PR7248
|
||
53. https://gcc.gnu.org/PR8343
|
||
54. https://gcc.gnu.org/PR9732
|
||
55. https://gcc.gnu.org/PR10073
|
||
56. https://gcc.gnu.org/PR7702
|
||
57. https://gcc.gnu.org/PR9671
|
||
58. https://gcc.gnu.org/PR8694
|
||
59. https://gcc.gnu.org/PR9953
|
||
60. https://gcc.gnu.org/PR10271
|
||
61. https://gcc.gnu.org/PR6362
|
||
62. https://gcc.gnu.org/PR10377
|
||
63. https://gcc.gnu.org/PR6955
|
||
64. https://gcc.gnu.org/PR5919
|
||
65. https://gcc.gnu.org/PR7129
|
||
66. https://gcc.gnu.org/PR7507
|
||
67. https://gcc.gnu.org/PR7622
|
||
68. https://gcc.gnu.org/PR7681
|
||
69. https://gcc.gnu.org/PR9528
|
||
70. https://gcc.gnu.org/PR8031
|
||
71. https://gcc.gnu.org/PR8275
|
||
72. https://gcc.gnu.org/PR8332
|
||
73. https://gcc.gnu.org/PR8372
|
||
74. https://gcc.gnu.org/PR8439
|
||
75. https://gcc.gnu.org/PR8442
|
||
76. https://gcc.gnu.org/PR8518
|
||
77. https://gcc.gnu.org/PR8615
|
||
78. https://gcc.gnu.org/PR8663
|
||
79. https://gcc.gnu.org/PR8799
|
||
80. https://gcc.gnu.org/PR9328
|
||
81. https://gcc.gnu.org/PR9465
|
||
82. https://gcc.gnu.org/PR47
|
||
83. https://gcc.gnu.org/PR6745
|
||
84. https://gcc.gnu.org/PR8214
|
||
85. https://gcc.gnu.org/PR8493
|
||
86. https://gcc.gnu.org/PR8332
|
||
87. https://gcc.gnu.org/PR8503
|
||
88. https://gcc.gnu.org/PR8727
|
||
89. https://gcc.gnu.org/PR7445
|
||
90. https://gcc.gnu.org/PR8230
|
||
91. https://gcc.gnu.org/PR8399
|
||
92. https://gcc.gnu.org/PR8662
|
||
93. https://gcc.gnu.org/PR8707
|
||
94. https://gcc.gnu.org/PR8708
|
||
95. https://gcc.gnu.org/PR8790
|
||
96. https://gcc.gnu.org/PR8887
|
||
97. https://gcc.gnu.org/PR9076
|
||
98. https://gcc.gnu.org/PR9151
|
||
99. https://gcc.gnu.org/PR9168
|
||
100. https://gcc.gnu.org/PR9269
|
||
101. https://gcc.gnu.org/PR9322
|
||
102. https://gcc.gnu.org/PR9433
|
||
103. https://gcc.gnu.org/PR8032
|
||
104. https://gcc.gnu.org/PR8639
|
||
105. https://gcc.gnu.org/PR8794
|
||
106. https://gcc.gnu.org/PR8832
|
||
107. https://gcc.gnu.org/PR8988
|
||
108. https://gcc.gnu.org/PR9492
|
||
109. https://gcc.gnu.org/PR9267
|
||
110. https://gcc.gnu.org/PR8344
|
||
111. https://gcc.gnu.org/PR8524
|
||
112. https://gcc.gnu.org/PR8880
|
||
113. https://gcc.gnu.org/PR9090
|
||
114. https://gcc.gnu.org/PR8588
|
||
115. https://gcc.gnu.org/PR8599
|
||
116. https://gcc.gnu.org/PR9506
|
||
117. https://gcc.gnu.org/PR9484
|
||
118. https://gcc.gnu.org/PR9292
|
||
119. https://gcc.gnu.org/PR9293
|
||
120. https://gcc.gnu.org/PR9295
|
||
121. https://gcc.gnu.org/PR9296
|
||
122. https://gcc.gnu.org/PR9316
|
||
123. https://gcc.gnu.org/PR9493
|
||
124. https://gcc.gnu.org/PR7341
|
||
125. https://gcc.gnu.org/PR8947
|
||
126. https://gcc.gnu.org/PR7448
|
||
127. https://gcc.gnu.org/PR8882
|
||
128. https://gcc.gnu.org/PR7445
|
||
129. https://gcc.gnu.org/PR2521
|
||
130. https://gcc.gnu.org/PR5661
|
||
131. https://gcc.gnu.org/PR6419
|
||
132. https://gcc.gnu.org/PR6994
|
||
133. https://gcc.gnu.org/PR7150
|
||
134. https://gcc.gnu.org/PR7160
|
||
135. https://gcc.gnu.org/PR7228
|
||
136. https://gcc.gnu.org/PR7266
|
||
137. https://gcc.gnu.org/PR7353
|
||
138. https://gcc.gnu.org/PR7411
|
||
139. https://gcc.gnu.org/PR7478
|
||
140. https://gcc.gnu.org/PR7526
|
||
141. https://gcc.gnu.org/PR7721
|
||
142. https://gcc.gnu.org/PR7803
|
||
143. https://gcc.gnu.org/PR7754
|
||
144. https://gcc.gnu.org/PR7788
|
||
145. https://gcc.gnu.org/PR8031
|
||
146. https://gcc.gnu.org/PR8055
|
||
147. https://gcc.gnu.org/PR8067
|
||
148. https://gcc.gnu.org/PR8134
|
||
149. https://gcc.gnu.org/PR8149
|
||
150. https://gcc.gnu.org/PR8160
|
||
151. https://gcc.gnu.org/PR5607
|
||
152. https://gcc.gnu.org/PR6579
|
||
153. https://gcc.gnu.org/PR6803
|
||
154. https://gcc.gnu.org/PR7176
|
||
155. https://gcc.gnu.org/PR7188
|
||
156. https://gcc.gnu.org/PR7306
|
||
157. https://gcc.gnu.org/PR7461
|
||
158. https://gcc.gnu.org/PR7524
|
||
159. https://gcc.gnu.org/PR7584
|
||
160. https://gcc.gnu.org/PR7676
|
||
161. https://gcc.gnu.org/PR7679
|
||
162. https://gcc.gnu.org/PR7811
|
||
163. https://gcc.gnu.org/PR7961
|
||
164. https://gcc.gnu.org/PR8071
|
||
165. https://gcc.gnu.org/PR8127
|
||
166. https://gcc.gnu.org/PR6745
|
||
167. https://gcc.gnu.org/PR8096
|
||
168. https://gcc.gnu.org/PR8127
|
||
169. https://gcc.gnu.org/PR8218
|
||
170. https://gcc.gnu.org/PR8287
|
||
171. https://gcc.gnu.org/PR8347
|
||
172. https://gcc.gnu.org/PR8348
|
||
173. https://gcc.gnu.org/PR8391
|
||
174. https://gcc.gnu.org/PR6627
|
||
175. https://gcc.gnu.org/PR6631
|
||
176. https://gcc.gnu.org/PR7102
|
||
177. https://gcc.gnu.org/PR7120
|
||
178. https://gcc.gnu.org/PR7209
|
||
179. https://gcc.gnu.org/PR7515
|
||
180. https://gcc.gnu.org/PR7814
|
||
181. https://gcc.gnu.org/PR8467
|
||
182. https://gcc.gnu.org/PR4890
|
||
183. https://gcc.gnu.org/PR7357
|
||
184. https://gcc.gnu.org/PR7358
|
||
185. https://gcc.gnu.org/PR7602
|
||
186. https://gcc.gnu.org/PR7862
|
||
187. https://gcc.gnu.org/PR8190
|
||
188. https://gcc.gnu.org/PR8524
|
||
189. https://gcc.gnu.org/PR5351
|
||
190. https://gcc.gnu.org/PR7591
|
||
191. https://gcc.gnu.org/PR6845
|
||
192. https://gcc.gnu.org/PR7034
|
||
193. https://gcc.gnu.org/PR7124
|
||
194. https://gcc.gnu.org/PR7174
|
||
195. https://gcc.gnu.org/PR7134
|
||
196. https://gcc.gnu.org/PR7375
|
||
197. https://gcc.gnu.org/PR7390
|
||
198. https://gcc.gnu.org/PR6890
|
||
199. https://gcc.gnu.org/PR6981
|
||
200. https://gcc.gnu.org/PR7242
|
||
201. https://gcc.gnu.org/PR7396
|
||
202. https://gcc.gnu.org/PR7630
|
||
203. https://gcc.gnu.org/PR7693
|
||
204. https://gcc.gnu.org/PR7723
|
||
205. https://gcc.gnu.org/PR7951
|
||
206. https://gcc.gnu.org/PR8146
|
||
207. https://gcc.gnu.org/PR5967
|
||
208. https://gcc.gnu.org/PR6984
|
||
209. https://gcc.gnu.org/PR7114
|
||
210. https://gcc.gnu.org/PR7130
|
||
211. https://gcc.gnu.org/PR7133
|
||
212. https://gcc.gnu.org/PR7380
|
||
213. https://gcc.gnu.org/PR8252
|
||
214. https://gcc.gnu.org/PR8451
|
||
215. https://gcc.gnu.org/PR7250
|
||
216. https://gcc.gnu.org/PR6668
|
||
217. https://gcc.gnu.org/PR7151
|
||
218. https://gcc.gnu.org/PR7335
|
||
219. https://gcc.gnu.org/PR7842
|
||
220. https://gcc.gnu.org/PR7856
|
||
221. https://gcc.gnu.org/PR7967
|
||
222. https://gcc.gnu.org/PR7374
|
||
223. https://gcc.gnu.org/PR7370
|
||
224. https://gcc.gnu.org/PR7409
|
||
225. https://gcc.gnu.org/PR8232
|
||
226. https://gcc.gnu.org/PR7623
|
||
227. https://gcc.gnu.org/PR8314
|
||
228. https://gcc.gnu.org/PR761
|
||
229. https://gcc.gnu.org/PR5610
|
||
230. https://gcc.gnu.org/PR7484
|
||
231. https://gcc.gnu.org/PR7531
|
||
232. https://gcc.gnu.org/PR8120
|
||
233. https://gcc.gnu.org/PR7320
|
||
234. https://gcc.gnu.org/PR7470
|
||
235. https://gcc.gnu.org/PR6410
|
||
236. https://gcc.gnu.org/PR6503
|
||
237. https://gcc.gnu.org/PR6642
|
||
238. https://gcc.gnu.org/PR7186
|
||
239. https://gcc.gnu.org/PR7216
|
||
240. https://gcc.gnu.org/PR7220
|
||
241. https://gcc.gnu.org/PR7222
|
||
242. https://gcc.gnu.org/PR7286
|
||
243. https://gcc.gnu.org/PR7442
|
||
244. https://gcc.gnu.org/PR7445
|
||
245. https://gcc.gnu.org/PR7291
|
||
246. https://gcc.gnu.org/onlinedocs/
|
||
247. mailto:gcc-help@gcc.gnu.org
|
||
248. mailto:gcc@gcc.gnu.org
|
||
249. https://gcc.gnu.org/lists.html
|
||
250. https://www.fsf.org/
|
||
251. https://gcc.gnu.org/about.html
|
||
252. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.1/index.html
|
||
GCC 3.1
|
||
|
||
July 27, 2002
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.1.1.
|
||
|
||
The links below still apply to GCC 3.1.1.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
May 15, 2002
|
||
|
||
The [2]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.1.
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
A list of [3]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed [4]new features, improvements, bug fixes, and other changes
|
||
as well as test results to GCC. This [5]amazing group of volunteers is
|
||
what makes GCC successful.
|
||
|
||
For additional information about GCC please refer to the [6]GCC project
|
||
web site or contact the [7]GCC development mailing list.
|
||
|
||
To obtain GCC please use [8]our mirror sites, or our CVS server.
|
||
__________________________________________________________________
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [9]GCC manuals. If that fails, the
|
||
[10]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [11]gcc@gcc.gnu.org. All of [12]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [14]maintained by the GCC team. Last modified
|
||
2018-09-30[15].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://www.gnu.org/
|
||
3. http://gcc.gnu.org/gcc-3.1/buildstat.html
|
||
4. http://gcc.gnu.org/gcc-3.1/changes.html
|
||
5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
6. http://gcc.gnu.org/index.html
|
||
7. mailto:gcc@gcc.gnu.org
|
||
8. http://gcc.gnu.org/mirrors.html
|
||
9. https://gcc.gnu.org/onlinedocs/
|
||
10. mailto:gcc-help@gcc.gnu.org
|
||
11. mailto:gcc@gcc.gnu.org
|
||
12. https://gcc.gnu.org/lists.html
|
||
13. https://www.fsf.org/
|
||
14. https://gcc.gnu.org/about.html
|
||
15. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.1/changes.html
|
||
GCC 3.1 Release Series
|
||
Changes, New Features, and Fixes
|
||
|
||
Additional changes in GCC 3.1.1
|
||
|
||
* A bug related to how structures and unions are returned has been
|
||
fixed for powerpc-*-netbsd*.
|
||
* An important bug in the implementation of -fprefetch-loop-arrays
|
||
has been fixed. Previously the optimization prefetched random
|
||
blocks of memory for most targets except for i386.
|
||
* The Java compiler now compiles Java programs much faster and also
|
||
works with parallel make.
|
||
* Nested functions have been fixed for mips*-*-netbsd*.
|
||
* Some missing floating point support routines have beed added for
|
||
mips*-*-netbsd*.
|
||
* This [1]message gives additional information about the bugs fixed
|
||
in this release.
|
||
|
||
Caveats
|
||
|
||
* The -traditional C compiler option has been deprecated and will be
|
||
removed in GCC 3.3. (It remains possible to preprocess non-C code
|
||
with the traditional preprocessor.)
|
||
* The default debugging format for most ELF platforms (including
|
||
GNU/Linux and FreeBSD; notable exception is Solaris) has changed
|
||
from stabs to DWARF2. This requires GDB 5.1.1 or later.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat,
|
||
and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure
|
||
for profile driven optimizations.
|
||
Options -fprofile-arcs and -fbranch-probabilities can now be used
|
||
to improve speed of the generated code by profiling the actual
|
||
program behaviour on typical runs. In the absence of profile info
|
||
the compiler attempts to guess the profile statically.
|
||
* [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
|
||
monitor performance of the generated code.
|
||
According to the SPECInt2000 results on an AMD Athlon CPU, the code
|
||
generated by GCC 3.1 is 6% faster on the average (8.2% faster with
|
||
profile feedback) compared to GCC 3.0. The code produced by GCC 3.0
|
||
is about 2.1% faster compared to 2.95.3. Tests were done using the
|
||
-O2 -march=athlon command-line options.
|
||
* Alexandre Oliva, of Red Hat, has generalized the tree inlining
|
||
infrastructure developed by CodeSourcery, LLC for the C++ front
|
||
end, so that it is now used in the C front end too. Inlining
|
||
functions as trees exposes them earlier to the compiler, giving it
|
||
more opportunities for optimization.
|
||
* Support for data prefetching instructions has been added to the GCC
|
||
back end and several targets. A new __builtin_prefetch intrinsic is
|
||
available to explicitly insert prefetch instructions and
|
||
experimental support for loop array prefetching has been added (see
|
||
-fprefetch-loop-array documentation).
|
||
* Support for emitting debugging information for macros has been
|
||
added for DWARF2. It is activated using -g3.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
C/C++
|
||
|
||
* A few more [4]ISO C99 features.
|
||
* The preprocessor is 10-50% faster than the preprocessor in GCC 3.0.
|
||
* The preprocessor's symbol table has been merged with the symbol
|
||
table of the C, C++ and Objective-C front ends.
|
||
* The preprocessor consumes less memory than the preprocessor in GCC
|
||
3.0, often significantly so. On normal input files, it typically
|
||
consumes less memory than pre-3.0 cccp-based GCC, too.
|
||
|
||
C++
|
||
|
||
* -fhonor-std and -fno-honor-std have been removed. -fno-honor-std
|
||
was a workaround to allow std compliant code to work with the
|
||
non-std compliant libstdc++-v2. libstdc++-v3 is std compliant.
|
||
* The C++ ABI has been fixed so that void (A::*)() const is mangled
|
||
as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only
|
||
affects pointer to cv-qualified member function types.
|
||
* The C++ ABI has been changed to correctly handle this code:
|
||
struct A {
|
||
void operator delete[] (void *, size_t);
|
||
};
|
||
|
||
struct B : public A {
|
||
};
|
||
|
||
new B[10];
|
||
|
||
The amount of storage allocated for the array will be greater than
|
||
it was in 3.0, in order to store the number of elements in the
|
||
array, so that the correct size can be passed to operator delete[]
|
||
when the array is deleted. Previously, the value passed to operator
|
||
delete[] was unpredictable.
|
||
This change will only affect code that declares a two-argument
|
||
operator delete[] with a second parameter of type size_t in a base
|
||
class, and does not override that definition in a derived class.
|
||
* The C++ ABI has been changed so that:
|
||
struct A {
|
||
void operator delete[] (void *, size_t);
|
||
void operator delete[] (void *);
|
||
};
|
||
|
||
does not cause unnecessary storage to be allocated when an array of
|
||
A objects is allocated.
|
||
This change will only affect code that declares both of these forms
|
||
of operator delete[], and declared the two-argument form before the
|
||
one-argument form.
|
||
* The C++ ABI has been changed so that when a parameter is passed by
|
||
value, any cleanup for that parameter is performed in the caller,
|
||
as specified by the ia64 C++ ABI, rather than the called function
|
||
as before. As a result, classes with a non-trivial destructor but a
|
||
trivial copy constructor will be passed and returned by invisible
|
||
reference, rather than by bitwise copy as before.
|
||
* G++ now supports the "named return value optimization": for code
|
||
like
|
||
A f () {
|
||
A a;
|
||
...
|
||
return a;
|
||
}
|
||
|
||
G++ will allocate a in the return value slot, so that the return
|
||
becomes a no-op. For this to work, all return statements in the
|
||
function must return the same variable.
|
||
* Improvements to the C++ library are listed in [5]the libstdc++-v3
|
||
FAQ.
|
||
|
||
Objective-C
|
||
|
||
* Annoying linker warnings (due to incorrect code being generated)
|
||
have been fixed.
|
||
* If a class method cannot be found, the compiler no longer issues a
|
||
warning if a corresponding instance method exists in the root
|
||
class.
|
||
* Forward @protocol declarations have been fixed.
|
||
* Loading of categories has been fixed in certain situations (GNU run
|
||
time only).
|
||
* The class lookup in the run-time library has been rewritten so that
|
||
class method dispatch is more than twice as fast as it used to be
|
||
(GNU run time only).
|
||
|
||
Java
|
||
|
||
* libgcj now includes RMI, java.lang.ref.*, javax.naming, and
|
||
javax.transaction.
|
||
* Property files and other system resources can be compiled into
|
||
executables which use libgcj using the new gcj --resource feature.
|
||
* libgcj has been ported to more platforms. In particular there is
|
||
now a mostly-functional mingw32 (Windows) target port.
|
||
* JNI and CNI invocation interfaces were implemented, so gcj-compiled
|
||
Java code can now be called from a C/C++ application.
|
||
* gcj can now use builtin functions for certain known methods, for
|
||
instance Math.cos.
|
||
* gcj can now automatically remove redundant array-store checks in
|
||
some common cases.
|
||
* The --no-store-checks optimization option was added. This can be
|
||
used to omit runtime store checks for code which is known not to
|
||
throw ArrayStoreException
|
||
* The following third party interface standards were added to libgcj:
|
||
org.w3c.dom and org.xml.sax.
|
||
* java.security has been merged with GNU Classpath. The new package
|
||
is now JDK 1.2 compliant, and much more complete.
|
||
* A bytecode verifier was added to the libgcj interpreter.
|
||
* java.lang.Character was rewritten to comply with the Unicode 3.0
|
||
standard, and improve performance.
|
||
* Partial support for many more locales was added to libgcj.
|
||
* Socket timeouts have been implemented.
|
||
* libgcj has been merged into a single shared library. There are no
|
||
longer separate shared libraries for the garbage collector and
|
||
zlib.
|
||
* Several performance improvements were made to gcj and libgcj:
|
||
+ Hash synchronization (thin locks)
|
||
+ A special allocation path for finalizer-free objects
|
||
+ Thread-local allocation
|
||
+ Parallel GC, and other GC tweaks
|
||
|
||
Fortran
|
||
|
||
Fortran improvements are listed in [6]the Fortran documentation.
|
||
|
||
Ada
|
||
|
||
[7]AdaCore, has contributed its GNAT Ada 95 front end and associated
|
||
tools. The GNAT compiler fully implements the Ada language as defined
|
||
by the ISO/IEC 8652 standard.
|
||
|
||
Please note that the integration of the Ada front end is still work in
|
||
progress.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
* Hans-Peter Nilsson has contributed a port to MMIX, the CPU
|
||
architecture used in new editions of Donald E. Knuth's The Art of
|
||
Computer Programming.
|
||
* Axis Communications has contributed its port to the CRIS CPU
|
||
architecture, used in the ETRAX system-on-a-chip series.
|
||
* Alexandre Oliva, of Red Hat, has contributed a port to the SuperH
|
||
SH5 64-bit RISC microprocessor architecture, extending the existing
|
||
SH port.
|
||
* UltraSPARC is fully supported in 64-bit mode. The option -m64
|
||
enables it.
|
||
* For compatibility with the Sun compiler #pragma redefine_extname
|
||
has been implemented on Solaris.
|
||
* The x86 back end has had some noticeable work done to it.
|
||
+ SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas
|
||
Jaeger have contributed a port to the AMD x86-64 architecture.
|
||
For more information on x86-64 see http://www.x86-64.org.
|
||
+ The compiler now supports MMX, 3DNow!, SSE, and SSE2
|
||
instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will
|
||
enable the respective instruction sets. Intel C++ compatible
|
||
MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics
|
||
will be added in next major release.
|
||
+ Following those improvements, targets for Pentium MMX, K6-2,
|
||
K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were
|
||
added. Refer to the documentation on -march= and -mcpu=
|
||
options for details.
|
||
+ For those targets that support it, -mfpmath=sse will cause the
|
||
compiler to generate SSE/SSE2 instructions for floating point
|
||
math instead of x87 instructions. Usually, this will lead to
|
||
quicker code — especially on the Pentium 4. Note that only
|
||
scalar floating point instructions are used and GCC does not
|
||
exploit SIMD features yet.
|
||
+ Prefetch support has been added to the Pentium III, Pentium 4,
|
||
K6-2, K6-3, and Athlon series.
|
||
+ Code generated for floating point to integer conversions has
|
||
been improved leading to better performance of many 3D
|
||
applications.
|
||
* The PowerPC back end has added 64-bit PowerPC GNU/Linux support.
|
||
* C++ support for AIX has been improved.
|
||
* Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the
|
||
PowerPC port supporting the AltiVec programming model (SIMD). The
|
||
support, though presently useful, is experimental and is expected
|
||
to stabilize for 3.2. The support is written to conform to
|
||
Motorola's AltiVec specs. See -maltivec.
|
||
|
||
Obsolete Systems
|
||
|
||
Support for a number of older systems has been declared obsolete in GCC
|
||
3.1. Unless there is activity to revive them, the next release of GCC
|
||
will have their sources permanently removed.
|
||
|
||
All configurations of the following processor architectures have been
|
||
declared obsolete:
|
||
* MIL-STD-1750A, 1750a-*-*
|
||
* AMD A29k, a29k-*-*
|
||
* Convex, c*-convex-*
|
||
* Clipper, clipper-*-*
|
||
* Elxsi, elxsi-*-*
|
||
* Intel i860, i860-*-*
|
||
* Sun picoJava, pj-*-* and pjl-*-*
|
||
* Western Electric 32000, we32k-*-*
|
||
|
||
Most configurations of the following processor architectures have been
|
||
declared obsolete, but we are preserving a few systems which may have
|
||
active developers. It is unlikely that the remaining systems will
|
||
survive much longer unless we see definite signs of port activity.
|
||
* Motorola 88000 except
|
||
+ Generic a.out, m88k-*-aout*
|
||
+ Generic SVR4, m88k-*-sysv4
|
||
+ OpenBSD, m88k-*-openbsd*
|
||
* NS32k except
|
||
+ NetBSD, ns32k-*-netbsd*
|
||
+ OpenBSD, ns32k-*-openbsd*.
|
||
* ROMP except
|
||
+ OpenBSD, romp-*-openbsd*.
|
||
|
||
Finally, only some configurations of these processor architectures are
|
||
being obsoleted.
|
||
* Alpha:
|
||
+ OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka
|
||
alpha*-*-osf[45], are still supported.)
|
||
* ARM:
|
||
+ RISCiX, arm-*-riscix*.
|
||
* i386:
|
||
+ 386BSD, i?86-*-bsd*
|
||
+ Chorus, i?86-*-chorusos*
|
||
+ DG/UX, i?86-*-dgux*
|
||
+ FreeBSD 1.x, i?86-*-freebsd1.*
|
||
+ IBM AIX, i?86-*-aix*
|
||
+ ISC UNIX, i?86-*-isc*
|
||
+ GNU/Linux with pre-BFD linker, i?86-*-linux*oldld*
|
||
+ NEXTstep, i?86-next-*
|
||
+ OSF UNIX, i?86-*-osf1* and i?86-*-osfrose*
|
||
+ RTEMS/coff, i?86-*-rtemscoff*
|
||
+ RTEMS/go32, i?86-go32-rtems*
|
||
+ Sequent/BSD, i?86-sequent-bsd*
|
||
+ Sequent/ptx before version 3, i?86-sequent-ptx[12]* and
|
||
i?86-sequent-sysv3*
|
||
+ SunOS, i?86-*-sunos*
|
||
* Motorola 68000:
|
||
+ Altos, m68[k0]*-altos-*
|
||
+ Apollo, m68[k0]*-apollo-*
|
||
+ Apple A/UX, m68[k0]*-apple-*
|
||
+ Bull, m68[k0]*-bull-*
|
||
+ Convergent, m68[k0]*-convergent-*
|
||
+ Generic SVR3, m68[k0]*-*-sysv3*
|
||
+ ISI, m68[k0]*-isi-*
|
||
+ LynxOS, m68[k0]*-*-lynxos*
|
||
+ NEXT, m68[k0]*-next-*
|
||
+ RTEMS/coff, m68[k0]*-*-rtemscoff*
|
||
+ Sony, m68[k0]*-sony-*
|
||
* MIPS:
|
||
+ DEC Ultrix, mips-*-ultrix* and mips-dec-*
|
||
+ Generic BSD, mips-*-bsd*
|
||
+ Generic System V, mips-*-sysv*
|
||
+ IRIX before version 5, mips-sgi-irix[1234]*
|
||
+ RiscOS, mips-*-riscos*
|
||
+ Sony, mips-sony-*
|
||
+ Tandem, mips-tandem-*
|
||
* SPARC:
|
||
+ RTEMS/a.out, sparc-*-rtemsaout*.
|
||
|
||
Documentation improvements
|
||
|
||
* The old manual ("Using and Porting the GNU Compiler Collection")
|
||
has been replaced by a users manual ("Using the GNU Compiler
|
||
Collection") and a separate internals reference manual ("GNU
|
||
Compiler Collection Internals").
|
||
* More complete and much improved documentation about GCC's internal
|
||
representation used by the C and C++ front ends.
|
||
* Many cleanups and improvements in general.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [8]GCC manuals. If that fails, the
|
||
[9]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [10]gcc@gcc.gnu.org. All of [11]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [13]maintained by the GCC team. Last modified
|
||
2018-09-30[14].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
|
||
2. http://gcc.gnu.org/news/profiledriven.html
|
||
3. http://gcc.gnu.org/benchmarks/
|
||
4. http://gcc.gnu.org/c99status.html
|
||
5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
|
||
6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
|
||
7. https://www.adacore.com/
|
||
8. https://gcc.gnu.org/onlinedocs/
|
||
9. mailto:gcc-help@gcc.gnu.org
|
||
10. mailto:gcc@gcc.gnu.org
|
||
11. https://gcc.gnu.org/lists.html
|
||
12. https://www.fsf.org/
|
||
13. https://gcc.gnu.org/about.html
|
||
14. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.0/index.html
|
||
GCC 3.0.4
|
||
|
||
February 20, 2002
|
||
|
||
The [1]GNU project and the GCC developers are pleased to announce the
|
||
release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0
|
||
series.
|
||
|
||
This release series is no longer maintained.
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
GCC 3.0.x has several new optimizations, new targets, new languages and
|
||
many other new features, relative to GCC 2.95.x. See the [2]new
|
||
features page for a more complete list.
|
||
|
||
A list of [3]successful builds is updated as new information becomes
|
||
available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, test results, bug fixes, etc to GCC. This
|
||
[4]amazing group of volunteers is what makes GCC successful.
|
||
|
||
And finally, we can't in good conscience fail to mention some
|
||
[5]caveats to using GCC 3.0.x.
|
||
|
||
For additional information about GCC please refer to the [6]GCC project
|
||
web site or contact the [7]GCC development mailing list.
|
||
|
||
To obtain GCC please use [8]our mirror sites, or our CVS server.
|
||
__________________________________________________________________
|
||
|
||
Previous 3.0.x Releases
|
||
|
||
December 20, 2001: GCC 3.0.3 has been released.
|
||
October 25, 2001: GCC 3.0.2 has been released.
|
||
August 20, 2001: GCC 3.0.1 has been released.
|
||
June 18, 2001: GCC 3.0 has been released.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [9]GCC manuals. If that fails, the
|
||
[10]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [11]gcc@gcc.gnu.org. All of [12]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [14]maintained by the GCC team. Last modified
|
||
2018-09-30[15].
|
||
|
||
References
|
||
|
||
1. http://www.gnu.org/
|
||
2. http://gcc.gnu.org/gcc-3.0/features.html
|
||
3. http://gcc.gnu.org/gcc-3.0/buildstat.html
|
||
4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
5. http://gcc.gnu.org/gcc-3.0/caveats.html
|
||
6. http://gcc.gnu.org/index.html
|
||
7. mailto:gcc@gcc.gnu.org
|
||
8. http://gcc.gnu.org/mirrors.html
|
||
9. https://gcc.gnu.org/onlinedocs/
|
||
10. mailto:gcc-help@gcc.gnu.org
|
||
11. mailto:gcc@gcc.gnu.org
|
||
12. https://gcc.gnu.org/lists.html
|
||
13. https://www.fsf.org/
|
||
14. https://gcc.gnu.org/about.html
|
||
15. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.0/features.html
|
||
GCC 3.0 New Features
|
||
|
||
Additional changes in GCC 3.0.4
|
||
|
||
* GCC 3.0 now supports newer versions of the [1]NetBSD operating
|
||
system, which use the ELF object file format, on x86 processors.
|
||
* Correct debugging information is generated from functions that have
|
||
lines from multiple files (e.g. yacc output).
|
||
* A fix for whitespace handling in the -traditional preprocessor,
|
||
which can affect Fortran.
|
||
* Fixes to the exception handling runtime.
|
||
* More fixes for bad code generation in C++.
|
||
* A fix for shared library generation under AIX 4.3.
|
||
* Documentation updates.
|
||
* Port of GCC to Tensilica's Xtensa processor contributed.
|
||
* A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
|
||
|
||
Additional changes in GCC 3.0.3
|
||
|
||
* A fix to correct an accidental change to the PowerPC ABI.
|
||
* Fixes for bad code generation on a variety of architectures.
|
||
* Improvements to the debugging information generated for C++
|
||
classes.
|
||
* Fixes for bad code generation in C++.
|
||
* A fix to avoid crashes in the C++ demangler.
|
||
* A fix to the C++ standard library to avoid buffer overflows.
|
||
* Miscellaneous improvements for a variety of architectures.
|
||
|
||
Additional changes in GCC 3.0.2
|
||
|
||
* Fixes for bad code generation during loop unrolling.
|
||
* Fixes for bad code generation by the sibling call optimization.
|
||
* Minor improvements to x86 code generation.
|
||
* Implementation of function descriptors in C++ vtables for IA64.
|
||
* Numerous minor bug-fixes.
|
||
|
||
Additional changes in GCC 3.0.1
|
||
|
||
* C++ fixes for incorrect code-generation.
|
||
* Improved cross-compiling support for the C++ standard library.
|
||
* Fixes for some embedded targets that worked in GCC 2.95.3, but not
|
||
in GCC 3.0.
|
||
* Fixes for various exception-handling bugs.
|
||
* A port to the S/390 architecture.
|
||
|
||
General Optimizer Improvements
|
||
|
||
* [2]Basic block reordering pass.
|
||
* New if-conversion pass with support for conditional (predicated)
|
||
execution.
|
||
* New tail call and sibling call elimination optimizations.
|
||
* New register renaming pass.
|
||
* New (experimental) [3]static single assignment (SSA) representation
|
||
support.
|
||
* New dead-code elimination pass implemented using the SSA
|
||
representation.
|
||
* [4]Global null pointer test elimination.
|
||
* [5]Global code hoisting/unification.
|
||
* More builtins and optimizations for stdio.h, string.h and old BSD
|
||
functions, as well as for ISO C99 functions.
|
||
* New builtin __builtin_expect for giving hints to the branch
|
||
predictor.
|
||
|
||
New Languages and Language specific improvements
|
||
|
||
* The GNU Compiler for the Java(TM) language (GCJ) is now integrated
|
||
and supported, including the run-time library containing most
|
||
common non-GUI Java classes, a bytecode interpreter, and the Boehm
|
||
conservative garbage collector. Many bugs have been fixed. GCJ can
|
||
compile Java source or Java bytecodes to either native code or Java
|
||
class files, and supports native methods written in either the
|
||
standard JNI or the more efficient and convenient CNI.
|
||
* Here is a [6]partial list of C++ improvements, both new features
|
||
and those no longer supported.
|
||
* New C++ ABI. On the IA-64 platform GCC is capable of
|
||
inter-operating with other IA-64 compilers.
|
||
* The new ABI also significantly reduces the size of symbol and debug
|
||
information.
|
||
* New C++ support library and many C++ bug fixes, vastly improving
|
||
our conformance to the ISO C++ standard.
|
||
* New [7]inliner for C++.
|
||
* Rewritten C preprocessor, integrated into the C, C++ and Objective
|
||
C compilers, with very many improvements including ISO C99 support
|
||
and [8]improvements to dependency generation.
|
||
* Support for more [9]ISO C99 features.
|
||
* Many improvements to support for checking calls to format functions
|
||
such as printf and scanf, including support for ISO C99 format
|
||
features, extensions from the Single Unix Specification and GNU
|
||
libc 2.2, checking of strfmon formats and features to assist in
|
||
auditing for format string security bugs.
|
||
* New warnings for C code that may have undefined semantics because
|
||
of violations of sequence point rules in the C standard (such as a
|
||
= a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall.
|
||
* Additional warning option -Wfloat-equal.
|
||
* Improvements to -Wtraditional.
|
||
* Fortran improvements are listed in [10]the Fortran documentation.
|
||
|
||
New Targets and Target Specific Improvements
|
||
|
||
* New x86 back end, generating much improved code.
|
||
* Support for a generic i386-elf target contributed.
|
||
* New option to emit x86 assembly code using Intel style syntax
|
||
(-mintel-syntax).
|
||
* HPUX 11 support contributed.
|
||
* Improved PowerPC code generation, including scheduled prologue and
|
||
epilogue.
|
||
* Port of GCC to Intel's IA-64 processor contributed.
|
||
* Port of GCC to Motorola's MCore 210 and 340 contributed.
|
||
* New unified back-end for Arm, Thumb and StrongArm contributed.
|
||
* Port of GCC to Intel's XScale processor contributed.
|
||
* Port of GCC to Atmel's AVR microcontrollers contributed.
|
||
* Port of GCC to Mitsubishi's D30V processor contributed.
|
||
* Port of GCC to Matsushita's AM33 processor (a member of the MN10300
|
||
processor family) contributed.
|
||
* Port of GCC to Fujitsu's FR30 processor contributed.
|
||
* Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed.
|
||
* Port of GCC to Sun's picoJava processor core contributed.
|
||
|
||
Documentation improvements
|
||
|
||
* Substantially rewritten and improved C preprocessor manual.
|
||
* Many improvements to other documentation.
|
||
* Manpages for gcc, cpp and gcov are now generated automatically from
|
||
the master Texinfo manual, eliminating the problem of manpages
|
||
being out of date. (The generated manpages are only extracts from
|
||
the full manual, which is provided in Texinfo form, from which
|
||
info, HTML, other formats and a printed manual can be generated.)
|
||
* Generated info files are included in the release tarballs alongside
|
||
their Texinfo sources, avoiding problems on some platforms with
|
||
building makeinfo as part of the GCC distribution.
|
||
|
||
Other significant improvements
|
||
|
||
* Garbage collection used internally by the compiler for most memory
|
||
allocation instead of obstacks.
|
||
* Lengauer and Tarjan algorithm used for computing dominators in the
|
||
CFG. This algorithm can be significantly faster and more space
|
||
efficient than our older algorithm.
|
||
* gccbug script provided to assist in submitting bug reports to our
|
||
bug tracking system. (Bug reports previously submitted directly to
|
||
our mailing lists, for which you received no bug tracking number,
|
||
should be submitted again using gccbug if you can reproduce the
|
||
problem with GCC 3.0.)
|
||
* The internal libgcc library is [11]built as a shared library on
|
||
systems that support it.
|
||
* Extensive testsuite included with GCC, with many new tests. In
|
||
addition to tests for GCC bugs that have been fixed, many tests
|
||
have been added for language features, compiler warnings and
|
||
builtin functions.
|
||
* Additional language-independent warning options -Wpacked, -Wpadded,
|
||
-Wunreachable-code and -Wdisabled-optimization.
|
||
* Target-independent options -falign-functions, -falign-loops and
|
||
-falign-jumps.
|
||
|
||
Plus a great many bug fixes and almost all the [12]features found in
|
||
GCC 2.95.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [13]GCC manuals. If that fails, the
|
||
[14]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [15]gcc@gcc.gnu.org. All of [16]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [18]maintained by the GCC team. Last modified
|
||
2018-09-30[19].
|
||
|
||
References
|
||
|
||
1. http://www.netbsd.org/
|
||
2. http://gcc.gnu.org/news/reorder.html
|
||
3. http://gcc.gnu.org/news/ssa.html
|
||
4. http://gcc.gnu.org/news/null.html
|
||
5. http://gcc.gnu.org/news/unify.html
|
||
6. http://gcc.gnu.org/gcc-3.0/c++features.html
|
||
7. http://gcc.gnu.org/news/inlining.html
|
||
8. http://gcc.gnu.org/news/dependencies.html
|
||
9. http://gcc.gnu.org/c99status.html
|
||
10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
|
||
11. http://gcc.gnu.org/gcc-3.0/libgcc.html
|
||
12. http://gcc.gnu.org/gcc-2.95/features.html
|
||
13. https://gcc.gnu.org/onlinedocs/
|
||
14. mailto:gcc-help@gcc.gnu.org
|
||
15. mailto:gcc@gcc.gnu.org
|
||
16. https://gcc.gnu.org/lists.html
|
||
17. https://www.fsf.org/
|
||
18. https://gcc.gnu.org/about.html
|
||
19. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-3.0/caveats.html
|
||
GCC 3.0 Caveats
|
||
|
||
* -fstrict-aliasing is now part of -O2 and higher optimization
|
||
levels. This allows the compiler to assume the strictest aliasing
|
||
rules applicable to the language being compiled. For C and C++,
|
||
this activates optimizations based on the type of expressions. This
|
||
optimization may thus break old, non-compliant code.
|
||
* Enumerations are now properly promoted to int in function
|
||
parameters and function returns. Normally this change is not
|
||
visible, but when using -fshort-enums this is an ABI change.
|
||
* The undocumented extension that allowed C programs to have a label
|
||
at the end of a compound statement has been deprecated and may be
|
||
removed in a future version. Programs that now generate a warning
|
||
about this may be fixed by adding a null statement (a single
|
||
semicolon) after the label.
|
||
* The poorly documented extension that allowed string constants in C,
|
||
C++ and Objective C to contain unescaped newlines has been
|
||
deprecated and may be removed in a future version. Programs using
|
||
this extension may be fixed in several ways: the bare newline may
|
||
be replaced by \n, or preceded by \n\, or string concatenation may
|
||
be used with the bare newline preceded by \n" and " placed at the
|
||
start of the next line.
|
||
* The Chill compiler is not included in GCC 3.0, because of the lack
|
||
of a volunteer to convert it to use garbage collection.
|
||
* Certain non-standard iostream methods from earlier versions of
|
||
libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach,
|
||
ostream::form, and istream::gets.
|
||
* The new C++ ABI is not yet fully supported by current (as of
|
||
2001-07-01) releases and development versions of GDB, or any
|
||
earlier versions. There is a problem setting breakpoints by line
|
||
number, and other related issues that have been fixed in GCC 3.0
|
||
but not yet handled in GDB:
|
||
[1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [2]GCC manuals. If that fails, the
|
||
[3]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [4]gcc@gcc.gnu.org. All of [5]our lists have public archives.
|
||
|
||
Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [7]maintained by the GCC team. Last modified
|
||
2018-09-30[8].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
|
||
2. https://gcc.gnu.org/onlinedocs/
|
||
3. mailto:gcc-help@gcc.gnu.org
|
||
4. mailto:gcc@gcc.gnu.org
|
||
5. https://gcc.gnu.org/lists.html
|
||
6. https://www.fsf.org/
|
||
7. https://gcc.gnu.org/about.html
|
||
8. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-2.95/index.html
|
||
GCC 2.95
|
||
|
||
March 16, 2001: The GNU project and the GCC developers are pleased to
|
||
announce the release of GCC version 2.95.3.
|
||
|
||
This release is no longer maintained.
|
||
|
||
Release History
|
||
|
||
GCC 2.95.3
|
||
March 16, 2001
|
||
|
||
GCC 2.95.2
|
||
October 27, 1999
|
||
|
||
GCC 2.95.1
|
||
August 19, 1999
|
||
|
||
GCC 2.95
|
||
July 31, 1999. This is the first release of GCC since the April
|
||
1999 GCC/EGCS reunification and includes nearly a year's worth
|
||
of new development and bugfixes.
|
||
|
||
References and Acknowledgements
|
||
|
||
GCC used to stand for the GNU C Compiler, but since the compiler
|
||
supports several other languages aside from C, it now stands for the
|
||
GNU Compiler Collection.
|
||
|
||
The whole suite has been extensively [1]regression tested and
|
||
[2]package tested. It should be reliable and suitable for widespread
|
||
use.
|
||
|
||
The compiler has several new optimizations, new targets, new languages
|
||
and other new features. See the [3]new features page for a more
|
||
complete list of new features found in the GCC 2.95 releases.
|
||
|
||
The sources include installation instructions in both HTML and
|
||
plaintext forms in the install directory in the distribution. However,
|
||
the most up to date installation instructions and [4]build/test status
|
||
are on the web pages. We will update those pages as new information
|
||
becomes available.
|
||
|
||
The GCC developers would like to thank the numerous people that have
|
||
contributed new features, test results, bugfixes, etc to GCC. This
|
||
[5]amazing group of volunteers is what makes GCC successful.
|
||
|
||
And finally, we can't in good conscience fail to mention some
|
||
[6]caveats to using GCC 2.95.
|
||
|
||
Download GCC 2.95 from one of our many [7]mirror sites.
|
||
|
||
For additional information about GCC please see the [8]GCC project web
|
||
server or contact the [9]GCC development mailing list.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [10]GCC manuals. If that fails, the
|
||
[11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [15]maintained by the GCC team. Last modified
|
||
2018-09-30[16].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/gcc-2.95/regress.html
|
||
2. http://gcc.gnu.org/gcc-2.95/othertest.html
|
||
3. http://gcc.gnu.org/gcc-2.95/features.html
|
||
4. http://gcc.gnu.org/gcc-2.95/buildstat.html
|
||
5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
6. http://gcc.gnu.org/gcc-2.95/caveats.html
|
||
7. http://gcc.gnu.org/mirrors.html
|
||
8. http://gcc.gnu.org/index.html
|
||
9. mailto:gcc@gcc.gnu.org
|
||
10. https://gcc.gnu.org/onlinedocs/
|
||
11. mailto:gcc-help@gcc.gnu.org
|
||
12. mailto:gcc@gcc.gnu.org
|
||
13. https://gcc.gnu.org/lists.html
|
||
14. https://www.fsf.org/
|
||
15. https://gcc.gnu.org/about.html
|
||
16. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-2.95/features.html
|
||
GCC 2.95 New Features
|
||
|
||
* General Optimizer Improvements:
|
||
+ [1]Localized register spilling to improve speed and code
|
||
density especially on small register class machines.
|
||
+ [2]Global CSE using lazy code motion algorithms.
|
||
+ [3]Improved global constant/copy propagation.
|
||
+ [4]Improved control flow graph analysis and manipulation.
|
||
+ [5]Local dead store elimination.
|
||
+ [6]Memory Load hoisting/store sinking in loops.
|
||
+ [7]Type based alias analysis is enabled by default. Note this
|
||
feature will expose bugs in the Linux kernel. Please refer to
|
||
the FAQ (as shipped with GCC 2.95) for additional information
|
||
on this issue.
|
||
+ Major revamp of GIV detection, combination and simplification
|
||
to improve loop performance.
|
||
+ Major improvements to register allocation and reloading.
|
||
* New Languages and Language specific improvements
|
||
+ [8]Many C++ improvements.
|
||
+ [9]Many Fortran improvements.
|
||
+ [10]Java front-end has been integrated. A [11]runtime library
|
||
is available separately.
|
||
+ [12]ISO C99 support
|
||
+ [13]Chill front-end and runtime has been integrated.
|
||
+ Boehm garbage collector support in libobjc.
|
||
+ More support for various pragmas which appear in vendor
|
||
include files
|
||
* New Targets and Target Specific Improvements
|
||
+ [14]SPARC backend rewrite.
|
||
+ -mschedule=8000 will optimize code for PA8000 class
|
||
processors; -mpa-risc-2-0 will generate code for PA2.0
|
||
processors
|
||
+ Various micro-optimizations for the ia32 port. K6
|
||
optimizations
|
||
+ Compiler will attempt to align doubles in the stack on the
|
||
ia32 port
|
||
+ Alpha EV6 support
|
||
+ PowerPC 750
|
||
+ RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
|
||
-mcpu=e603e was added to do -mcpu=603e and -msoft-float.
|
||
+ c3x, c4x
|
||
+ HyperSPARC
|
||
+ SparcLite86x
|
||
+ sh4
|
||
+ Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
|
||
arm-linux)
|
||
+ vxWorks targets include support for vxWorks threads
|
||
+ StrongARM 110 and ARM9 support added. ARM Scheduling
|
||
parameters rewritten.
|
||
+ Various changes to the MIPS port to avoid assembler macros,
|
||
which in turn improves performance
|
||
+ Various performance improvements to the i960 port.
|
||
+ Major rewrite of ns32k port
|
||
* Other significant improvements
|
||
+ [15]Ability to dump cfg information and display it using vcg.
|
||
+ The new faster scheme for fixing vendor header files is
|
||
enabled by default.
|
||
+ Experimental internationalization support.
|
||
+ multibyte character support
|
||
+ Some compile-time speedups for pathological problems
|
||
+ Better support for complex types
|
||
* Plus the usual mountain of bugfixes
|
||
* Core compiler is based on the gcc2 development tree from Sept 30,
|
||
1998, so we have all of the [16]features found in GCC 2.8.
|
||
|
||
Additional Changes in GCC 2.95.1
|
||
|
||
* Generic bugfixes and improvements
|
||
+ Various documentation fixes related to the GCC/EGCS merger.
|
||
+ Fix memory management bug which could lead to spurious aborts,
|
||
core dumps or random parsing errors in the compiler.
|
||
+ Fix a couple bugs in the dwarf1 and dwarf2 debug record
|
||
support.
|
||
+ Fix infinite loop in the CSE optimizer.
|
||
+ Avoid undefined behavior in compiler FP emulation code
|
||
+ Fix install problem when prefix is overridden on the make
|
||
install command.
|
||
+ Fix problem with unwanted installation of assert.h on some
|
||
systems.
|
||
+ Fix problem with finding the wrong assembler in a single tree
|
||
build.
|
||
+ Avoid increasing the known alignment of a register that is
|
||
already known to be a pointer.
|
||
* Platform specific bugfixes and improvements
|
||
+ Codegen bugfix for prologue/epilogue for cpu32 target.
|
||
+ Fix long long code generation bug for the Coldfire target.
|
||
+ Fix various aborts in the SH compiler.
|
||
+ Fix bugs in libgcc support library for the SH.
|
||
+ Fix alpha ev6 code generation bug.
|
||
+ Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
|
||
AIX platforms.
|
||
+ Fix -fpic code generation bug for rs6000/ppc svr4 targets.
|
||
+ Fix varargs/stdarg code generation bug for rs6000/ppc svr4
|
||
targets.
|
||
+ Fix weak symbol handling for rs6000/ppc svr4 targets.
|
||
+ Fix various problems with 64bit code generation for the
|
||
rs6000/ppc port.
|
||
+ Fix codegen bug which caused tetex to be mis-compiled on the
|
||
x86.
|
||
+ Fix compiler abort in new cfg code exposed by x86 port.
|
||
+ Fix out of range array reference in code convert flat
|
||
registers to the x87 stacked FP register file.
|
||
+ Fix minor vxworks configuration bug.
|
||
+ Fix return type of bsearch for SunOS 4.x.
|
||
* Language & Runtime specific fixes.
|
||
+ The G++ signature extension has been deprecated. It will be
|
||
removed in the next major release of G++. Use of signatures
|
||
will result in a warning from the compiler.
|
||
+ Several bugs relating to templates and namespaces were fixed.
|
||
+ A bug that caused crashes when combining templates with -g on
|
||
DWARF1 platforms was fixed.
|
||
+ Pointers-to-members, virtual functions, and multiple
|
||
inheritance should now work together correctly.
|
||
+ Some code-generation bugs relating to function try blocks were
|
||
fixed.
|
||
+ G++ is a little bit more lenient with certain archaic
|
||
constructs than in GCC 2.95.
|
||
+ Fix to prevent shared library version #s from bring truncated
|
||
to 1 digit
|
||
+ Fix missing std:: in the libstdc++ library.
|
||
+ Fix stream locking problems in libio.
|
||
+ Fix problem in java compiler driver.
|
||
|
||
Additional Changes in GCC 2.95.2
|
||
|
||
The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
|
||
the optimizations performed by -fstrict-aliasing are valid according to
|
||
the C and C++ standards, the optimization have caused some problems,
|
||
particularly with old non-conforming code.
|
||
|
||
The GCC developers are experimenting with ways to warn users about code
|
||
which violates the C/C++ standards, but those warnings are not ready
|
||
for widespread use at this time. Rather than wait for those warnings
|
||
the GCC developers have chosen to disable -fstrict-aliasing by default
|
||
for the GCC 2.95.2 release.
|
||
|
||
We strongly encourage developers to find and fix code which violates
|
||
the C/C++ standards as -fstrict-aliasing may be enabled by default in
|
||
future releases. Use the option -fstrict-aliasing to re-enable these
|
||
optimizations.
|
||
* Generic bugfixes and improvements
|
||
+ Fix incorrectly optimized memory reference in global common
|
||
subexpression elimination (GCSE) optimization pass.
|
||
+ Fix code generation bug in regmove.c in which it could
|
||
incorrectly change a "const" value.
|
||
+ Fix bug in optimization of conditionals involving volatile
|
||
memory references.
|
||
+ Avoid over-allocation of stack space for some procedures.
|
||
+ Fixed bug in the compiler which caused incorrect optimization
|
||
of an obscure series of bit manipulations, shifts and
|
||
arithmetic.
|
||
+ Fixed register allocator bug which caused teTeX to be
|
||
mis-compiled on SPARC targets.
|
||
+ Avoid incorrect optimization of degenerate case statements for
|
||
certain targets such as the ARM.
|
||
+ Fix out of range memory reference in the jump optimizer.
|
||
+ Avoid dereferencing null pointer in fix-header.
|
||
+ Fix test for GCC specific features so that it is possible to
|
||
bootstrap with gcc-2.6.2 and older versions of GCC.
|
||
+ Fix typo in scheduler which could potentially cause out of
|
||
range memory accesses.
|
||
+ Avoid incorrect loop reversal which caused incorrect code for
|
||
certain loops on PowerPC targets.
|
||
+ Avoid incorrect optimization of switch statements on certain
|
||
targets (for example the ARM).
|
||
* Platform specific bugfixes and improvements
|
||
+ Work around bug in Sun V5.0 compilers which caused bootstrap
|
||
comparison failures on SPARC targets.
|
||
+ Fix SPARC backend bug which caused aborts in final.c.
|
||
+ Fix sparc-hal-solaris2* configuration fragments.
|
||
+ Fix bug in sparc block profiling.
|
||
+ Fix obscure code generation bug for the PARISC targets.
|
||
+ Define __STDC_EXT__ for HPUX configurations.
|
||
+ Various POWERPC64 code generation bugfixes.
|
||
+ Fix abort for PPC targets using ELF (ex GNU/Linux).
|
||
+ Fix collect2 problems for AIX targets.
|
||
+ Correct handling of .file directive for PPC targets.
|
||
+ Fix bug in fix_trunc x86 patterns.
|
||
+ Fix x86 port to correctly pop the FP stack for functions that
|
||
return structures in memory.
|
||
+ Fix minor bug in strlen x86 pattern.
|
||
+ Use stabs debugging instead of dwarf1 for x86-solaris targets.
|
||
+ Fix template repository code to handle leading underscore in
|
||
mangled names.
|
||
+ Fix weak/weak alias support for OpenBSD.
|
||
+ GNU/Linux for the ARM has C++ compatible include files.
|
||
* Language & Runtime specific fixes.
|
||
+ Fix handling of constructor attribute in the C front-end which
|
||
caused problems building the Chill runtime library on some
|
||
targets.
|
||
+ Fix minor problem merging type qualifiers in the C front-end.
|
||
+ Fix aliasing bug for pointers and references (C/C++).
|
||
+ Fix incorrect "non-constant initializer bug" when -traditional
|
||
or -fwritable-strings is enabled.
|
||
+ Fix build error for Chill front-end on SunOS.
|
||
+ Do not complain about duplicate instantiations when using
|
||
-frepo (C++).
|
||
+ Fix array bounds handling in C++ front-end which caused
|
||
problems with dwarf debugging information in some
|
||
circumstances.
|
||
+ Fix minor namespace problem.
|
||
+ Fix problem linking java programs.
|
||
|
||
Additional Changes in GCC 2.95.3
|
||
|
||
* Generic bugfixes and improvements
|
||
+ Fix numerous problems that caused incorrect optimization in
|
||
the register reloading code.
|
||
+ Fix numerous problems that caused incorrect optimization in
|
||
the loop optimizer.
|
||
+ Fix aborts in the functions build_insn_chain and scan_loops
|
||
under some circumstances.
|
||
+ Fix an alias analysis bug.
|
||
+ Fix an infinite compilation bug in the combiner.
|
||
+ A few problems with complex number support have been fixed.
|
||
+ It is no longer possible for gcc to act as a fork bomb when
|
||
installed incorrectly.
|
||
+ The -fpack-struct option should be recognized now.
|
||
+ Fixed a bug that caused incorrect code to be generated due to
|
||
a lost stack adjustment.
|
||
* Platform specific bugfixes and improvements
|
||
+ Support building ARM toolchains hosted on Windows.
|
||
+ Fix attribute calculations in ARM toolchains.
|
||
+ arm-linux support has been improved.
|
||
+ Fix a PIC failure on sparc targets.
|
||
+ On ix86 targets, the regparm attribute should now work
|
||
reliably.
|
||
+ Several updates for the h8300 port.
|
||
+ Fix problem building libio with glibc 2.2.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [17]GCC manuals. If that fails, the
|
||
[18]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [19]gcc@gcc.gnu.org. All of [20]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [22]maintained by the GCC team. Last modified
|
||
2018-09-30[23].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/news/spill.html
|
||
2. http://gcc.gnu.org/news/lcm.html
|
||
3. http://gcc.gnu.org/news/cprop.html
|
||
4. http://gcc.gnu.org/news/cfg.html
|
||
5. http://gcc.gnu.org/news/dse.html
|
||
6. http://gcc.gnu.org/news/hoist.html
|
||
7. http://gcc.gnu.org/news/alias.html
|
||
8. http://gcc.gnu.org/gcc-2.95/c++features.html
|
||
9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
|
||
10. http://gcc.gnu.org/news/gcj-announce.txt
|
||
11. http://gcc.gnu.org/news/javaannounce.html
|
||
12. http://gcc.gnu.org/c99status.html
|
||
13. http://gcc.gnu.org/news/chill.html
|
||
14. http://gcc.gnu.org/news/sparc.html
|
||
15. http://gcc.gnu.org/news/egcs-vcg.html
|
||
16. http://gcc.gnu.org/egcs-1.0/features-2.8.html
|
||
17. https://gcc.gnu.org/onlinedocs/
|
||
18. mailto:gcc-help@gcc.gnu.org
|
||
19. mailto:gcc@gcc.gnu.org
|
||
20. https://gcc.gnu.org/lists.html
|
||
21. https://www.fsf.org/
|
||
22. https://gcc.gnu.org/about.html
|
||
23. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/gcc-2.95/caveats.html
|
||
GCC 2.95 Caveats
|
||
|
||
* GCC 2.95 will issue an error for invalid asm statements that had
|
||
been silently accepted by earlier versions of the compiler. This is
|
||
particularly noticeable when compiling older versions of the Linux
|
||
kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95)
|
||
for more information on this issue.
|
||
* GCC 2.95 implements type based alias analysis to disambiguate
|
||
memory references. Some programs, particularly the Linux kernel
|
||
violate ANSI/ISO aliasing rules and therefore may not operate
|
||
correctly when compiled with GCC 2.95. Please refer to the FAQ (as
|
||
shipped with GCC 2.95) for more information on this issue.
|
||
* GCC 2.95 has a known bug in its handling of complex variables for
|
||
64bit targets. Instead of silently generating incorrect code, GCC
|
||
2.95 will issue a fatal error for situations it can not handle.
|
||
This primarily affects the Fortran community as Fortran makes more
|
||
use of complex variables than C or C++.
|
||
* GCC 2.95 has an integrated libstdc++, but does not have an
|
||
integrated libg++. Furthermore old libg++ releases will not work
|
||
with GCC 2.95. You can retrieve a recent copy of libg++ from the
|
||
[1]GCC ftp server.
|
||
Note most C++ programs only need libstdc++.
|
||
* Exception handling may not work with shared libraries, particularly
|
||
on alphas, hppas, rs6000/powerpc and mips based platforms.
|
||
Exception handling is known to work on x86 GNU/Linux platforms with
|
||
shared libraries.
|
||
* In general, GCC 2.95 is more rigorous about rejecting invalid C++
|
||
code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
|
||
or EGCS 1.1. As a result it may be necessary to fix C++ code before
|
||
it will compile with GCC 2.95.
|
||
* G++ is also converting toward the ISO C++ standard; as a result
|
||
code which was previously valid (and thus accepted by other
|
||
compilers and older versions of g++) may no longer be accepted. The
|
||
flag -fpermissive may allow some non-conforming code to compile
|
||
with GCC 2.95.
|
||
* GCC 2.95 compiled C++ code is not binary compatible with EGCS
|
||
1.1.x, EGCS 1.0.x or GCC 2.8.x.
|
||
* GCC 2.95 does not have changes from the GCC 2.8 tree that were made
|
||
between Sept 30, 1998 and April 30, 1999 (the official end of the
|
||
GCC 2.8 project). Future GCC releases will include all the changes
|
||
from the defunct GCC 2.8 sources.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [2]GCC manuals. If that fails, the
|
||
[3]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [4]gcc@gcc.gnu.org. All of [5]our lists have public archives.
|
||
|
||
Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [7]maintained by the GCC team. Last modified
|
||
2018-09-30[8].
|
||
|
||
References
|
||
|
||
1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
|
||
2. https://gcc.gnu.org/onlinedocs/
|
||
3. mailto:gcc-help@gcc.gnu.org
|
||
4. mailto:gcc@gcc.gnu.org
|
||
5. https://gcc.gnu.org/lists.html
|
||
6. https://www.fsf.org/
|
||
7. https://gcc.gnu.org/about.html
|
||
8. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.1/index.html
|
||
EGCS 1.1
|
||
|
||
September 3, 1998: We are pleased to announce the release of EGCS 1.1.
|
||
December 1, 1998: We are pleased to announce the release of EGCS 1.1.1.
|
||
March 15, 1999: We are pleased to announce the release of EGCS 1.1.2.
|
||
|
||
EGCS is a free software project to further the development of the GNU
|
||
compilers using an open development environment.
|
||
|
||
EGCS 1.1 is a major new release of the EGCS compiler system. It has
|
||
been [1]extensively tested and is believed to be stable and suitable
|
||
for widespread use.
|
||
|
||
EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
|
||
development sources; it contains all of the new features found in GCC
|
||
2.8.1 as well as all new development from GCC up to June 6, 1998.
|
||
|
||
EGCS 1.1 also contains many improvements and features not found in GCC
|
||
or in older versions of EGCS:
|
||
* Global common subexpression elimination and global constant/copy
|
||
propagation (aka [2]gcse)
|
||
* Ongoing improvements to the [3]alias analysis support to allow for
|
||
better optimizations throughout the compiler.
|
||
* Vastly improved [4]C++ compiler and integrated C++ runtime
|
||
libraries.
|
||
* Fixes for the /tmp symlink race security problems.
|
||
* New targets including mips16, arm-thumb and 64 bit PowerPC.
|
||
* Improvements to GNU Fortran (g77) compiler and runtime library made
|
||
since g77 version 0.5.23.
|
||
|
||
See the [5]new features page for a more complete list of new features
|
||
found in EGCS 1.1 releases.
|
||
|
||
EGCS 1.1.1 is a minor update to fix several serious problems in EGCS
|
||
1.1:
|
||
* General improvements and fixes
|
||
+ Avoid some stack overflows when compiling large functions.
|
||
+ Avoid incorrect loop invariant code motions.
|
||
+ Fix some core dumps on Linux kernel code.
|
||
+ Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
|
||
+ Fix code generation problem in gcse.
|
||
+ Various documentation related fixes.
|
||
* g++/libstdc++ improvements and fixes
|
||
+ MT safe EH fix for setjmp/longjmp based exception handling.
|
||
+ Fix a few bad interactions between optimization and exception
|
||
handling.
|
||
+ Fixes for demangling of template names starting with "__".
|
||
+ Fix a bug that would fail to run destructors in some cases
|
||
with -O2.
|
||
+ Fix 'new' of classes with virtual bases.
|
||
+ Fix crash building Qt on the Alpha.
|
||
+ Fix failure compiling WIFEXITED macro on GNU/Linux.
|
||
+ Fix some -frepo failures.
|
||
* g77 and libf2c improvements and fixes
|
||
+ Various documentation fixes.
|
||
+ Avoid compiler crash on RAND intrinsic.
|
||
+ Fix minor bugs in makefiles exposed by BSD make programs.
|
||
+ Define _XOPEN_SOURCE for libI77 build to avoid potential
|
||
problems on some 64-bit systems.
|
||
+ Fix problem with implicit endfile on rewind.
|
||
+ Fix spurious recursive I/O errors.
|
||
* platform specific improvements and fixes
|
||
+ Match all versions of UnixWare7.
|
||
+ Do not assume x86 SVR4 or UnixWare targets can handle stabs.
|
||
+ Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
|
||
from unsigned ints to double precision floats.
|
||
+ Fix ARM ABI issue with NetBSD.
|
||
+ Fix a few arm code generation bugs.
|
||
+ Fixincludes will fix additional broken SCO OpenServer header
|
||
files.
|
||
+ Fix a m68k backend bug which caused invalid offsets in reg+d
|
||
addresses.
|
||
+ Fix problems with 64bit AIX 4.3 support.
|
||
+ Fix handling of long longs for varargs/stdarg functions on the
|
||
ppc.
|
||
+ Minor fixes to CPP predefines for Windows.
|
||
+ Fix code generation problems with gpr<->fpr copies for 64bit
|
||
ppc.
|
||
+ Fix a few coldfire code generation bugs.
|
||
+ Fix some more header file problems on SunOS 4.x.
|
||
+ Fix assert.h handling for RTEMS.
|
||
+ Fix Windows handling of TREE_SYMBOL_REFERENCED.
|
||
+ Fix x86 compiler abort in reg-stack pass.
|
||
+ Fix cygwin/windows problem with section attributes.
|
||
+ Fix Alpha code generation problem exposed by SMP Linux
|
||
kernels.
|
||
+ Fix typo in m68k 32->64bit integer conversion.
|
||
+ Make sure target libraries build with -fPIC for PPC & Alpha
|
||
targets.
|
||
|
||
EGCS 1.1.2 is a minor update to fix several serious problems in EGCS
|
||
1.1.1:
|
||
* General improvements and fixes
|
||
+ Fix bug in loop optimizer which caused the SPARC (and
|
||
potentially other) ports to segfault.
|
||
+ Fix infinite recursion in alias analysis and combiner code.
|
||
+ Fix bug in regclass preferencing.
|
||
+ Fix incorrect loop reversal which caused incorrect code to be
|
||
generated for several targets.
|
||
+ Fix return value for builtin memcpy.
|
||
+ Reduce compile time for certain loops which exposed quadratic
|
||
behavior in the loop optimizer.
|
||
+ Fix bug which caused volatile memory to be written multiple
|
||
times when only one write was needed/desired.
|
||
+ Fix compiler abort in caller-save.c
|
||
+ Fix combiner bug which caused incorrect code generation for
|
||
certain division by constant operations.
|
||
+ Fix incorrect code generation due to a bug in range check
|
||
optimizations.
|
||
+ Fix incorrect code generation due to mis-handling of clobbered
|
||
values in CSE.
|
||
+ Fix compiler abort/segfault due to incorrect register
|
||
splitting when unrolling loops.
|
||
+ Fix code generation involving autoincremented addresses with
|
||
ternary operators.
|
||
+ Work around bug in the scheduler which caused qt to be
|
||
mis-compiled on some platforms.
|
||
+ Fix code generation problems with -fshort-enums.
|
||
+ Tighten security for temporary files.
|
||
+ Improve compile time for codes which make heavy use of
|
||
overloaded functions.
|
||
+ Fix multiply defined constructor/destructor symbol problems.
|
||
+ Avoid setting bogus RPATH environment variable during
|
||
bootstrap.
|
||
+ Avoid GNU-make dependencies in the texinfo subdir.
|
||
+ Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
|
||
--enable-cpp=<dirname> can be used to specify an additional
|
||
install directory for the cpp wrapper script.
|
||
+ Fix CSE bug which caused incorrect label-label refs to appear
|
||
on some platforms.
|
||
+ Avoid linking in EH routines from libgcc if they are not
|
||
needed.
|
||
+ Avoid obscure bug in aliasing code.
|
||
+ Fix bug in weak symbol handling.
|
||
* Platform-specific improvements and fixes
|
||
+ Fix detection of PPro/PII on Unixware 7.
|
||
+ Fix compiler segfault when building spec99 and other programs
|
||
for SPARC targets.
|
||
+ Fix code-generation bugs for integer and floating point
|
||
conditional move instructions on the PPro/PII.
|
||
+ Use fixincludes to fix byteorder problems on i?86-*-sysv.
|
||
+ Fix build failure for the arc port.
|
||
+ Fix floating point format configuration for i?86-gnu port.
|
||
+ Fix problems with hppa1.0-hp-hpux10.20 configuration when
|
||
threads are enabled.
|
||
+ Fix coldfire code generation bugs.
|
||
+ Fix "unrecognized insn" problems for Alpha and PPC ports.
|
||
+ Fix h8/300 code generation problem with floating point values
|
||
in memory.
|
||
+ Fix unrecognized insn problems for the m68k port.
|
||
+ Fix namespace-pollution problem for the x86 port.
|
||
+ Fix problems with old assembler on x86 NeXT systems.
|
||
+ Fix PIC code-generation problems for the SPARC port.
|
||
+ Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
|
||
+ Fix minor ISO namespace violation in Alpha varargs/stdarg
|
||
support.
|
||
+ Fix incorrect "braf" instruction usage for the SH port.
|
||
+ Fix minor bug in va-sh which prevented its use with -ansi.
|
||
+ Fix problems recognizing and supporting FreeBSD.
|
||
+ Handle OpenBSD systems correctly.
|
||
+ Minor fixincludes fix for Digital UNIX 4.0B.
|
||
+ Fix problems with ctors/dtors in SCO shared libraries.
|
||
+ Abort instead of generating incorrect code for PPro/PII
|
||
floating point conditional moves.
|
||
+ Avoid multiply defined symbols on GNU/Linux systems using
|
||
libc-5.4.xx.
|
||
+ Fix abort in alpha compiler.
|
||
* Fortran-specific fixes
|
||
+ Fix the IDate intrinsic (VXT) (in libg2c) so the returned year
|
||
is in the documented, non-Y2K-compliant range of 0-99, instead
|
||
of being returned as 100 in the year 2000.
|
||
+ Fix the `Date_and_Time' intrinsic (in libg2c) to return the
|
||
milliseconds value properly in Values(8).
|
||
+ Fix the `LStat' intrinsic (in libg2c) to return device-ID
|
||
information properly in SArray(7).
|
||
|
||
Each release includes installation instructions in both HTML and
|
||
plaintext forms (see the INSTALL directory in the toplevel directory of
|
||
the distribution). However, we also keep the most up to date
|
||
installation instructions and [6]build/test status on our web page. We
|
||
will update those pages as new information becomes available.
|
||
|
||
The EGCS project would like to thank the numerous people that have
|
||
contributed new features, test results, bugfixes, etc. This [7]amazing
|
||
group of volunteers is what makes EGCS successful.
|
||
|
||
And finally, we can't in good conscience fail to mention some
|
||
[8]caveats to using EGCS 1.1.
|
||
|
||
Download EGCS from egcs.cygnus.com (USA California).
|
||
|
||
The EGCS 1.1 release is also available on many mirror sites.
|
||
[9]Goto mirror list to find a closer site.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [10]GCC manuals. If that fails, the
|
||
[11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
|
||
archives.
|
||
|
||
Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [15]maintained by the GCC team. Last modified
|
||
2018-09-30[16].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
|
||
2. http://gcc.gnu.org/news/gcse.html
|
||
3. http://gcc.gnu.org/news/alias.html
|
||
4. http://gcc.gnu.org/egcs-1.1/c++features.html
|
||
5. http://gcc.gnu.org/egcs-1.1/features.html
|
||
6. http://gcc.gnu.org/egcs-1.1/buildstat.html
|
||
7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
|
||
8. http://gcc.gnu.org/egcs-1.1/caveats.html
|
||
9. http://gcc.gnu.org/mirrors.html
|
||
10. https://gcc.gnu.org/onlinedocs/
|
||
11. mailto:gcc-help@gcc.gnu.org
|
||
12. mailto:gcc@gcc.gnu.org
|
||
13. https://gcc.gnu.org/lists.html
|
||
14. https://www.fsf.org/
|
||
15. https://gcc.gnu.org/about.html
|
||
16. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.1/features.html
|
||
EGCS 1.1 new features
|
||
|
||
* Integrated GNU Fortran (g77) compiler and runtime library with
|
||
improvements, based on g77 version 0.5.23.
|
||
* Vast improvements in the C++ compiler; so many they have [1]page of
|
||
their own!
|
||
* Compiler implements [2]global common subexpression elimination and
|
||
global copy/constant propagation.
|
||
* More major improvements in the [3]alias analysis code.
|
||
* More major improvements in the exception handling code to improve
|
||
performance, lower static overhead and provide the infrastructure
|
||
for future improvements.
|
||
* The infamous /tmp symlink race security problems have been fixed.
|
||
* The regmove optimization pass has been nearly completely rewritten
|
||
to improve performance of generated code.
|
||
* The compiler now recomputes register usage information before local
|
||
register allocation. By providing more accurate information to the
|
||
priority based allocator, we get better register allocation.
|
||
* The register reloading phase of the compiler optimizes spill code
|
||
much better than in previous releases.
|
||
* Some bad interactions between the register allocator and
|
||
instruction scheduler have been fixed, resulting in much better
|
||
code for certain programs. Additionally, we have tuned the
|
||
scheduler in various ways to improve performance of generated code
|
||
for some architectures.
|
||
* The compiler's branch shortening algorithms have been significantly
|
||
improved to work better on targets which align jump targets.
|
||
* The compiler now supports -Os to prefer optimizing for code space
|
||
over optimizing for code speed.
|
||
* The compiler will now totally eliminate library calls which compute
|
||
constant values. This primarily helps targets with no integer
|
||
div/mul support and targets without floating point support.
|
||
* The compiler now supports an extensive "--help" option.
|
||
* cpplib has been greatly improved and may be suitable for limited
|
||
use.
|
||
* Memory footprint for the compiler has been significantly reduced
|
||
for some pathological cases.
|
||
* The time to build EGCS has been improved for certain targets
|
||
(particularly the alpha and mips platforms).
|
||
* Many infrastructure improvements throughout the compiler, plus the
|
||
usual mountain of bugfixes and minor improvements.
|
||
* Target dependent improvements:
|
||
+ SPARC port now includes V8 plus and V9 support as well as
|
||
performance tuning for Ultra class machines. The SPARC port
|
||
now uses the Haifa scheduler.
|
||
+ Alpha port has been tuned for the EV6 processor and has an
|
||
optimized expansion of memcpy/bzero. The Alpha port now uses
|
||
the Haifa scheduler.
|
||
+ RS6000/PowerPC: support for the Power64 architecture and AIX
|
||
4.3. The RS6000/PowerPC port now uses the Haifa scheduler.
|
||
+ x86: Alignment of static store data and jump targets is per
|
||
Intel recommendations now. Various improvements throughout the
|
||
x86 port to improve performance on Pentium processors
|
||
(including improved epilogue sequences for Pentium chips and
|
||
backend improvements which should help register allocation on
|
||
all x86 variants. Conditional move support has been fixed and
|
||
enabled for PPro processors. The x86 port also better supports
|
||
64bit operations now. Unixware 7, a System V Release 5 target,
|
||
is now supported and SCO OpenServer targets can support GAS.
|
||
+ MIPS has improved multiply/multiply-add support and now
|
||
includes mips16 ISA support.
|
||
+ M68k has many micro-optimizations and Coldfire fixes.
|
||
* Core compiler is based on the GCC development tree from June 9,
|
||
1998, so we have all of the [4]features found in GCC 2.8.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [5]GCC manuals. If that fails, the
|
||
[6]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [7]gcc@gcc.gnu.org. All of [8]our lists have public archives.
|
||
|
||
Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [10]maintained by the GCC team. Last modified
|
||
2018-09-30[11].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/egcs-1.1/c++features.html
|
||
2. http://gcc.gnu.org/news/gcse.html
|
||
3. http://gcc.gnu.org/news/alias.html
|
||
4. http://gcc.gnu.org/egcs-1.0/features-2.8.html
|
||
5. https://gcc.gnu.org/onlinedocs/
|
||
6. mailto:gcc-help@gcc.gnu.org
|
||
7. mailto:gcc@gcc.gnu.org
|
||
8. https://gcc.gnu.org/lists.html
|
||
9. https://www.fsf.org/
|
||
10. https://gcc.gnu.org/about.html
|
||
11. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.1/caveats.html
|
||
EGCS 1.1 Caveats
|
||
|
||
* EGCS has an integrated libstdc++, but does not have an integrated
|
||
libg++. Furthermore old libg++ releases will not work with EGCS; HJ
|
||
Lu has made a libg++-2.8.1.2 snapshot available which may work with
|
||
EGCS.
|
||
Note most C++ programs only need libstdc++.
|
||
* Exception handling may not work with shared libraries, particularly
|
||
on alphas, hppas, rs6000/powerpc and mips based platforms.
|
||
Exception handling is known to work on x86-linux platforms with
|
||
shared libraries.
|
||
* Some versions of the Linux kernel have bugs which prevent them from
|
||
being compiled or from running when compiled by EGCS. See the FAQ
|
||
(as shipped with EGCS 1.1) for additional information.
|
||
* In general, EGCS is more rigorous about rejecting invalid C++ code
|
||
or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
|
||
a result it may be necessary to fix C++ code before it will compile
|
||
with EGCS.
|
||
* G++ is also converting toward the ISO C++ standard; as a result
|
||
code which was previously valid (and thus accepted by other
|
||
compilers and older versions of g++) may no longer be accepted.
|
||
* EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x
|
||
or GCC 2.8.x due to changes necessary to support thread safe
|
||
exception handling.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [1]GCC manuals. If that fails, the
|
||
[2]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [3]gcc@gcc.gnu.org. All of [4]our lists have public archives.
|
||
|
||
Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [6]maintained by the GCC team. Last modified
|
||
2018-09-30[7].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/onlinedocs/
|
||
2. mailto:gcc-help@gcc.gnu.org
|
||
3. mailto:gcc@gcc.gnu.org
|
||
4. https://gcc.gnu.org/lists.html
|
||
5. https://www.fsf.org/
|
||
6. https://gcc.gnu.org/about.html
|
||
7. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.0/index.html
|
||
EGCS 1.0
|
||
|
||
December 3, 1997: We are pleased to announce the release of EGCS 1.0.
|
||
January 6, 1998: We are pleased to announce the release of EGCS 1.0.1.
|
||
March 16, 1998: We are pleased to announce the release of EGCS 1.0.2.
|
||
May 15, 1998 We are pleased to announce the release of EGCS 1.0.3.
|
||
|
||
EGCS is a collaborative effort involving several groups of hackers
|
||
using an open development model to accelerate development and testing
|
||
of GNU compilers and runtime libraries.
|
||
|
||
An important goal of EGCS is to allow wide scale testing of
|
||
experimental features and optimizations; therefore, EGCS contains some
|
||
features and optimizations which are still under development. However,
|
||
EGCS has been carefully tested and should be comparable in quality to
|
||
most GCC releases.
|
||
|
||
EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
|
||
development sources; it contains nearly all of the new features found
|
||
in GCC 2.8.
|
||
|
||
EGCS 1.0 also contains many improvements and features not found in GCC
|
||
2.7 and even the GCC 2.8 series (which was released after the original
|
||
EGCS 1.0 release).
|
||
* Integrated C++ runtime libraries, including support for most major
|
||
GNU/Linux systems!
|
||
* The integrated libstdc++ library includes a verbatim copy of SGI's
|
||
STL release.
|
||
* Integrated GNU Fortran compiler.
|
||
* New instruction scheduler.
|
||
* New alias analysis code.
|
||
|
||
See the [1]new features page for a more complete list of new features.
|
||
|
||
EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
|
||
critical bugs and add support for Red Hat 5.0 Linux. Changes since the
|
||
EGCS 1.0 release:
|
||
* Add support for Red Hat 5.0 Linux and better support for Linux
|
||
systems using glibc2.
|
||
Many programs failed to link when compiled with EGCS 1.0 on Red Hat
|
||
5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should
|
||
fix these problems.
|
||
* Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception
|
||
handling interfaces.
|
||
To avoid future compatibility problems, we strongly urge anyone who
|
||
is planning on distributing shared libraries that contain C++ code
|
||
to upgrade to EGCS 1.0.1 first.
|
||
Soon after EGCS 1.0 was released, the GCC developers made some
|
||
incompatible changes in libgcc's exception handling interfaces.
|
||
These changes were needed to solve problems on some platforms. This
|
||
means that GCC 2.8.0, when released, will not be seamlessly
|
||
compatible with shared libraries built by EGCS 1.0. The reason is
|
||
that the libgcc.a in GCC 2.8.0 will not contain a function needed
|
||
by the old interface.
|
||
The result of this is that there may be compatibility problems with
|
||
shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
|
||
With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) interface,
|
||
and libgcc.a has the support routines for both the old and the new
|
||
interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be freely mixed,
|
||
and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed).
|
||
The maintainers of GCC 2.x have decided against including seamless
|
||
support for the old interface in 2.8.0, since it was never
|
||
"official", so to avoid future compatibility problems we recommend
|
||
against distributing any shared libraries built by EGCS 1.0 that
|
||
contain C++ code (upgrade to 1.0.1 and use that).
|
||
* Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
|
||
The x86 changes fix code generation errors exposed when building
|
||
glibc2 and the usual GNU/Linux dynamic linker (ld.so).
|
||
The hppa change fixes a compiler abort when configured for use with
|
||
RTEMS.
|
||
The MIPS changes fix problems with the definition of LONG_MAX on
|
||
newer systems, allow for command line selection of the target ABI,
|
||
and fix one code generation problem.
|
||
The rs6000/ppc change fixes some problems with passing structures
|
||
to varargs/stdarg functions.
|
||
* A few machine independent bugfixes, mostly to fix code generation
|
||
errors when building Linux kernels or glibc.
|
||
* Fix a few critical exception handling and template bugs in the C++
|
||
compiler.
|
||
* Fix Fortran namelist bug on alphas.
|
||
* Fix build problems on x86-solaris systems.
|
||
|
||
EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
|
||
serious problems in EGCS 1.0.1.
|
||
* General improvements and fixes
|
||
+ Memory consumption significantly reduced, especially for
|
||
templates and inline functions.
|
||
+ Fix various problems with glibc2.1.
|
||
+ Fix loop optimization bug exposed by rs6000/ppc port.
|
||
+ Fix to avoid potential code generation problems in jump.c.
|
||
+ Fix some undefined symbol problems in dwarf1 debug support.
|
||
* g++/libstdc++ improvements and fixes
|
||
+ libstdc++ in the EGCS release has been updated and should be
|
||
link compatible with libstdc++-2.8.
|
||
+ Various fixes in libio/libstdc++ to work better on GNU/Linux
|
||
systems.
|
||
+ Fix problems with duplicate symbols on systems that do not
|
||
support weak symbols.
|
||
+ Memory corruption bug and undefined symbols in bastring have
|
||
been fixed.
|
||
+ Various exception handling fixes.
|
||
+ Fix compiler abort for very long thunk names.
|
||
* g77 improvements and fixes
|
||
+ Fix compiler crash for omitted bound in Fortran CASE
|
||
statement.
|
||
+ Add missing entries to g77 lang-options.
|
||
+ Fix problem with -fpedantic in the g77 compiler.
|
||
+ Fix "backspace" problem with g77 on alphas.
|
||
+ Fix x86 backend problem with Fortran literals and -fpic.
|
||
+ Fix some of the problems with negative subscripts for g77 on
|
||
alphas.
|
||
+ Fixes for Fortran builds on cygwin32/mingw32.
|
||
* platform specific improvements and fixes
|
||
+ Fix long double problems on x86 (exposed by glibc).
|
||
+ x86 ports define i386 again to keep imake happy.
|
||
+ Fix exception handling support on NetBSD ports.
|
||
+ Several changes to collect2 to fix many problems with AIX.
|
||
+ Define __ELF__ for GNU/Linux on rs6000.
|
||
+ Fix -mcall-linux problem on GNU/Linux on rs6000.
|
||
+ Fix stdarg/vararg problem for GNU/Linux on rs6000.
|
||
+ Allow autoconf to select a proper install problem on AIX 3.1.
|
||
+ m68k port support includes -mcpu32 option as well as cpu32
|
||
multilibs.
|
||
+ Fix stdarg bug for irix6.
|
||
+ Allow EGCS to build on irix5 without the gnu assembler.
|
||
+ Fix problem with static linking on sco5.
|
||
+ Fix bootstrap on sco5 with native compiler.
|
||
+ Fix for abort building newlib on H8 target.
|
||
+ Fix fixincludes handling of math.h on SunOS.
|
||
+ Minor fix for Motorola 3300 m68k systems.
|
||
|
||
EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
|
||
problems reported by Red Hat for builds of Red Hat 5.1.
|
||
* Generic bugfixes:
|
||
+ Fix a typo in the libio library which resulted in incorrect
|
||
behavior of istream::get.
|
||
+ Fix the Fortran negative array index problem.
|
||
+ Fix a major problem with the ObjC runtime thread support
|
||
exposed by glibc2.
|
||
+ Reduce memory consumption of the Haifa scheduler.
|
||
* Target specific bugfixes:
|
||
+ Fix one x86 floating point code generation bug exposed by
|
||
glibc2 builds.
|
||
+ Fix one x86 internal compiler error exposed by glibc2 builds.
|
||
+ Fix profiling bugs on the Alpha.
|
||
+ Fix ImageMagick & emacs 20.2 build problems on the Alpha.
|
||
+ Fix rs6000/ppc bug when converting values from integer types
|
||
to floating point types.
|
||
|
||
The EGCS 1.0 releases include installation instructions in both HTML
|
||
and plaintext forms (see the INSTALL directory in the toplevel
|
||
directory of the distribution). However, we also keep the most up to
|
||
date installation instructions and [2]build/test status on our web
|
||
page. We will update those pages as new information becomes available.
|
||
|
||
And, we can't in good conscience fail to mention some [3]caveats to
|
||
using EGCS.
|
||
|
||
Update: Big thanks to Stanford for providing a high speed link for
|
||
downloading EGCS (go.cygnus.com)!
|
||
|
||
Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com
|
||
(USA California -- High speed link provided by Stanford).
|
||
|
||
The EGCS 1.0 release is also available many mirror sites.
|
||
[4]Goto mirror list to find a closer site
|
||
|
||
We'd like to thank the numerous people that have contributed new
|
||
features, test results, bugfixes, etc. Unfortunately, they're far too
|
||
numerous to mention by name.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [5]GCC manuals. If that fails, the
|
||
[6]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [7]gcc@gcc.gnu.org. All of [8]our lists have public archives.
|
||
|
||
Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [10]maintained by the GCC team. Last modified
|
||
2018-09-30[11].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/egcs-1.0/features.html
|
||
2. http://gcc.gnu.org/egcs-1.0/buildstat.html
|
||
3. http://gcc.gnu.org/egcs-1.0/caveats.html
|
||
4. http://gcc.gnu.org/mirrors.html
|
||
5. https://gcc.gnu.org/onlinedocs/
|
||
6. mailto:gcc-help@gcc.gnu.org
|
||
7. mailto:gcc@gcc.gnu.org
|
||
8. https://gcc.gnu.org/lists.html
|
||
9. https://www.fsf.org/
|
||
10. https://gcc.gnu.org/about.html
|
||
11. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.0/features.html
|
||
EGCS 1.0 features
|
||
|
||
* Core compiler is based on the gcc2 development tree from Aug 2,
|
||
1997, so we have most of the [1]features found in GCC 2.8.
|
||
* Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
|
||
* Vast improvements in the C++ compiler; so many they have [2]page of
|
||
their own!
|
||
* Integrated C++ runtime libraries, including support for most major
|
||
GNU/Linux systems!
|
||
* New instruction scheduler from IBM Haifa which includes support for
|
||
function wide instruction scheduling as well as superscalar
|
||
scheduling.
|
||
* Significantly improved alias analysis code.
|
||
* Improved register allocation for two address machines.
|
||
* Significant code generation improvements for Fortran code on
|
||
Alphas.
|
||
* Various optimizations from the g77 project as well as improved loop
|
||
optimizations.
|
||
* Dwarf2 debug format support for some targets.
|
||
* egcs libstdc++ includes the SGI STL implementation without changes.
|
||
* As a result of these and other changes, egcs libstc++ is not binary
|
||
compatible with previous releases of libstdc++.
|
||
* Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The SCO
|
||
Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 and
|
||
1.1), Support for RTEMS on several embedded targets, Support for
|
||
arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
|
||
MN103, NEC V850, Sparclet, Solaris & GNU/Linux on PowerPCs, etc.
|
||
* Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
|
||
* RS6000/PowerPC ports generate code which can run on all
|
||
RS6000/PowerPC variants by default.
|
||
* -mcpu= and -march= switches for the x86 port to allow better
|
||
control over how the x86 port generates code.
|
||
* Includes the template repository patch (aka repo patch); note the
|
||
new template code makes repo obsolete for ELF systems using gnu-ld
|
||
such as GNU/Linux.
|
||
* Plus the usual assortment of bugfixes and improvements.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [3]GCC manuals. If that fails, the
|
||
[4]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [5]gcc@gcc.gnu.org. All of [6]our lists have public archives.
|
||
|
||
Copyright (C) [7]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [8]maintained by the GCC team. Last modified
|
||
2018-09-30[9].
|
||
|
||
References
|
||
|
||
1. http://gcc.gnu.org/egcs-1.0/features-2.8.html
|
||
2. http://gcc.gnu.org/egcs-1.0/c++features.html
|
||
3. https://gcc.gnu.org/onlinedocs/
|
||
4. mailto:gcc-help@gcc.gnu.org
|
||
5. mailto:gcc@gcc.gnu.org
|
||
6. https://gcc.gnu.org/lists.html
|
||
7. https://www.fsf.org/
|
||
8. https://gcc.gnu.org/about.html
|
||
9. http://validator.w3.org/check/referer
|
||
======================================================================
|
||
http://gcc.gnu.org/egcs-1.0/caveats.html
|
||
EGCS 1.0 Caveats
|
||
|
||
* EGCS has an integrated libstdc++, but does not have an integrated
|
||
libg++. Furthermore old libg++ releases will not work with egc; HJ
|
||
Lu has made a libg++-2.8.1.2 available which may work with EGCS.
|
||
Note most C++ programs only need libstdc++.
|
||
* Note that using -pedantic or -Wreturn-type can cause an explosion
|
||
in the amount of memory needed for template-heavy C++ code, such as
|
||
code that uses STL. Also note that -Wall includes -Wreturn-type, so
|
||
if you use -Wall you will need to specify -Wno-return-type to turn
|
||
it off.
|
||
* Exception handling may not work with shared libraries, particularly
|
||
on alphas, hppas, and mips based platforms. Exception handling is
|
||
known to work on x86-linux platforms with shared libraries.
|
||
* Some versions of the Linux kernel have bugs which prevent them from
|
||
being compiled or from running when compiled by EGCS. See the FAQ
|
||
(as shipped with EGCS 1.0) for additional information.
|
||
* In general, EGCS is more rigorous about rejecting invalid C++ code
|
||
or deprecated C++ constructs than G++ 2.7. As a result it may be
|
||
necessary to fix C++ code before it will compile with EGCS.
|
||
* G++ is also aggressively tracking the C++ standard; as a result
|
||
code which was previously valid (and thus accepted by other
|
||
compilers and older versions of G++) may no longer be accepted.
|
||
* EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
|
||
1.0.x and later releases should work with Red Hat Linux 5.0.
|
||
|
||
|
||
For questions related to the use of GCC, please consult these web
|
||
pages and the [1]GCC manuals. If that fails, the
|
||
[2]gcc-help@gcc.gnu.org mailing list might help. Comments on these
|
||
web pages and the development of GCC are welcome on our developer
|
||
list at [3]gcc@gcc.gnu.org. All of [4]our lists have public archives.
|
||
|
||
Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
|
||
distribution of this entire article is permitted in any medium,
|
||
provided this notice is preserved.
|
||
|
||
These pages are [6]maintained by the GCC team. Last modified
|
||
2018-09-30[7].
|
||
|
||
References
|
||
|
||
1. https://gcc.gnu.org/onlinedocs/
|
||
2. mailto:gcc-help@gcc.gnu.org
|
||
3. mailto:gcc@gcc.gnu.org
|
||
4. https://gcc.gnu.org/lists.html
|
||
5. https://www.fsf.org/
|
||
6. https://gcc.gnu.org/about.html
|
||
7. http://validator.w3.org/check/referer
|
||
======================================================================
|