/usr/share/doc/gcc-4.6-base/NEWS.html is in gcc-4.6 4.6.4-6ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 | <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rev="made" href="mailto:gcc@gcc.gnu.org" />
<link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/gnu.css" />
<link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
<title>
GCC 4.6 Release Series — Changes, New Features, and Fixes
- GNU Project - Free Software Foundation (FSF)</title>
</head>
<!-- GCC maintainers, please do not hesitate to update/contribute entries
concerning those part of GCC you maintain! 2002-03-23, Gerald.
-->
<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
<h1 align="center">
GCC 4.6 Release Series<br />Changes, New Features, and Fixes
</h1>
<h2>Caveats</h2>
<ul>
<li>The options <code>-b <<em>machine</em>></code> and
<code>-V <<em>version</em>></code> have been removed because
they were unreliable. Instead, users should directly run
<code><<em>machine</em>>-gcc</code> when cross-compiling, or
<code><<em>machine</em>>-gcc-<<em>version</em>></code>
to run a different version of <code>gcc</code>. </li>
<li>GCC now has stricter checks for invalid command-line options.
In particular, when <code>gcc</code> was called to link object
files rather than compile source code, it would previously accept
and ignore all options starting with <code>--</code>, including
linker options such as <code>--as-needed</code>
and <code>--export-dynamic</code>, 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 <code>-Wl,--as-needed</code> should be used.</li>
<li>Versions of the GNU C library up to and including 2.11.1
included an <a
href="http://sourceware.org/bugzilla/show_bug.cgi?id=10401">incorrect
implementation of the <code>cproj</code> function</a>. GCC
optimizes its builtin <code>cproj</code> 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 <code>cproj</code> 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 <code>-fno-builtin-cproj</code>. </li>
<li>The C-only intermodule optimization framework (IMA, enabled by
<code>-combine</code>) has been removed in favor of the new
generic link-time optimization framework (LTO) introduced
in <a href="../gcc-4.5/changes.html">GCC 4.5.0</a>.</li>
<li id="libquadmath">GCC now ships with the LGPL-licensed
<code>libquadmath</code> library, which provides quad-precision
mathematical functions for targets with a <code>__float128</code>
datatype. <code>__float128</code> is available for targets on
32-bit x86, x86-64 and Itanium architectures. The
<code>libquadmath</code> library is automatically built on
such targets when building the Fortran compiler.</li>
<li>New <code>-Wunused-but-set-variable</code> and
<code>-Wunused-but-set-parameter</code> 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 <code>-Wunused-but-set-variable</code> warning is enabled by
default by <code>-Wall</code> flag and <code>-Wunused-but-set-parameter</code>
by <code>-Wall -Wextra</code> flags.</li>
<li><p>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
<strong>removed</strong>.</p>
<p id="obsoleted">All GCC ports for the following processor
architectures have been declared obsolete:</p>
<ul>
<li>Argonaut ARC (<code>arc-*</code>)</li>
<li>National Semiconductor CRX (<code>crx-*</code>)</li>
<li>Motorola 68HC11 and 68HC12
(<code>m68hc11-*-*</code>, <code>m6811-*-*</code>,
<code>m68hc12-*-*</code>, <code>m6812-*-*</code>)</li>
<li>Sunplus S+core (<code>score-*</code>)</li>
</ul>
<p>The following ports for individual systems on
particular architectures have been obsoleted:</p>
<ul>
<li>Interix (<code>i[34567]86-*-interix3*</code>)</li>
<li>Generic ARM PE (<code>arm-*-pe*</code> other
than <code>arm*-wince-pe*</code>)</li>
<li>MCore PE (<code>mcore-*-pe*</code>)</li>
<li>SH SymbianOS (<code>sh*-*-symbianelf*</code>)</li>
<li>GNU Hurd on Alpha and PowerPC
(<code>alpha*-*-gnu*</code>, <code>powerpc*-*-gnu*</code>)</li>
<li>M68K uClinux old ABI
(<code>m68k-*-uclinuxoldabi*</code>)</li>
<li>a.out NetBSD
(<code>arm*-*-netbsd*</code>, <code>i[34567]86-*-netbsd*</code>,
<code>vax-*-netbsd*</code>, but
not <code>*-*-netbsdelf*</code>)</li>
</ul>
<p>The <code>i[34567]86-*-pe</code> alias for Cygwin targets has
also been obsoleted; users should configure
for <code>i[34567]86-*-cygwin*</code> instead.</p>
<p>Certain configure options to control the set of libraries built
with GCC on some targets have been obsoleted. On ARM targets, the
options <code>--disable-fpu</code>, <code>--disable-26bit</code>,
<code>--disable-underscore</code>, <code>--disable-interwork</code>,
<code>--disable-biendian</code> and <code>--disable-nofmult</code>
have been obsoleted. On MIPS targets, the options
<code>--disable-single-float</code>, <code>--disable-biendian</code>
and <code>--disable-softfloat</code> have been obsoleted.</p>
</li>
<li>Support has been removed for all the
<a href="../gcc-4.5/changes.html#obsoleted">configurations obsoleted
in GCC 4.5</a>.</li>
</ul>
<h2>General Optimizer Improvements</h2>
<ul>
<li>A new general optimization level, <code>-Ofast</code>, has been
introduced. It combines the existing optimization level <code>-O3</code>
with options that can affect standards compliance but result in
better optimized code. For example, <code>-Ofast</code> enables
<code>-ffast-math</code>.</li>
<li>Link-time optimization improvements:
<ul>
<li>The <a href="../projects/lto/whopr.pdf">Scalable Whole
Program Optimizer (WHOPR)</a> 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 <code>-flto=<em>n</em></code> (where
<em>n</em> specifies the number of compilations to execute in
parallel). GCC can also cooperate with a GNU make job server
by specifying the <code>-flto=jobserver</code> option and
adding <code>+</code> to the beginning of the
Makefile rule executing the linker.<br />
Classical LTO mode can be enforced by
<code>-flto-partition=none</code>. This may result in small code
quality improvements.</li>
<li>A large number of bugs were fixed. GCC itself, Mozilla
Firefox and other large applications can be built with
LTO enabled.</li>
<li>The linker plugin support improvements
<ul>
<li>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
<code>-fuse-linker-plugin</code> command line option.</li>
<li>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 <code>hidden</code> visibility
attribute. Consequently the use
of <code>-fwhole-program</code> is not neccesary in addition to
LTO.</li>
</ul>
</li>
<li>Hidden symbols used from non-LTO objects now have to be
explicitly annotated with <code>externally_visible</code> when
the linker plugin is not used.</li>
<li>C++ inline functions and virtual tables are now privatized more
aggressively, leading to better inter-procedural optimization
and faster dynamic linking.</li>
<li>Memory usage and intermediate language streaming performance
have been improved.</li>
<li>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
<code>iostream</code> header.</li>
<li>Support for the Ada language has been added.</li>
</ul>
</li>
<li>Interprocedural optimization improvements
<ul>
<li>The interprocedural framework was re-tuned for link time
optimization. Several scalability issues were resolved.</li>
<li>Improved auto-detection of <code>const</code> and <code>pure</code>
functions. Newly, <code>noreturn</code> functions are auto-detected.
<p>The <a href="http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options"><code>-Wsuggest-attribute=[const|pure|noreturn]</code></a>
flag is available that informs users when adding
attributes to headers might improve code generation.</p></li>
<li>A number of inlining heuristic improvements. In particular:
<ul>
<li>Partial inlining is now supported and enabled by default
at <code>-O2</code> and greater. The feature can be
controlled via <code>-fpartial-inlining</code>.
<p>
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).
</p>
</li>
<li>Scalability for large compilation units was improved
significantly.</li>
<li>Inlining of callbacks is now more aggressive.</li>
<li>Virtual methods are considered for inlining when the
caller is
inlined and devirtualization is then possible.</li>
<li>Inlining when optimizing for size (either in cold
regions of a program or when compiling with
<code>-Os</code>) was improved to better handle C++
programs with larger abstraction penalty, leading
to smaller and faster code.</li>
</ul>
</li>
<li>The IPA reference optimization pass detecting global
variables used or modified by functions was strengthened
and sped up.</li>
<li>Functions whose address was taken are now optimized out
when all references to them are dead.</li>
<li>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.</li>
<li>On most targets with named section support, functions used only
at startup (static constructors and <code>main</code>), functions
used only at exit and functions detected to be cold are placed into
separate text segment subsections.
This extends the <code>-freorder-functions</code> feature and is
controlled by the same switch. The goal is to improve the startup
time of large C++ programs.
<p>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.</p>
</li>
</ul>
</li>
<li>A new switch <code>-fstack-usage</code> has been added. It makes
the compiler output stack usage information for the program, on a
per-function basis, in an auxiliary file.</li>
<li>A new switch <code>-fcombine-stack-adjustments</code> has been added.
It can be used to enable or disable the compiler's stack-slot combining
pass which before was enabled automatically at <code>-O1</code> and above,
but could not be controlled on its own.</li>
<li>A new switch <code>-fstrict-volatile-bitfields</code> 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++.</li>
</ul>
<h2>Compile time and memory usage improvements</h2>
<ul>
<li>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).</li>
</ul>
<h2>New Languages and Language specific improvements</h2>
<h3>Ada</h3>
<ul>
<li>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.</li>
<li>Initial support for Ada 2012 has been added.</li>
</ul>
<h3>C family</h3>
<ul>
<li>A new warning, enabled by <code>-Wdouble-promotion</code>,
has been added that warns about cases where a value of type
<code>float</code> is implicitly promoted to <code>double</code>.
This is especially helpful for CPUs that handle the former in
hardware, but emulate the latter in software.</li>
<li>A new function attribute <code>leaf</code> 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.</li>
<li>Support for a new data type <code>__int128</code> for targets having
wide enough machine-mode support.</li>
<li>The new function attribute <code>callee_pop_aggregate</code> allows
to specify if the caller or callee is responsible for popping the
aggregate return pointer value from the stack.</li>
<li>Support for selectively enabling and disabling warnings
via <code>#pragma GCC diagnostic</code> has been added. For instance:
<pre>#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 */
</pre></li>
<li>The <code>-fmax-errors=N</code> option is now supported. Using
this option causes the compiler to exit after <code>N</code> errors
have been issued.</li>
</ul>
<h3 id="c">C</h3>
<ul>
<li>There is now experimental support for some features from the
upcoming C1X revision of the ISO C standard. This support may be
selected with <code>-std=c1x</code>, or <code>-std=gnu1x</code>
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).
<ul>
<li>Static assertions (<code>_Static_assert</code> keyword)</li>
<li>Typedef redefinition</li>
<li>New macros in <code><float.h></code></li>
<li>Anonymous structures and unions</li>
</ul>
</li>
<li>The new <code>-fplan9-extensions</code> 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.</li>
</ul>
<h3 id="cplusplus">C++</h3>
<ul>
<li>Improved <a href="cxx0x_status.html">experimental support for the
upcoming C++0x</a> ISO C++ standard, including support for
<code>constexpr</code> (thanks to Gabriel Dos Reis and Jason Merrill),
<code>nullptr</code> (thanks to Magnus Fromreide), <code>noexcept</code>,
unrestricted unions, range-based <code>for</code> loops (thanks to Rodrigo Rivas Costa),
opaque enum declarations (thanks also to Rodrigo), implicitly deleted
functions and implicit move constructors.</li>
<li>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
(<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43145">c++/43145</a>).</li>
<li>GCC now warns by default when casting integers to larger
pointer types. These warnings can be disabled with the option
<code>-Wno-int-to-pointer-cast</code>, which is now also available
in C++.</li>
<li>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 (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43680">c++/43680</a>).
The old behavior can be restored with <code>-fstrict-enums</code>.</li>
<li>The new <code>-fnothrow-opt</code> flag changes the semantics of
a <code>throw()</code> exception specification to match the proposed
semantics of the <code>noexcept</code> specification: just call
<code>terminate</code> 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.</li>
<li>The new <code>-Wnoexcept</code> flag will suggest adding
a <code>noexcept</code> qualifier to a function that the compiler can
tell doesn't throw if it would change the value of
a <code>noexcept</code> expression.</li>
<li>The <code>-Wshadow</code> 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. </li>
<li>When an identifier is not found in the current scope, G++ now
offers suggestions about which identifier might have been
intended.</li>
<li>G++ now issues clearer diagnostics for missing semicolons
after <code>class</code>, <code>struct</code>,
and <code>union</code> definitions.</li>
<li>G++ now issues clearer diagnostics for missing semicolons after
class member declarations.</li>
<li>G++ now issues clearer diagnostics when a colon is used in a
place where a double-colon was intended.</li>
<li>G++ no longer accepts <code>mutable</code> on reference members
(<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33558">c++/33558</a>).
Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
</li>
<li>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 <code>-fabi-version=5</code> or <code>-fabi-version=0</code>.
<code>-Wabi</code> will now warn about code that uses the old
mangling.</li>
<li>G++ no longer allows objects of const-qualified type to be default
initialized unless the type has a user-declared default constructor.
Code that fails to compile can be fixed by providing an initializer e.g.
<pre>
struct A { A(); };
struct B : A { };
const B b = B();
</pre>
Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
</li>
</ul>
<h4>Runtime Library (libstdc++)</h4>
<ul>
<li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x">
Improved experimental support for the upcoming ISO C++ standard,
C++0x</a>, including using <code>constexpr</code> and
<code>nullptr</code>. </li>
<li>Performance improvements to the
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html">Debug
Mode</a>, thanks to François Dumont.
</li>
<li>Atomic operations used for reference-counting are annotated so that
they can be understood by race detectors such as Helgrind, see
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races">Data
Race Hunting</a>.</li>
<li>Most libstdc++ standard headers have been changed to no longer include
the <code>cstddef</code> 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 <code>cstddef</code> explicitly.</li>
</ul>
<h3 id="fortran">Fortran</h3>
<ul>
<li>On systems supporting the <code>libquadmath</code> library, GNU Fortran
now also supports a quad-precision, <code>kind=16</code> floating-point
data type (<code>REAL(16)</code>, <code>COMPLEX(16)</code>). 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 <code>REAL(16)</code> in hardware nor those which do not support
<code>libquadmath</code>.</li>
<li>Much improved compile time for large array constructors.</li>
<li>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.</li>
<li>Improved diagnostics, especially with
<code>-fwhole-file</code>.</li>
<li>The <code>-fwhole-file</code> flag is now enabled by default. This
improves code generation and diagnostics. It can be
disabled using the deprecated <code>-fno-whole-file</code> flag.</li>
<li>Support the generation of Makefile dependencies via the <a
href="http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html">
<code>-M</code>...</a> flags of GCC; you may need to specify the
<code>-cpp</code> option in addition. The dependencies take
modules, Fortran's <code>include</code>, and CPP's <code>#include</code>
into account. Note: Using <code>-M</code> for the module path is no
longer supported, use <code>-J</code> instead.</li>
<li>The flag <code>-Wconversion</code> has been modified to only issue
warnings where a conversion leads to information loss. This drastically
reduces the number of warnings; <code>-Wconversion</code> is thus now
enabled with <code>-Wall</code>. The flag <code>-Wconversion-extra</code>
has been added and also warns about other conversions;
<code>-Wconversion-extra</code> typically issues a huge number of
warnings, most of which can be ignored.</li>
<li>A new command-line option <code>-Wunused-dummy-argument</code> warns
about unused dummy arguments and is included in <code>-Wall</code>.
Before, <code>-Wunused-variable</code> also warned about unused dummy
arguments.</li>
<li>Fortran 2003 support has been extended:
<ul>
<li>Improved support for polymorphism between libraries and
programs and for complicated inheritance patterns (cf. <a
href="http://gcc.gnu.org/wiki/OOP">object-oriented programming</a>).
</li>
<li>Experimental support of the <code>ASSOCIATE</code> construct.</li>
<li>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.</li>
<li>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 <code>a(:) = ...</code> instead of <code>a = ...</code>
for arrays and character strings – or disable the feature using
<code>-std=f95</code> or <code>-fno-realloc-lhs</code>.</li>
<li>Deferred type parameter: For scalar allocatable and pointer
variables the character length can be deferred.</li>
<li>Namelist variables with allocatable and pointer attribute and
nonconstant length type parameter are supported.</li>
</ul>
</li>
<li>Fortran 2008 support has been extended:
<ul>
<li>Experimental <a href="http://gcc.gnu.org/wiki/Coarray">
coarray support</a> (for one image only, i.e. <code>num_images() ==
1</code>); use the <a
href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233">
<code>-fcoarray=single</code></a> flag to enable it.</li>
<li>The <code>STOP</code> and the new <code>ERROR STOP</code>
statements now support all constant expressions.</li>
<li>Support for the <code>CONTIGUOUS</code> attribute.</li>
<li>Support for <code>ALLOCATE</code> with <code>MOLD</code>.</li>
<li>Support for the <code>STORAGE_SIZE</code> intrinsic inquiry
function.</li>
<li>Support of the <code>NORM2</code> and <code>PARITY</code>
intrinsic functions.</li>
<li>The following bit intrinsics were added: <code>POPCNT</code>
and <code>POPPAR</code> for counting the number of 1 bits and
returning the parity; <code>BGE</code>, <code>BGT</code>,
<code>BLE</code>, and <code>BLT</code> for bitwise comparisons;
<code>DSHIFTL</code> and <code>DSHIFTR</code> for combined left
and right shifts, <code>MASKL</code> and <code>MASKR</code> for
simple left and right justified masks, <code>MERGE_BITS</code>
for a bitwise merge using a mask, <code>SHIFTA</code>,
<code>SHIFTL</code> and <code>SHIFTR</code> for shift operations,
and the transformational bit intrinsics <code>IALL</code>,
<code>IANY</code> and <code>IPARITY</code>.</li>
<li>Support of the <code>EXECUTE_COMMAND_LINE</code> intrinsic
subroutine.</li>
<li>Support for the <code>IMPURE</code> attribute for procedures,
which allows for <code>ELEMENTAL</code> procedures without the
restrictions of <code>PURE</code>.</li>
<li>Null pointers (including <code>NULL()</code>) and not
allocated variables can be used as actual argument to optional
non-pointer, non-allocatable dummy arguments, denoting an absent
argument.</li>
<li>Non-pointer variables with <code>TARGET</code> attribute can
be used as actual argument to <code>POINTER</code> dummies with
<code>INTENT(IN)</code></li>
<li>Pointers including procedure pointers and those in a derived
type (pointer components) can now be initialized by a target
instead of only by <code>NULL</code>.</li>
<li>The <code>EXIT</code> statement (with construct-name) can
now be used to leave not only the <code>DO</code> but also the
<code>ASSOCIATE</code>, <code>BLOCK</code>, <code>IF</code>,
<code>SELECT CASE</code> and <code>SELECT TYPE</code> constructs.</li>
<li>Internal procedures can now be used as actual argument.</li>
<li>The named constants <code>INTEGER_KINDS</code>,
<code>LOGICAL_KINDS</code>, <code>REAL_KINDS</code> and
<code>CHARACTER_KINDS</code> of the intrinsic module
<code>ISO_FORTRAN_ENV</code> have been added; these arrays contain
the supported kind values for the respective types.</li>
<li>The module procedures <code>C_SIZEOF</code> of the intrinsic
module <code>ISO_C_BINDINGS</code> and <code>COMPILER_VERSION</code>
and <code>COMPILER_OPTIONS</code> of <code>ISO_FORTRAN_ENV</code>
have been implemented.</li>
<li>Minor changes: obsolescence diagnostics for <code>ENTRY</code>
was added for <code>-std=f2008</code>;
a line may start with a semicolon;
for internal and module procedures <code>END</code> can be used
instead of <code>END SUBROUTINE</code> and <code>END
FUNCTION</code>; <code>SELECTED_REAL_KIND</code> now also takes a
<code>RADIX</code> argument; intrinsic types are supported for
<code>TYPE(<i>intrinsic-type-spec</i>)</code>; multiple type-bound
procedures can be declared in a single <code>PROCEDURE</code>
statement; implied-shape arrays are supported for named constants
(<code>PARAMETER</code>). The transformational, three argument
versions of <code>BESSEL_JN</code> and <code>BESSEL_YN</code>
were added – the elemental, two-argument version had been
added in GCC 4.4; note that the transformational functions use
a recurrence algorithm.</li>
</ul>
</li>
</ul>
<h3 id="go">Go</h3>
<p>Support for the <a href="http://golang.org/">Go programming
language</a> has been added to GCC. It is not enabled by default
when you build GCC; use the <code>--enable-languages</code>
configure option to build it. The driver program for compiling Go
code is <code>gccgo</code>.</p>
<p>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.</p>
<h3>Java (GCJ)</h3>
<h3 id="objective-c">Objective-C and Objective-C++</h3>
<ul>
<li>The <code>-fobjc-exceptions</code> flag is now required to
enable Objective-C exception and synchronization syntax
(introduced by the keywords <code>@try</code>,
<code>@catch</code>, <code>@finally</code> and
<code>@synchronized</code>).</li>
<li>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 <code>-fobjc-std=objc1</code>
command-line option.</li>
<li>The Objective-C 2.0 dot-syntax is now supported. It is an
alternative syntax for using getters and setters;
<code>object.count</code> is automatically converted into
<code>[object count]</code> or <code>[object setCount: ...]</code>
depending on context; for example <code>if (object.count >
0)</code> is automatically compiled into the equivalent of
<code>if ([object count] > 0)</code> while <code>object.count =
0;</code> is automatically compiled into the equivalent ot
<code>[object setCount: 0];</code>. 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.</li>
<li>Objective-C 2.0 declared properties are now supported. They
are declared using the new <code>@property</code> keyword, and are
most commonly used in conjunction with the new Objective-C 2.0
dot-syntax. The <code>nonatomic</code>, <code>readonly</code>,
<code>readwrite</code>, <code>assign</code>, <code>retain</code>,
<code>copy</code>, <code>setter</code> and <code>getter</code>
attributes are all supported. Marking declared properties with
<code>__attribute__ ((deprecated))</code> is supported too.</li>
<li>The Objective-C 2.0 <code>@synthesize</code> and
<code>@dynamic</code> keywords are supported.
<code>@synthesize</code> causes the compiler to automatically
synthesize a declared property, while <code>@dynamic</code> 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.</li>
<li>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).</li>
<li>The Objective-C 2.0 <code>@optional</code> keyword is
supported. It allows you to mark methods or properties in a
protocol as optional as opposed to required.</li>
<li>The Objective-C 2.0 <code>@package</code> keyword is
supported. It has currently the same effect as the
<code>@public</code> keyword.</li>
<li>Objective-C 2.0 method attributes are supported. Currently
the supported attributes are <code>deprecated</code>,
<code>sentinel</code>, <code>noreturn</code> and
<code>format</code>.</li>
<li>Objective-C 2.0 method argument attributes are supported. The
most widely used attribute is <code>unused</code>, to mark an
argument as unused in the implementation.</li>
<li>Objective-C 2.0 class and protocol attributes are supported.
Currently the only supported attribute is
<code>deprecated</code>.</li>
<li>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.</li>
<li>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 (Mac OS X 10.5 and 10.6). Currently this is for
m32 code only.</li>
<li>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.</li>
</ul>
<h4>Runtime Library (libobjc)</h4>
<ul>
<li>The GNU Objective-C runtime library now defines the macro
<code>__GNU_LIBOBJC__</code> (with a value that is increased at
every release where there is any change to the API) in
<code>objc/objc.h</code>, 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.</li>
<li>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
<code>objc/objc-api.h</code> header file automatically selects the
old API, while including the new <code>objc/runtime.h</code>
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 <code>__GNU_LIBOBJC__</code> 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.</li>
<li>Runtime support for <code>@synchronized</code> has been added.</li>
<li>Runtime support for Objective-C 2.0 synthesized property
accessors has been added.</li>
<li>Runtime support for Objective-C 2.0 fast enumeration has been
added.</li>
</ul>
<h2 id="targets">New Targets and Target Specific Improvements</h2>
<h3 id="arm">ARM</h3>
<ul>
<li>GCC now supports the Cortex-M4 processor implementing
the v7-em version of the architecture using the option
<code>-mcpu=cortex-m4</code>.</li>
<li>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.</li>
<li>Synchronization primitives such as <code>__sync_fetch_and_add
</code> and friends are now inlined for supported architectures
rather than calling into a kernel helper function.</li>
<li>SSA loop prefetching is enabled by default for the
Cortex-A9 at <code>-O3</code>.</li>
<li>Several improvements were committed to improve code
generation for the ARM architecture including a rewritten
implementation for load and store multiples.</li>
<li>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.</li>
<li>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 <code>-mcpu=</code>
option.</li>
<li>Basic support was added for Cortex-A15 and is available through
<code>-mcpu=cortex-a15</code>.</li>
<li>GCC for AAPCS configurations now more closely adheres to the AAPCS
specification by enabling <code>-fstrict-volatile-bitfields</code> by
default.</li>
</ul>
<h3>IA-32/x86-64</h3>
<ul>
<li>
The new <code>-fsplit-stack</code> 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.
</li>
<li>Support for emitting profiler counter calls before function
prologues. This is enabled via a new command-line option
<code>-mfentry</code>.</li>
<li>Optimization for the Intel Core 2 processors is now available through
the <code>-march=core2</code> and <code>-mtune=core2</code>
options.</li>
<li>Support for Intel Core i3/i5/i7 processors is now available through
the <code>-march=corei7</code> and <code>-mtune=corei7</code>
options.</li>
<li>Support for Intel Core i3/i5/i7 processors with AVX is now
available through the <code>-march=corei7-avx</code> and
<code>-mtune=corei7-avx</code> options.</li>
<li>Support for AMD Bobcat (family 14) processors is now available through
the <code>-march=btver1</code> and <code>-mtune=btver1</code>
options.</li>
<li>The default setting (when not optimizing for size) for 32-bit
GNU/Linux and Darwin x86 targets has been changed to
<code>-fomit-frame-pointer</code>. The default can be reverted
to <code>-fno-omit-frame-pointer</code> by configuring GCC with
the <code>--enable-frame-pointer</code> configure option.</li>
<li>Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
<code>__float128</code> on 32-bit and 64-bit x86 targets.</li>
<li>AVX floating-point arithmetic can now be enabled by default at
configure time with the new <code>--with-fpmath=avx</code> option.</li>
<li>The SSA loop prefetching pass is enabled when
using <code>-O3</code> when optimizing for CPUs where prefetching
is beneficial (AMD CPUs newer than K6).</li>
<li>Support for TBM (Trailing Bit Manipulation) built-in functions
and code generation is available via <code>-mtbm</code>.</li>
<li>Support for AMD's BMI (Bit Manipulation) built-in functions and
code generation is available via <code>-mbmi</code>.</li>
</ul>
<h3 id="microblaze">MicroBlaze</h3>
<ul>
<li>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.
</li>
</ul>
<h3>MIPS</h3>
<ul>
<li>GCC now supports the Loongson 3A processor. Its canonical
<code>-march=</code> and <code>-mtune=</code> name is
<code>loongson3a</code>.
</li>
</ul>
<h3 id="mn10300">MN10300 / AM33</h3>
<ul>
<li>The inline assembly register constraint <code>"A"</code> has
been renamed <code>"c"</code>. This constraint is used to
select a floating-point register that can be used as the
destination of a multiply-accumulate instruction.
</li>
<li>New inline assembly register constraints <code>"A"</code> and
<code>"D"</code> 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.
</li>
<li>The <code>MDR</code> register is represented in the compiler.
One can access the register via the <code>"z"</code> constraint
in inline assembly. It can be marked as clobbered or used as
a local register variable via the <code>"mdr"</code> name.
The compiler uses the <code>RETF</code> instruction if the
function does not modify the <code>MDR</code> register, so it
is important that inline assembly properly annotate any usage
of the register.
</li>
</ul>
<h3>PowerPC/PowerPC64</h3>
<ul>
<li>GCC now supports the Applied Micro Titan processor
with <code>-mcpu=titan</code>.</li>
<li>The <code>-mrecip</code> option has been added, which indicates
whether the reciprocal and reciprocal square root instructions
should be used.</li>
<li>The <code>-mveclibabi=mass</code> option can be used to enable
the compiler to autovectorize mathematical functions using the
Mathematical Acceleration Subsystem library.</li>
<li>The <code>-msingle-pic-base</code> 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.</li>
<li>The <code>-mblock-move-inline-limit</code> option has been
added, which enables the user to control the maximum size of
inlined <code>memcpy</code> calls and similar.</li>
<li>PowerPC64 GNU/Linux support for applications requiring a large
TOC section has been improved. A new command-line option,
<code>-mcmodel=MODEL</code>, controls this feature; valid values
for <code>MODEL</code>
are <code>small</code>, <code>medium</code>,
or <code>large</code>.</li>
<li>The altivec builtin functions <code>vec_ld</code> and <code>vec_st</code>
have been modified to generate the Altivec memory instructions
<code>LVX</code> and <code>STVX</code>, even if the <code>-mvsx</code>
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 <code>vec_vsx_ld</code> and <code>vec_vsx_st</code>
which always generates the VSX memory instructions.</li>
<li>The GCC compiler on AIX now defaults to a process layout with a
larger data space allowing larger programs to be compiled.</li>
<li>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.</li>
<li>The default processor scheduling model and tuning for PowerPC64
GNU/Linux and for AIX 6.1 and above now is POWER7.</li>
</ul>
<h3>S/390, zSeries and System z9/z10, IBM zEnterprise z196</h3>
<ul>
<li>Support for the zEnterprise z196 processor has been added.
When using the <code>-march=z196</code> option, the compiler
will generate code making use of the following instruction
facilities:
<ul>
<li>Conditional load/store</li>
<li>Distinct-operands</li>
<li>Floating-point-extension</li>
<li>Interlocked-access</li>
<li>Population-count</li>
</ul>
The <code>-mtune=z196</code> 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.</li>
<li>When using the <code>-m31 -mzarch</code> 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 <code>/proc/cpuinfo</code>.</li>
<li>The SSA loop prefetching pass is enabled when
using <code>-O3</code>.</li>
</ul>
<h3>SPARC</h3>
<ul>
<li>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 <code>--with-tune=leon</code> configure option and
<code>-mtune=leon</code> compilation option, or the compiler can
be built for the <code>sparc-leon-{elf,linux}</code> and
<code>sparc-leon3-{elf,linux}</code> targets directly.</li>
<li>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.</li>
</ul>
<h2 id="os">Operating Systems</h2>
<h3 id="android">Android</h3>
<ul>
<li>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 <code>-mandroid</code> and
<code>-mbionic</code> options for details on building native code.
At the moment, Android support is enabled only for ARM.</li>
</ul>
<h3 id="darwin">Darwin/Mac OS X</h3>
<ul>
<li>General
<ul>
<li>Initial support for <code>CFString</code> types has been
added.<br /> This allows GCC to build projects including the system
<em>Core Foundation</em> frameworks. The GCC Objective-C family
supports <code>CFString</code> "toll-free bridged" as per the Mac
OS X system tools. <code>CFString</code> is also recognized in the
context of <code>format</code> attributes and arguments (see the
documentation for <code>format</code> attributes for limitations).
At present, 8-bit character types are supported.</li>
<li>LTO-support.<br />Darwin has benefited from ongoing work on
LTO; support for this is now stable and enabled by default.</li>
<li>Object file size reduction.<br /> The Darwin zeroed memory
allocators have been re-written to make more use of
<code>.zerofill</code> sections. For non-debug code, this can
reduce object file size significantly.</li>
</ul></li>
<li>x86 Architecture
<ul>
<li>The <code>-mdynamic-no-pic</code> option has been
enabled.<br />Code supporting <code>-mdynamic-no-pic</code>
optimization has been added and is applicable to <code>-m32</code>
builds. The compiler bootstrap uses the option where
appropriate.</li>
<li>The default value for <code>-mtune=</code> has been
changed.<br />Since Darwin systems are primarily Xeon, Core-2 or
similar the default tuning has been changed to
<code>-mtune=core2</code>.</li>
</ul></li>
<li>PPC Architecture
<ul>
<li>Darwin64 ABI.<br />Several significant bugs have been fixed,
such that GCC now produces code compatible with the Darwin64
PowerPC ABI.</li>
<li>libffi and boehm-gc.<br />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 <code>-m64</code>
enabled.</li>
<li>Plug-in support has been enabled.</li>
<li>The <code>-fsection-anchors</code> option is now available
although, presently, not heavily tested.</li>
</ul></li>
</ul>
<h3 id="solaris">Solaris 2</h3>
<h4>New Features</h4>
<ul>
<li>Support symbol versioning with the Sun linker.</li>
<li>Allow libstdc++ to leverage full ISO C99 support on
Solaris 10+.</li>
<li>Support thread-local storage (TLS) with the Sun assembler on
Solaris 2/x86.</li>
<li>Support TLS on Solaris 8/9 if prerequisites are met.</li>
<li>Support COMDAT group with the GNU assembler and recent Sun
linker.</li>
<li>Support the Sun assembler visibility syntax.</li>
<li>Default Solaris 2/x86 to <code>-march=pentium4</code> (Solaris
10+) resp. <code>-march=pentiumpro</code> (Solaris 8/9).</li>
<li>Don't use SSE on Solaris 8/9 x86 by default.</li>
<li>Enable 128-bit long double (<code>__float128</code>) support on
Solaris 2/x86.</li>
</ul>
<h4>ABI Change</h4>
<ul>
<li>Change the ABI for returning 8-byte vectors like
<code>__m64</code> in MMX registers on Solaris 10+/x86 to match the
Sun Studio 12.1+ compilers. <em>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 <code>-mvect8-ret-in-mem</code>
option to remain compatible with previous versions of GCC and
Sun Studio.</em></li>
</ul>
<h3 id="windows">Windows x86/x86_64</h3>
<ul>
<li>Initial support for decimal floating point.</li>
<li>Support for the <code>__thiscall</code> calling-convention.</li>
<li>Support for hot-patchable function prologues via the
<code>ms_hook_prologue</code> attribute for x86_64 in addition to 32-bit x86.</li>
<li>Improvements of stack-probing and stack-allocation mechanisms.</li>
<li>Support of push/pop-macro pragma as preprocessor command.<br />
With <code>#pragma push_macro("macro-name")</code> the
current definition of <code>macro-name</code> is saved and can be
restored with <code>#pragma pop_macro("macro-name")</code>
to its saved definition.</li>
<li>Enable 128-bit long double (<code>__float128</code>) support on
MinGW and Cygwin.</li>
</ul>
<h2>Documentation improvements</h2>
<h2>Other significant improvements</h2>
<h3>Installation changes</h3>
<ul>
<li>
An <code>install-strip</code> <code>make</code> target is provided
that installs stripped executables, and may install libraries with
unneeded or debugging sections stripped.
</li>
<li>
On Power7 systems, there is a potential problem if you build the GCC
compiler with a host compiler using options that enables the VSX
instruction set generation. If the host compiler has been patched so that
the <code>vec_ld</code> and <code>vec_st</code> builtin functions
generate Altivec memory instructions instead of VSX memory instructions,
then you should be able to build the compiler with VSX instruction
generation.
</li>
</ul>
<h2>Changes for GCC Developers</h2>
<p>Note: these changes concern developers that develop GCC itself or
software that integrates with GCC, such as plugins, and not the
general GCC users.</p>
<ul>
<li>
The <code>gengtype</code> utility, which previously was internal to
the GCC build process, has been enchanced to provide GC root
information for plugins as necessary.
</li>
<li>
The old GC allocation interface of <code>ggc_alloc</code> and
friends was replaced with a type-safe alternative.
</li>
</ul>
<!-- ==================================================================== -->
<div class="copyright">
<p>Please send FSF & GNU inquiries & questions to
<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
to contact</a> the FSF.</p>
<p>These pages are <a href="http://gcc.gnu.org/about.html">maintained by
the GCC team</a>.</p>
<address>For questions related to the use of GCC, please consult these web
pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
mailing list might help.<br />
Please send comments on these web pages and the development of GCC to our
developer list at <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.
All of our lists have
<a href="http://gcc.gnu.org/lists.html">public archives</a>.
</address>
<p>Copyright (C) Free Software Foundation, Inc.<br />
Verbatim copying and distribution of this entire article is
permitted in any medium, provided this notice is preserved.</p>
<table width="100%" border="0"><tr><td>
<!-- IGNORE DIFF -->Last modified 2011-03-22
</td><td align="right" valign="bottom">
<a href="http://validator.w3.org/check/referer">
<img src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0" border="0" width="88" height="31" />
</a>
</td></tr></table>
</div>
<!-- ==================================================================== -->
</body>
</html>
|