This file is indexed.

/usr/share/doc/gcc-4.5-base/NEWS.html is in gcc-4.5 4.5.3-12ubuntu2.

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
<?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.5 Release Series &mdash; 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.5 Release Series<br />Changes, New Features, and Fixes
</h1>

<h2>Caveats</h2>

  <ul>
    <li id="mpccaveat">GCC now requires the <a
    href="http://www.multiprecision.org/">MPC</a> library in order to
    build.  See the <a
    href="http://gcc.gnu.org/install/prerequisites.html">prerequisites
    page</a> for version requirements.</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.5.  Unless there is activity to revive them, the
    next release of GCC will have their sources permanently
    <strong>removed</strong>.</p>

    <p id="obsoleted">The following ports for individual systems on
    particular architectures have been obsoleted:</p>

    <ul>
      <li>IRIX releases before 6.5 (mips-sgi-irix5*,
	mips-sgi-irix6.[0-4])</li>
      <li>Solaris 7 (*-*-solaris2.7)</li>
      <li>Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
	alpha-dec-osf5.0*)</li>
      <li>Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions can
	be found in the <a
	href="http://gcc.gnu.org/ml/gcc/2010-01/msg00510.html">announcement</a>.</li>
    </ul>

    </li>

    <li>Support has been removed for all the 
    <a href="../gcc-4.4/changes.html#obsoleted">configurations obsoleted
    in GCC 4.4</a>.</li>

    <li>Support has been removed for the <code>protoize</code>
    and <code>unprotoize</code> utilities, obsoleted in GCC 4.4.</li>

    <li>Support has been removed for tuning for Itanium1 (Merced) variants.
    Note that code tuned for Itanium2 should also run correctly on Itanium1.</li>

    <li>GCC now generates unwind info also for epilogues.  DWARF debuginfo
    generated by GCC now uses more features of DWARF3 than it used to
    do 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 <code>-gdwarf-3 -gstrict-dwarf</code> options, or with
    <code>-gdwarf-2 -gstrict-dwarf</code> restrict GCC to just DWARF2
    standard, but epilogue unwind info is emitted unconditionally whenever
    unwind info is emitted.  </li>

    <li>On x86 targets, code containing floating-point calculations may
    run significantly slower 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 <code>-fexcess-precision=fast</code>; also see
    <a href="#x86">below</a>.</li>

    <li>The function attribute <code>noinline</code> no longer prevents GCC
    from cloning the function.  A new attribute <code>noclone</code>
    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).</li>    
 </ul>

<h2>General Optimizer Improvements</h2>

  <ul>

    <li>The <code>-save-temps</code> now takes an optional argument.  The
    <code>-save-temps</code> and <code>-save-temps=cwd</code> switches write
    the temporary files in the current working directory based on the original
    source file.  The <code>-save-temps=obj</code> switch will write files into
    the directory specified with the <code>-o</code> 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.</li>

    <li>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.</li>

    <li id="mpcopts">GCC has been integrated with the <a
    href="http://www.multiprecision.org/">MPC</a> library.  This
    allows GCC to evaluate complex arithmetic at compile time <a
    href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30789">more
    accurately</a>.  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:
    <code>cacos</code>, <code>cacosh</code>, <code>casin</code>,
    <code>casinh</code>, <code>catan</code>, <code>catanh</code>,
    <code>ccos</code>, <code>ccosh</code>, <code>cexp</code>,
    <code>clog</code>, <code>cpow</code>, <code>csin</code>,
    <code>csinh</code>, <code>csqrt</code>, <code>ctan</code>, and
    <code>ctanh</code>.  The <code>float</code> and <code>long
    double</code> variants of these functions (e.g. <code>csinf</code>
    and <code>csinl</code>) are also handled.</li>

    <li>A new link-time optimizer has been added (<code><a
    href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801"
    >-flto</a></code>).
    When this option is used, GCC generates a bytecode representation of
    each input file and writes it to special ELF sections in each
    object file.  When the object files are linked together, all the
    function bodies are read from these ELF 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,
    <code>-flto</code> 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 <code>-flto</code> and the
    experimental <code><a
    href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802"
    >-fwhopr</a></code> with <code><a
    href="http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800"
    >-fwhole-program</a></code> to allow the interprocedural optimizers
    to use more aggressive assumptions.</li>

    <li>The automatic parallelization pass was enhanced to support 
    parallelization of outer loops.</li>

    <li>Automatic parallelization can be enabled as part of Graphite.
    In addition to <code>-ftree-parallelize-loops=</code>, specify 
    <code>-floop-parallelize-all</code> to enable the Graphite-based 
    optimization.</li>

    <li>The infrastructure for optimizing based on
    <a href="http://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html">restrict qualified pointers</a>
    has been rewritten and should result in code generation improvements.
    Optimizations based on restrict qualified pointers are now also available
    when using <code>-fno-strict-aliasing</code>.</li>

    <li>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 <code>-O2</code> and above
    as well as <code>-Os</code> and can be manually invoked using the new
    command-line switch <code>-fipa-sra</code>.  </li>

    <li>GCC now optimize exception handling code. In particular cleanup
    regions that are proved to not have any effect are optimized out.</li>
  </ul>

<h2>New Languages and Language specific improvements</h2>

<h3>All languages</h3>
  <ul>
    <li>The <code>-fshow-column</code> option is now on by default.  This 
    means error messages now have a column associated with them.</li>
  </ul>

<h3>Ada</h3>

  <ul>
    <li>Compilation of programs heavily using discriminated record types
    with variant parts has been sped up and generates more compact code.</li>
    <li>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.</li>
  </ul>

<h3>C family</h3>

  <ul>
    <li>If a header named in a <code>#include</code> 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.</li>
    <li>A new built-in function <code>__builtin_unreachable()</code>
    has been added that tells the compiler that control will never
    reach that point.  It may be used after <code>asm</code>
    statements that terminate by transferring control elsewhere, and
    in other places that are known to be unreachable.</li>
    <li>The <code>-Wlogical-op</code> option now warns for logical
    expressions such as <code>(c == 1 &amp;&amp; c == 2)</code> and <code>(c
    != 1 || c != 2)</code>, which are likely to be mistakes. This
    option is disabled by default.</li>
    <li>An <code>asm goto</code> feature has been added to
    allow <code>asm</code> statements that jump to C labels.</li>
    <li>C++0x raw strings are supported for C++ and for C
    with <code>-std=gnu99</code>.</li>
    <li>The <code>deprecated</code> attribute now takes an optional
    string argument, for example,
    <code>__attribute__((deprecated("text string")))</code>, that will
    be printed together with the deprecation warning.</li>

  </ul>

<h3>C</h3>
  <ul>
    <li>The <code>-Wenum-compare</code> 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 <code>-Wall</code>.  It may be avoided by using a
    type cast.</li>
    <li>The <code>-Wcast-qual</code> 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 <code>const</code>.  For example, it warns about a cast
    from <code>char **</code> to <code>const char **</code>.</li>
    <li>The <code>-Wc++-compat</code> option is significantly
    improved.  It issues new warnings for:
      <ul>
	<li>Using C++ reserved operator names as identifiers.</li>
	<li>Conversions to enum types without explicit casts.</li>
	<li>Using va_arg with an enum type.</li>
	<li>Using different enum types in the two branches
	of <code>?:</code>.</li>
	<li>Using <code>++</code> or <code>--</code> on a variable of
	enum type.</li>
	<li>Using the same name as both a struct, union or enum tag
	and a typedef, unless the typedef refers to the tagged type
	itself.</li>
	<li>Using a struct, union, or enum which is defined within
	another struct or union.</li>
	<li>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.</li>
	<li>Duplicate definitions at file scope.</li>
	<li>Uninitialized const variables.</li>
	<li>A global variable with an anonymous struct, union, or enum
	type.</li>
	<li>Using a string constant to initialize a char array whose
	size is the length of the string.</li>
      </ul></li>
    <li>The new <code>-Wjump-misses-init</code> option warns about
    cases where a <code>goto</code> or <code>switch</code> skips the
    initialization of a variable.  This sort of branch is an error in
    C++ but not in C.  This warning is enabled
    by <code>-Wc++-compat</code>.</li>
    <li>GCC now ensures that a
    C99-conforming <code>&lt;stdint.h&gt;</code> 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.</li>
    <li>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.</li>
    <li>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.</li>
    <li>The C decimal floating point support now includes support for
    the <code>FLOAT_CONST_DECIMAL64</code> pragma.</li>
    <li>The named address space feature from ISO/IEC TR 18037 is now
    supported.  This is currently only implemented for the SPU
    processor.</li>
  </ul>

<h3><a name="C++">C++</a></h3>
  <ul>
    <li>Improved <a href="cxx0x_status.html">experimental support for the
    upcoming C++0x</a> ISO C++ standard, including support for raw strings,
    lambda expressions and <code>explicit</code> type conversion
    operators.</li>

    <li>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 <code>-fno-pretty-templates</code> option.</li>

    <li>Access control is now applied to <code>typedef</code> names used in
    a template, which may cause G++ to reject some ill-formed code that was
    accepted by earlier releases.  The <code>-fno-access-control</code>
    option can be used as a temporary workaround until the code is
    corrected.</li>

    <li>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.</li>

    <li>Declarations of functions that look like builtin declarations of
      library functions are only considered to be redeclarations if they
      are declared with extern &quot;C&quot;.  This may cause problems with
      code that omits extern &quot;C&quot; on hand-written declarations of
      C library functions such as <code>abort</code>
      or <code>memcpy</code>.  Such code is ill-formed, but was accepted by
      earlier releases.</li>

    <li>Diagnostics that used to complain about passing non-POD types to
      <code>...</code> or jumping past the declaration of a non-POD
      variable now check for triviality rather than PODness, as per
      C++0x.</li>

    <li>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 (<a 
      href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757"
      >DR 757</a>).</li>

    <li>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&mdash;i.e., the
    label applies to an empty statement.  The only useful attribute
    for a label is <code>unused</code>.</li>

    <li>
      G++ now implements 
      <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176">DR
	176</a>.  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
      <ol>
	<li>The injected-class-name is not accessible because it's from a
	  private base, or</li>
	<li>The injected-class-name cannot be used as an argument for a
	  template template parameter.</li>
      </ol>
      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 <code>-fno-access-control</code>; the second is
      only rejected with <code>-pedantic</code>.
    </li>

    <li>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 <code>-fabi-version=4</code> or <code>-fabi-version=0</code>.
      <code>-Wabi</code> will now warn about code that uses the old mangling.</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:
      <ul>
      <li>Support for &lt;future&gt;, &lt;functional&gt;, 
	and &lt;random&gt;.</li>
      <li>Existing facilities now exploit explicit operators and the
	newly implemented core C++0x features.</li>
      </ul>
    </li>

    <li>
<p>An experimental <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html">
    profile mode </a> 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,
</p>

<pre>
#include &lt;vector&gt;
int main() 
{
  std::vector&lt;int&gt; v;
  for (int k = 0; k &lt; 1024; ++k) 
    v.insert(v.begin(), k);
}
</pre>

<p>
When instrumented via the profile mode, can return suggestions about
the initial size and choice of the container used as follows:
</p>

<pre>
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
</pre>

<p>
These constructs can be substituted for the normal libstdc++
constructs on a piecemeal basis, or all existing components can be
transformed via the <code>-D_GLIBCXX_PROFILE</code> macro.
</p>
</li>

    <li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733">Support for decimal floating-point arithmetic</a>
    (aka ISO C++ TR 24733) has been added. This support is in header file
    <code>&lt;decimal/decimal&gt;</code>, uses namespace
    <code>std::decimal</code>, and includes classes <code>decimal32</code>,
    <code>decimal64</code>, and <code>decimal128</code>.</li> 

    <li>Sources have been audited for application of function attributes
    <code>nothrow</code>, <code>const</code>, <code>pure</code>, and
    <code>noreturn</code>.</li>

    <li>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 <a href="http://sourceware.org/gdb/wiki/STLSupport">detailed
    description</a>.</li>

    <li>The default behavior for comparing typeinfo names has changed,
    so in <code>&lt;typeinfo&gt;</code>,
    <code>__GXX_MERGED_TYPEINFO_NAMES</code> now defaults to zero.</li>

    <li>The new <code>-static-libstdc++</code> option
    directs <code>g++</code> to link the C++ library statically, even
    if the default would normally be to link it dynamically.</li>
  </ul>

<h3><a name="Fortran">Fortran</a></h3>
  <ul>
    <li>The <code>COMMON</code> default padding has been changed &ndash;
    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
    <code>-falign-commons</code> option (<a href="../gcc-4.4/changes.html">added
    in 4.4</a>).</li>

    <li>The <code>-finit-real=</code> option now also supports the value
    <code>snan</code> for signalling not-a-number; to be effective,
    one additionally needs to enable trapping (e.g. via
    <code>-ffpe-trap=</code>). Note: Compile-time optimizations can
    turn a signalling NaN into a quiet one.</li>

    <li>The new option <code>-fcheck=</code> has been added with the
    options <code>bounds</code>, <code>array-temps</code>,
    <code>do</code>, <code>pointer</code>, and <code>recursive</code>. The
    <code>bounds</code> and <code>array-temps</code> options are
    equivalent to <code>-fbounds-check</code> and
    <code>-fcheck-array-temporaries</code>. The <code>do</code>
    option checks for invalid modification of loop iteration variables,
    and the <code>recursive</code> option tests for recursive calls
    to subroutines/functions which are not marked as recursive. With
    <code>pointer</code> pointer association checks in calls are performed;
    however, neither undefined pointers nor pointers in expressions are
    handled. Using <code>-fcheck=all</code> enables all these run-time
    checks.</li>

    <li>The run-time checking <code>-fcheck=bounds</code> now warns
    about invalid string lengths of character dummy arguments. Additionally,
    more compile-time checks have been added.</li>

    <li>The new option <a
    href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html"
    ><code>-fno-protect-parens</code></a> has been added; if set, the
    compiler may reorder REAL and COMPLEX expressions without regard
    to parentheses.</li>

    <li>GNU Fortran no longer links against <code>libgfortranbegin</code>.
    As before, <code>MAIN__</code> (assembler symbol name) is the actual
    Fortran main program, which is invoked by the <code>main</code> function.
    However, <code>main</code> is now generated and put in the same object
    file as <code>MAIN__</code>. For the time being,
    <code>libgfortranbegin</code> still exists for backward
    compatibility. For details see the new <a
    href="http://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html">Mixed-Language
    Programming</a> chapter in the manual.</li>

    <li>The I/O library was restructured for performance and cleaner
    code.</li>

    <li>Array assignments and <code>WHERE</code> are now run in parallel when
    OpenMP's <code>WORKSHARE</code> is used.</li>

    <li>The experimental option <code>-fwhole-file</code> was added. The option
    allows whole-file checking of procedure arguments and allows for better
    optimizations. It can also be used with <code>-fwhole-program</code>,
    which is now also supported in gfortran.</li>

    <li>More Fortran 2003 and Fortran 2008 mathematical functions can
    now be used as initialization expressions.</li>
    <li>Some extended attributes such as <code>STDCALL</code> are now
    supported via the <a
    href="http://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html">
    <code>GCC$</code> compiler directive</a>.</li>
    <li>For Fortran 77 compatibility: If <code>-fno-sign-zero</code> is
    used, the <code>SIGN</code> intrinsic behaves now as if zero were always
    positive.</li>
    <li>For legacy compatibiliy: On Cygwin and MinGW, the special files
    <code>CONOUT$</code> and <code>CONIN$</code> (and <code>CONERR$</code>
    which maps to <code>CONOUT$</code>) are now supported.</li>

    <li>Fortran 2003 support has been extended:
      <ul>
       <li>Procedure-pointer function results and procedure-pointer
       components (including PASS),</li>
       <li>allocatable scalars (experimental),</li>
       <li><code>DEFERRED</code> type-bound procedures,</li>
       <li>the <code>ERRMSG=</code> argument of the <code>ALLOCATE</code>
       and <code>DEALLOCATE</code> statements have been implemented.</li>
       <li>The <code>ALLOCATE</code> statement supports type-specs and
       the <code>SOURCE=</code> argument.</li>
       <li><code>OPERATOR(*)</code> and <code>ASSIGNMENT(=)</code> are now
       allowed as <code>GENERIC</code> type-bound procedure (i.e. as
       type-bound operators).</li>
       <li>Rounding (<code>ROUND=</code>, <code>RZ</code>, ...) for output
       is now supported.</li>
       <li>The <code>INT_FAST{8,16,32,64,128}_T</code> kind type parameters
       of the intrinsic module <code>ISO_C_BINDING</code> are now
       supported, except for the targets listed above as ones where
       GCC does not have <code>&lt;stdint.h&gt;</code> type information.
       </li>
       <li>Extensible derived types with type-bound procedure or procedure
       pointer with <code>PASS</code> attribute now have to use
       <code>CLASS</code> in line with the Fortran 2003 standard; the
       workaround to use <code>TYPE</code> is no longer supported.</li>
       <li><a href="http://gcc.gnu.org/wiki/OOP">Experimental, incomplete
       support for polymorphism</a>, including <code>CLASS</code>,
       <code>SELECT TYPE</code> and dynamic dispatch of type-bound
       procedure calls. Some features do not work yet such as
       unlimited polymorphism (<code>CLASS(*)</code>).</li>
      </ul>
    </li>

    <li>Fortran 2008 support has been extended:
      <ul>
        <li>The <code>OPEN</code> statement now supports the
        <code>NEWUNIT=</code> option, which returns a unique file unit,
        thus preventing inadvertent use of the same unit in different parts
        of the program.</li>
        <li>Support for unlimited format items has been added.</li>
        <li>The <code>INT{8,16,32}</code> and <code>REAL{32,64,128}</code>
        kind type parameters of the intrinsic module
        <code>ISO_FORTRAN_ENV</code> are now supported.</li>
        <li>Using complex arguments with <code>TAN</code>, <code>SINH</code>,
        <code>COSH</code>, <code>TANH</code>, <code>ASIN</code>,
        <code>ACOS</code>, and <code>ATAN</code> is now possible; the
        functions <code>ASINH</code>, <code>ACOSH</code>, and
        <code>ATANH</code> have been added (for real and complex arguments)
        and <code>ATAN(Y,X)</code> is now an alias for <code>ATAN2(Y,X).</code>
       </li>
       <li>The <code>BLOCK</code> construct has been implemented.</li>
      </ul>
    </li>
  </ul>

<h3>Java (GCJ)</h3>

<h2 id="targets">New Targets and Target Specific Improvements</h2>

<h3>AIX</h3>
  <ul>
    <li>Full cross-toolchain support now available with GNU Binutils</li>
  </ul>

<h3>ARM</h3>
  <ul>
    <li>GCC now supports the Cortex-M0 and Cortex-A5 processors.</li>
    <li>GCC now supports the ARM v7E-M architecture.</li>
    <li>GCC now supports VFPv4-based FPUs and FPUs with
    single-precision-only VFP.</li>
    <li>GCC has many improvements to optimization for other ARM
    processors, including scheduling support for the integer pipeline
    on Cortex-A9.</li>
    <li>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 <code>__fp16</code>, with the
    layout determined by <code>-mfp16-format</code>.  With
    appropriate <code>-mfpu</code> options, the Cortex-A9 and VFPv4
    half-precision instructions will be used.</li>
    <li>GCC now supports the variant of AAPCS that uses VFP registers
    for parameter passing and return values.</li>
  </ul>

<h3>AVR</h3>
  <ul>
    <li>The <code>-mno-tablejump</code> option has been removed because it
    has the same effect as the <code>-fno-jump-tables</code> option.</li>
    <li>Added support for these new AVR devices:
      <ul>
        <li>ATmega8U2</li>
        <li>ATmega16U2</li>
        <li>ATmega32U2</li>
      </ul>
    </li>
  </ul>

<h3 id="x86">IA-32/x86-64</h3>
  <ul>
    <li>GCC now will set the default for <code>-march=</code> based on
    the configure target.</li>
    <li>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 <code>-fexcess-precision=standard</code> and with standards
    conformance options such as <code>-std=c99</code>, and may be
    disabled using <code>-fexcess-precision=fast</code>.</li>
    <li>Support for the Intel Atom processor is now available through the
        <code>-march=atom</code> and <code>-mtune=atom</code> options.</li>
    <li>A new <code>-mcrc32</code> option is now available to enable
    <code>crc32</code> intrinsics.</li>
    <li>A new <code>-mmovbe</code> option is now available to enable GCC
    to use the <code>movbe</code> instruction to implement
    <code>__builtin_bswap32</code> and <code>__builtin_bswap64</code>.
    </li>
    <li>SSE math now can be enabled by default at configure time with the
    new <code>--with-fpmath=sse</code> option.</li>
    <li>There is a new intrinsic header file, &lt;x86intrin.h&gt;. It
    should be included before using any IA-32/x86-64 intrinsics.</li>
    <li>Support for the XOP, FMA4, and LWP instruction sets for the AMD
    Orochi processors are now available with
    the <code>-mxop</code>, <code>-mfma4</code>,
    and <code>-mlwp</code> options.</li>
    <li> The <code>-mabm</code> option enables GCC to use
    the <code>popcnt</code> and <code>lzcnt</code> instructions on AMD
    processors.</li>
    <li> The <code>-mpopcnt</code> option enables GCC to use
    the <code>popcnt</code> instructions on both AMD and Intel
    processors.</li>
  </ul>

<h3>M68K/ColdFire</h3>
  <ul>
    <li>GCC now supports ColdFire 51xx, 5221x,  5225x, 52274, 52277,
    5301x and 5441x devices.</li>
    <li>GCC now supports thread-local storage (TLS) on M68K and
    ColdFire processors.</li>
  </ul>

<h3 id="mep">MeP</h3>

<p>Support has been added for the Toshiba Media embedded Processor (MeP, or
mep-elf) embedded target.</p>

<h3>MIPS</h3>
  <ul>
    <li>GCC now supports MIPS 1004K processors.</li>
    <li>GCC can now be configured with
    options <code>--with-arch-32</code>, <code>--with-arch-64</code>,
    <code>--with-tune-32</code> and <code>--with-tune-64</code> to
    control the default optimization separately for 32-bit and 64-bit
    modes.</li>
    <li>MIPS targets now support an alternative <code>_mcount</code> interface,
    in which register <code>$12</code> points to the function's save slot
    for register <code>$31</code>.  This interface is selected by the
    <code>-mcount-ra-address</code> option; see the documentation for
    more details.</li>
    <li>GNU/Linux targets can now generate read-only <code>.eh_frame</code>
    sections.  This optimization requires GNU binutils 2.20 or above, and
    is only available if GCC is configured with a suitable version of
    binutils.</li>
    <li>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 <code>-mrelax-pic-calls</code> command-line option.</li>
    <li>GCC now generates more heavily-optimized atomic operations on
    Octeon processors.</li>
    <li>MIPS targets now support the <code>-fstack-protector</code> option.</li>
    <li>GCC now supports an <code>-msynci</code> option, which specifies
    that <code>synci</code> 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
    <code>--with-synci</code> configure-time option, which makes
    <code>-msynci</code> the default.</li>
    <li>GCC supports four new function attributes for interrupt
    handlers: <code>interrupt</code>, <code>use_shadow_register_set</code>,
    <code>keep_interrupts_masked</code> and
    <code>use_debug_exception_return</code>.  See the documentation
    for more details about these attributes.</li>
  </ul>

<h3 id="picochip">picochip</h3>

<h3 id="rs6000">RS/6000 (POWER/PowerPC)</h3>
  <ul>
    <li>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.</li>
    <li>Support for the power7 processor is now available through the
        <code>-mcpu=power7</code> and <code>-mtune=power7</code>.</li>
    <li>GCC will now vectorize loops that contain simple math functions like copysign
        when generating code for altivec or VSX targets.</li>
    <li>Support for the A2 processor is now available through the
        <code>-mcpu=a2</code> and <code>-mtune=a2</code> options.</li>
    <li>Support for the 476 processor is now available through the
        <code>-mcpu={476,476fp}</code> and <code>-mtune={476,476fp}</code>
        options.</li>
    <li>Support for the e500mc64 processor is now available through
        the <code>-mcpu=e500mc64</code>
        and <code>-mtune=e500mc64</code> options.</li>
    <li>GCC can now be configured with
    options <code>--with-cpu-32</code>, <code>--with-cpu-64</code>,
    <code>--with-tune-32</code> and <code>--with-tune-64</code> to
    control the default optimization separately for 32-bit and 64-bit
    modes.</li>
  </ul>

<h3 id="rx">RX</h3>

<p>Support has been added for the Renesas RX Processor (rx-elf) target.</p>

<h2 id="os">Operating Systems</h2>

<h3 id="windows">Windows (Cygwin and MinGW)</h3>
  <ul>
    <li>GCC now installs all the major language runtime libraries as DLLs
    when configured with the <code>--enable-shared</code> option.</li>
    <li>GCC now makes use of the new support for aligned common variables in
    versions of binutils &gt;= 2.20 to fix bugs in the support for SSE data
    types.</li>
    <li>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.</li>
    <li>Libtool improvements simplify installation by placing the generated
    DLLs in the correct binaries directory.</li>
    <li>Numerous other minor bugfixes and improvements, and substantial
    enhancements to the Fortran language support library.</li>
  </ul>

<h2>Documentation improvements</h2>

<h2>Other significant improvements</h2>

<h3>Plugins</h3>
  <ul>
    <li>It is now possible to extend the compiler without having to
    modify its source code.  A new option <code>-fplugin=file.so</code>
    tells GCC to load the shared object <code>file.so</code> and execute
    it as part of the compiler.  The internal documentation describes
    the details on how plugins can interact with the compiler.</li>
  </ul>

<h3>Installation changes</h3>

  <ul>
    <li>
    The move to newer autotools changed default installation directories
    and switches to control them:

    The <code>--with-datarootdir</code>, <code>--with-docdir</code>,
    <code>--with-pdfdir</code>, and <code>--with-htmldir</code> switches are
    not used any more.  Instead, you can now use <code>--datarootdir</code>,
    <code>--docdir</code>, <code>--htmldir</code>, and <code>--pdfdir</code>.
    The default installation directories have changed as follows according to
    the GNU Coding Standards:

    <table>
      <tbody>
	<tr>
	  <td>datarootdir</td>
	  <td>read-only architecture-independent data root [PREFIX/share]</td>
	</tr>
	<tr>
	  <td>localedir</td>
	  <td>locale-specific message catalogs [DATAROOTDIR/locale]</td>
	</tr>
	<tr>
	  <td>docdir</td>
	  <td>documentation root [DATAROOTDIR/doc/PACKAGE]</td>
	</tr>
	<tr>
	  <td>htmldir</td>
	  <td>html documentation [DOCDIR]</td>
	</tr>
	<tr>
	  <td>dvidir</td>
	  <td>dvi documentation [DOCDIR]</td>
	</tr>
	<tr>
	  <td>pdfdir</td>
	  <td>pdf documentation [DOCDIR]</td>
	</tr>
	<tr>
	  <td>psdir</td>
	  <td>ps documentation [DOCDIR]</td>
	</tr>
      </tbody>
    </table>

    The following variables have new default values:

    <table>
      <tbody>
	<tr>
	  <td>datadir</td>
	  <td>read-only architecture-independent data [DATAROOTDIR]</td>
	</tr>
	<tr>
	  <td>infodir</td>
	  <td>info documentation [DATAROOTDIR/info]</td>
	</tr>
	<tr>
	  <td>mandir</td>
	  <td>man documentation [DATAROOTDIR/man]</td>
	</tr>
      </tbody>
    </table>
    </li>
  </ul>





<!-- ==================================================================== -->

<div class="copyright">

<p>Please send FSF &amp; GNU inquiries &amp; 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 maintained by
<a href="http://gcc.gnu.org/about.html">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 mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
or <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.,
51 Franklin St, Fifth Floor, Boston, MA 02110, USA.</p>
<p>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 2010-04-17
</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>