-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
8654 lines (7548 loc) · 373 KB
/
NEWS
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
This file contains information about GCC releases which has been generated
automatically from the online release notes. It covers releases of GCC
(and the former EGCS project) since EGCS 1.0, on the line of development
that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
see ONEWS.
======================================================================
http://gcc.gnu.org/gcc-4.1/index.html
GCC 4.1 Release Series
February 13, 2007
The [1]GNU project and the GCC developers are pleased to announce the
release of GCC 4.1.2.
This release is a bug-fix release, containing fixes for regressions in
GCC 4.1.1 relative to previous releases of GCC.
Release History
GCC 4.1.2
February 13, 2007 ([2]changes)
GCC 4.1.1
May 24, 2006 ([3]changes)
GCC 4.1.0
February 28, 2006 ([4]changes)
References and Acknowledgements
GCC used to stand for the GNU C Compiler, but since the compiler
supports several other languages aside from C, it now stands for the
GNU Compiler Collection.
A list of [5]successful builds is updated as new information becomes
available.
The GCC developers would like to thank the numerous people that have
contributed new features, improvements, bug fixes, and other changes
as well as test results to GCC. This [6]amazing group of volunteers is
what makes GCC successful.
For additional information about GCC please refer to the [7]GCC
project web site or contact the [8]GCC development mailing list.
To obtain GCC please use [9]our mirror sites, one of the [10]GNU
mirror sites, or [11]our SVN server.
Please send FSF & GNU inquiries & questions to [12]gnu@gnu.org. There
are also [13]other ways to contact the FSF.
These pages are maintained by [14]the GCC team.
For questions related to the use of GCC, please consult these web
pages and the [15]GCC manuals. If that fails, the
[16]gcc-help@gcc.gnu.org mailing list might help.
Please send comments on these web pages and the development of GCC
to our developer mailing list at [17]gcc@gnu.org or
[18]gcc@gcc.gnu.org. All of our lists have [19]public archives.
Copyright (C) Free Software Foundation, Inc., 51 Franklin St, Fifth
Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
Last modified 2007-02-14 [20]Valid XHTML 1.0
References
1. http://www.gnu.org/
2. http://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
3. http://gcc.gnu.org/gcc-4.1/changes.html
4. http://gcc.gnu.org/gcc-4.1/changes.html
5. http://gcc.gnu.org/gcc-4.1/buildstat.html
6. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
7. http://gcc.gnu.org/index.html
8. mailto:gcc@gcc.gnu.org
9. http://gcc.gnu.org/mirrors.html
10. http://www.gnu.org/order/ftp.html
11. http://gcc.gnu.org/svn.html
12. mailto:gnu@gnu.org
13. http://www.gnu.org/home.html#ContactInfo
14. http://gcc.gnu.org/about.html
15. http://gcc.gnu.org/onlinedocs/
16. mailto:gcc-help@gcc.gnu.org
17. mailto:gcc@gnu.org
18. mailto:gcc@gcc.gnu.org
19. http://gcc.gnu.org/lists.html
20. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.1/changes.html
GCC 4.1 Release Series
Changes, New Features, and Fixes
The latest release in the 4.1 release series is [1]GCC 4.1.2.
Caveats
General Optimizer Improvements
* GCC now has infrastructure for inter-procedural optimizations and
the following inter-procedural optimizations are implemented:
+ Profile guided inlining. When doing profile feedback guided
optimization, GCC can now use the profile to make better
informed decisions on whether inlining of a function is
profitable or not. This means that GCC will no longer inline
functions at call sites that are not executed very often, and
that functions at hot call sites are more likely to be
inlined.
A new parameter min-inline-recursive-probability is also now
available to throttle recursive inlining of functions with
small average recursive depths.
+ Discovery of pure and const functions, a form of side-effects
analysis. While older GCC releases could also discover such
special functions, the new IPA-based pass runs earlier so
that the results are available to more optimizers. The pass
is also simply more powerful than the old one.
+ Analysis of references to static variables and type escape
analysis, also forms of side-effects analysis. The results of
these passes allow the compiler to be less conservative about
call-clobbered variables and references. This results in more
redundant loads being eliminated and in making static
variables candidates for register promotion.
+ Improvement of RTL-based alias analysis. The results of type
escape analysis are fed to the RTL type-based alias analyzer,
allowing it to disambiguate more memory references.
+ Interprocedural constant propagation and function versioning.
This pass looks for functions that are always called with the
same constant value for one or more of the function
arguments, and propagates those constants into those
functions.
+ GCC will now eliminate static variables whose usage was
optimized out.
+ -fwhole-program --combine can now be used to make all
functions in program static allowing whole program
optimization. As an exception, the main function and all
functions marked with the new externally_visible attribute
are kept global so that programs can link with runtime
libraries.
* GCC can now do a form of partial dead code elimination (PDCE) that
allows code motion of expressions to the paths where the result of
the expression is actually needed. This is not always a win, so
the pass has been limited to only consider profitable cases. Here
is an example:
int foo (int *, int *);
int
bar (int d)
{
int a, b, c;
b = d + 1;
c = d + 2;
a = b + c;
if (d)
{
foo (&b, &c);
a = b + c;
}
printf ("%d\n", a);
}
The a = b + c can be sunk to right before the printf.
Normal code sinking will not do this, it will sink the first one
above into the else-branch of the conditional jump, which still
gives you two copies of the code.
* GCC now has a value range propagation pass. This allows the
compiler to eliminate bounds checks and branches. The results of
the pass can also be used to accurately compute branch
probabilities.
* The pass to convert PHI nodes to straight-line code (a form of
if-conversion for GIMPLE) has been improved significantly. The two
most significant improvements are an improved algorithm to
determine the order in which the PHI nodes are considered, and an
improvement that allow the pass to consider if-conversions of
basic blocks with more than two predecessors.
* Alias analysis improvements. GCC can now differentiate between
different fields of structures in Tree-SSA's virtual operands
form. This lets stores/loads from non-overlapping structure fields
not conflict. A new algorithm to compute points-to sets was
contributed that can allows GCC to see now that p->a and p->b,
where p is a pointer to a structure, can never point to the same
field.
* Various enhancements to auto-vectorization:
+ Incrementally preserve SSA form when vectorizing.
+ Incrementally preserve loop-closed form when vectorizing.
+ Improvements to peeling for alignment: generate better code
when the misalignment of an access is known at compile time,
or when different accesses are known to have the same
misalignment, even if the misalignment amount itself is
unknown.
+ Consider dependence distance in the vectorizer.
+ Externalize generic parts of data reference analysis to make
this analysis available to other passes.
+ Vectorization of conditional code.
+ Reduction support.
* GCC can now partition functions in sections of hot and cold code.
This can significantly improve performance due to better
instruction cache locality. This feature works best together with
profile feedback driven optimization.
* A new pass to avoid saving of unneeded arguments to the stack in
vararg functions if the compiler can prove that they will not be
needed.
* Transition of basic block profiling to tree level implementation
has been completed. The new implementation should be considerably
more reliable (hopefully avoiding profile mismatch errors when
using -fprofile-use or -fbranch-probabilities) and can be used to
drive higher level optimizations, such as inlining.
The -ftree-based-profiling command line option was removed and
-fprofile-use now implies disabling old RTL level loop optimizer
(-fno-loop-optimize). Speculative prefetching optimization
(originally enabled by -fspeculative-prefetching) was removed.
New Languages and Language specific improvements
C and Objective-C
* The old Bison-based C and Objective-C parser has been replaced by
a new, faster hand-written recursive-descent parser.
Ada
* The build infrastructure for the Ada runtime library and tools has
been changed to be better integrated with the rest of the build
infrastructure of GCC. This should make doing cross builds of Ada
a bit easier.
C++
* ARM-style name-injection of friend declarations is no longer the
default. For example:
struct S {
friend void f();
};
void g() { f(); }
will not be accepted; instead a declaration of f will need to be
present outside of the scope of S. The new -ffriend-injection
option will enable the old behavior.
* The (undocumented) extension which permitted templates with
default arguments to be bound to template template parameters with
fewer parameters has been deprecated, and will be removed in the
next major release of G++. For example:
template <template <typename> class C>
void f(C<double>) {}
template <typename T, typename U = int>
struct S {};
template void f(S<double>);
makes use of the deprecated extension. The reason this code is not
valid ISO C++ is that S is a template with two parameters;
therefore, it cannot be bound to C which has only one parameter.
Runtime Library (libstdc++)
* Optimization work:
+ A new implementation of std::search_n is provided, better
performing in case of random access iterators.
+ Added further efficient specializations of istream functions,
i.e., character array and string extractors.
+ Other smaller improvements throughout.
* Policy-based associative containers, designed for
high-performance, flexibility and semantic safety are delivered in
ext/pb_assoc.
* A versatile string class, __gnu_cxx::__versa_string, providing
facilities conforming to the standard requirements for
basic_string, is delivered in <ext/vstring.h>. In particular:
+ Two base classes are provided: the default one avoids
reference counting and is optimized for short strings; the
alternate one, still uses it while improving in a few low
level areas (e.g., alignment). See vstring_fwd.h for some
useful typedefs.
+ Various algorithms have been rewritten (e.g., replace), the
code streamlined and simple optimizations added.
+ Option 3 of DR 431 is implemented for both available bases,
thus improving the support for stateful allocators.
* As usual, many bugs have been fixed (e.g., libstdc++/13583,
libstdc++/23953) and LWG resolutions put into effect for the first
time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
Issue 6.19). The implementation status of TR1 is now tracked in
the docs in tr1.html.
Objective-C++
* A new language front end for Objective-C++ has been added. This
language allows users to mix the object oriented features of
Objective-C with those of C++.
Java (GCJ)
* Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
features (plus some 0.20 bug-fixes)
+ Networking
o The java.net.HttpURLConnection implementation no longer
buffers the entire response body in memory. This means
that response bodies larger than available memory can
now be handled.
+ (N)IO
o NIO FileChannel.map implementation, fast bulk put
implementation for DirectByteBuffer (speeds up this
method 10x).
o FileChannel.lock() and FileChannel.force() implemented.
+ XML
o gnu.xml fix for nodes created outside a namespace
context.
o Add support for output indenting and
cdata-section-elements output instruction in
xml.transform.
o xml.xpath corrections for cases where
elements/attributes might have been created in
non-namespace-aware mode. Corrections to handling of XSL
variables and minor conformance updates.
+ AWT
o GNU JAWT implementation, the AWT Native Interface, which
allows direct access to native screen resources from
within a Canvas's paint method. GNU Classpath Examples
comes with a Demo, see
libjava/classpath/examples/README.
o awt.datatransfer updated to 1.5 with support for
FlavorEvents. The gtk+ awt peers now allow copy/paste of
text, images, URIs/files and serialized objects with
other applications and tracking clipboard change events
with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
objects are supported). A GNU Classpath Examples
datatransfer Demo was added to show the new
functionality.
o Split gtk+ awt peers event handling in two threads and
improve gdk lock handling (solves several awt lock ups).
o Speed up awt Image loading.
o Better gtk+ scrollbar peer implementation when using
gtk+ >= 2.6.
o Handle image loading errors correctly for gdkpixbuf and
MediaTracker.
o Better handle GDK lock. Properly prefix gtkpeer native
functions (cp_gtk).
o GdkGraphics2D has been updated to use Cairo 0.5.x or
higher.
o BufferedImage and GtkImage rewrites. All image drawing
operations should now work correctly (flipping requires
gtk+ >= 2.6)
o Future Graphics2D, image and text work is documented at:
[2]http://developer.classpath.org/mediation/ClasspathGra
phicsImagesText
o When gtk+ 2.6 or higher is installed the default log
handler will produce stack traces whenever a WARNING,
CRITICAL or ERROR message is produced.
+ Free Swing
o The RepaintManager has been reworked for more efficient
painting, especially for large GUIs.
o The layout manager OverlayLayout has been implemented,
the BoxLayout has been rewritten to make use of the
SizeRequirements utility class and caching for more
efficient layout.
o Improved accessibility support.
o Significant progress has been made in the implementation
of the javax.swing.plaf.metal package, with most UI
delegates in a working state now. Please test this with
your own applications and provide feedback that will
help us to improve this package.
o The GUI demo (gnu.classpath.examples.swing.Demo) has
been extended to highlight various features in our Free
Swing implementation. And it includes a look and feel
switcher for Metal (default), Ocean and GNU themes.
o The javax.swing.plaf.multi package is now implemented.
o Editing and several key actions for JTree and JTable
were implemented.
o Lots of icons and look and feel improvements for Free
Swing basic and metal themes were added. Try running the
GNU Classpath Swing Demo in examples
(gnu.classpath.examples.swing.Demo) with:
-Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFe
el or
-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFe
el
o Start of styled text capabilites for java.swing.text.
o DefaultMutableTreeNode pre-order, post-order,
depth-first and breadth-first traversal enumerations
implemented.
o JInternalFrame colors and titlebar draw properly.
o JTree is working up to par (icons, selection and
keyboard traversal).
o JMenus were made more compatible in visual and
programmatic behavior.
o JTable changeSelection and multiple selections
implemented.
o JButton and JToggleButton change states work properly
now.
o JFileChooser fixes.
o revalidate() and repaint() fixes which make Free Swing
much more responsive.
o MetalIconFactory implemented.
o Free Swing Top-Level Compatibility. JFrame, JDialog,
JApplet, JInternalFrame, and JWindow are now 1.5
compatible in the sense that you can call add() and
setLayout() directly on them, which will have the same
effect as calling getContentPane().add() and
getContentPane().setLayout().
o The JTree interface has been completed. JTrees now
recognizes mouse clicks and selections work.
o BoxLayout works properly now.
o Fixed GrayFilter to actually work.
o Metal SplitPane implemented.
o Lots of Free Swing text and editor stuff work now.
+ Free RMI and Corba
o Andrew Watson, Vice President and Technical Director of
the Object Management Group, has officially assigned us
20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
mark remote classpath-specific system exceptions.
Obtaining the VMCID means that GNU Classpath now is a
recogniseable type of node in a highly interoperable
CORBA world.
o GNU Classpath now includes the first working draft to
support the RMI over IIOP protocol. The current
implementation is capable of remote invocations,
transferring various Serializables and Externalizables
via RMI-IIOP protocol. It can flatten graphs and, at
least for the simple cases, is interoperable with 1.5
JDKs.
o org.omg.PortableInterceptor and related functionality in
other packages is now implemented:
# The sever and client interceptors work as required
since 1.4.
# The IOR interceptor works as needed for 1.5.
o The org.omg.DynamicAny package is completed and passes
the prepared tests.
o The Portable Object Adapter should now support the
output of the recent IDL to java compilers. These
compilers now generate servants and not CORBA objects as
before, making the output depend on the existing POA
implementation. Completing POA means that such code can
already be tried to run on Classpath. Our POA is tested
for the following usager scenarios:
# POA converts servant to the CORBA object.
# Servant provides to the CORBA object.
# POA activates new CORBA object with the given
Object Id (byte array) that is later accessible for
the servant.
# During the first call, the ServantActivator
provides servant for this and all subsequent calls
on the current object.
# During each call, the ServantLocator provides
servant for this call only.
# ServantLocator or ServantActivator forwards call to
another server.
# POA has a single servant, responsible for all
objects.
# POA has a default servant, but some objects are
explicitly connected to they specific servants.
The POA is verified using tests from the former
cost.omg.org.
o The CORBA implementation is now a working prototype that
should support features up to 1.3 inclusive. We invite
groups writing CORBA dependent applications to try
Classpath implementation, reporting any possible bugs.
The CORBA prototype is interoperable with Sun's
implementation v 1.4, transferring object references,
primitive types, narrow and wide strings, arrays,
structures, trees, abstract interfaces and value types
(feature of CORBA 2.3) between these two platforms.
Remote exceptions are transferred and handled correctly.
The stringified object references (IORs) from various
sources are parsed as required. The transient (for
current session) and permanent (till jre restart)
redirections work. Both Little and Big Endian encoded
messages are accepted. The implementation is verified
using tests from the former cost.omg.org. The current
release includes working examples (see the examples
directory), demonstrating the client-server
communication, using either CORBA Request or IDL-based
stub (usually generated by a IDL to java compiler).
These examples also show how to use the Classpath CORBA
naming service. The IDL to java compiler is not yet
written, but as our library must be compatible, it
naturally accepts the output of other idlj
implementations.
+ Misc
o Updated TimeZone data against Olson tzdata2005l.
o Make zip and jar packages UTF-8 clean.
o "native" code builds and compiles (warning free) on
Darwin and Solaris.
o java.util.logging.FileHandler now rotates files.
o Start of a generic JDWP framework in gnu/classpath/jdwp.
This is unfinished, but feedback (at classpath@gnu.org)
from runtime hackers is greatly appreciated. Although
most of the work is currently being done around gcj/gij
we want this framework to be as VM neutral as possible.
Early design is described in:
[3]http://gcc.gnu.org/ml/java/2005-05/msg00260.html
o QT4 AWT peers, enable by giving configure
--enable-qt-peer. Included, but not ready for production
yet. They are explicitly disabled and not supported. But
if you want to help with the development of these new
features we are interested in feedback. You will have to
explicitly enable them to try them out (and they will
most likely contain bugs).
o Documentation fixes all over the place. See
[4]http://developer.classpath.org/doc/
New Targets and Target Specific Improvements
IA-32/x86-64
* The x86-64 medium model (that allows building applications whose
data segment exceeds 4GB) was redesigned to match latest ABI
draft. New implementation split large datastructures into separate
segment improving performance of accesses to small datastructures
and also allows linking of small model libraries into medium model
programs as long as the libraries are not accessing the large
datastructures directly. Medium model is also supported in
position independent code now.
The ABI change results in partial incompatibility among medium
model objects. Linking medium model libraries (or objects)
compiled with new compiler into medium model program compiled with
older will likely result in exceeding ranges of relocations.
Binutils 2.16.91 or newer are required for compiling medium model
now.
RS6000 (POWER/PowerPC)
* The AltiVec vector primitives in <altivec.h> are now implemented
in a way that puts a smaller burden on the preprocessor, instead
processing the "overloading" in the front ends. This should
benefit compilation speed on AltiVec vector code.
* AltiVec initializers now are generated more efficiently.
* The popcountb instruction available on POWER5 now is generated.
* The floating point round to integer instructions available on
POWER5+ now is generated.
* Floating point divides can be synthesized using the floating point
reciprocal estimate instructions.
* Double precision floating point constants are initialized as
single precision values if they can be represented exactly.
S/390, zSeries and System z9
* Support for the IBM System z9 109 processor has been added. When
using the -march=z9-109 option, the compiler will generate code
making use of instructions provided by the extended immediate
facility.
* Support for 128-bit IEEE floating point has been added. When using
the -mlong-double-128 option, the compiler will map the long
double data type to 128-bit IEEE floating point. Using this option
constitutes an ABI change, and requires glibc support.
* Various changes to improve performance of generated code have been
implemented, including:
+ In functions that do not require a literal pool, register
%r13 (which is traditionally reserved as literal pool
pointer), can now be freely used for other purposes by the
compiler.
+ More precise tracking of register use allows the compiler to
generate more efficient function prolog and epilog code in
certain cases.
+ The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
instructions are now used to implement C string functions.
+ The MOVE CHARACTER instruction with single byte overlap is
now used to implement the memset function with non-zero fill
byte.
+ The LOAD ZERO instructions are now used where appropriate.
+ The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER
MASK, and INSERT IMMEDIATE instructions are now used more
frequently to optimize bitfield operations.
+ The BRANCH ON COUNT instruction is now used more frequently.
In particular, the fact that a loop contains a subroutine
call no longer prevents the compiler from using this
instruction.
+ The compiler is now aware that all shift and rotate
instructions implicitly truncate the shift count to six bits.
* Back-end support for the following generic features has been
implemented:
+ The full set of [5]built-in functions for atomic memory
access.
+ The -fstack-protector feature.
+ The optimization pass avoiding unnecessary stores of incoming
argument registers in functions with variable argument list.
SPARC
* The default code model in 64-bit mode has been changed from
Medium/Anywhere to Medium/Middle on Solaris.
* TLS support is disabled by default on Solaris prior to release 10.
It can be enabled on TLS-capable Solaris 9 versions (4/04 release
and later) by specifying --enable-tls at configure time.
MorphoSys
* Support has been added for this new architecture.
Obsolete Systems
Documentation improvements
Other significant improvements
* GCC can now emit code for protecting applications from
stack-smashing attacks. The protection is realized by buffer
overflow detection and reordering of stack variables to avoid
pointer corruption.
* Some built-in functions have been fortified to protect them
against various buffer overflow (and format string)
vulnerabilities. Compared to the mudflap bounds checking feature,
the safe builtins have far smaller overhead. This means that
programs built using safe builtins should not experience any
measurable slowdown.
GCC 4.1.2
This is the [6]list of problem reports (PRs) from GCC's bug tracking
system that are known to be fixed in the 4.1.2 release. This list
might not be complete (that is, it is possible that some PRs that have
been fixed are not listed here).
When generating code for a shared library, GCC now recognizes that
global functions may be replaced when the program runs. Therefore, it
is now more conservative in deducing information from the bodies of
functions. For example, in this example:
void f() {}
void g() {
try { f(); }
catch (...) {
cout << "Exception";
}
}
G++ would previously have optimized away the catch clause, since it
would have concluded that f cannot throw exceptions. Because users may
replace f with another function in the main body of the program, this
optimization is unsafe, and is no longer performed. If you wish G++ to
continue to optimize as before, you must add a throw() clause to the
declaration of f to make clear that it does not throw exceptions.
Please send FSF & GNU inquiries & questions to [7]gnu@gnu.org. There
are also [8]other ways to contact the FSF.
These pages are maintained by [9]the GCC team.
For questions related to the use of GCC, please consult these web
pages and the [10]GCC manuals. If that fails, the
[11]gcc-help@gcc.gnu.org mailing list might help.
Please send comments on these web pages and the development of GCC
to our developer mailing list at [12]gcc@gnu.org or
[13]gcc@gcc.gnu.org. All of our lists have [14]public archives.
Copyright (C) Free Software Foundation, Inc., 51 Franklin St, Fifth
Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
Last modified 2007-02-14 [15]Valid XHTML 1.0
References
1. http://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
2. http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
3. http://gcc.gnu.org/ml/java/2005-05/msg00260.html
4. http://developer.classpath.org/doc/
5. http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
6. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
7. mailto:gnu@gnu.org
8. http://www.gnu.org/home.html#ContactInfo
9. http://gcc.gnu.org/about.html
10. http://gcc.gnu.org/onlinedocs/
11. mailto:gcc-help@gcc.gnu.org
12. mailto:gcc@gnu.org
13. mailto:gcc@gcc.gnu.org
14. http://gcc.gnu.org/lists.html
15. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.0/index.html
GCC 4.0 Release Series
January 31, 2007
The [1]GNU project and the GCC developers are pleased to announce the
release of GCC 4.0.4.
This release is a bug-fix release, containing fixes for regressions in
GCC 4.0.3 relative to previous releases of GCC.
Release History
GCC 4.0.4
January 31, 2007 ([2]changes)
GCC 4.0.3
March 10, 2006 ([3]changes)
GCC 4.0.2
September 28, 2005 ([4]changes)
GCC 4.0.1
July 7, 2005 ([5]changes)
GCC 4.0.0
April 20, 2005 ([6]changes)
References and Acknowledgements
GCC used to stand for the GNU C Compiler, but since the compiler
supports several other languages aside from C, it now stands for the
GNU Compiler Collection.
A list of [7]successful builds is updated as new information becomes
available.
The GCC developers would like to thank the numerous people that have
contributed new features, improvements, bug fixes, and other changes
as well as test results to GCC. This [8]amazing group of volunteers is
what makes GCC successful.
For additional information about GCC please refer to the [9]GCC
project web site or contact the [10]GCC development mailing list.
To obtain GCC please use [11]our mirror sites, one of the [12]GNU
mirror sites, or [13]our SVN server.
Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There
are also [15]other ways to contact the FSF.
These pages are maintained by [16]the GCC team.
For questions related to the use of GCC, please consult these web
pages and the [17]GCC manuals. If that fails, the
[18]gcc-help@gcc.gnu.org mailing list might help.
Please send comments on these web pages and the development of GCC
to our developer mailing list at [19]gcc@gnu.org or
[20]gcc@gcc.gnu.org. All of our lists have [21]public archives.
Copyright (C) Free Software Foundation, Inc., 51 Franklin St, Fifth
Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.
Last modified 2007-02-03 [22]Valid XHTML 1.0
References
1. http://www.gnu.org/
2. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
3. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
4. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
5. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
6. http://gcc.gnu.org/gcc-4.0/changes.html
7. http://gcc.gnu.org/gcc-4.0/buildstat.html
8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
9. http://gcc.gnu.org/index.html
10. mailto:gcc@gcc.gnu.org
11. http://gcc.gnu.org/mirrors.html
12. http://www.gnu.org/order/ftp.html
13. http://gcc.gnu.org/svn.html
14. mailto:gnu@gnu.org
15. http://www.gnu.org/home.html#ContactInfo
16. http://gcc.gnu.org/about.html
17. http://gcc.gnu.org/onlinedocs/
18. mailto:gcc-help@gcc.gnu.org
19. mailto:gcc@gnu.org
20. mailto:gcc@gcc.gnu.org
21. http://gcc.gnu.org/lists.html
22. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-4.0/changes.html
GCC 4.0 Release Series
Changes, New Features, and Fixes
The latest release in the 4.0 release series is [1]GCC 4.0.4.
Caveats
* GCC now generates location lists by default when compiling with
debug info and optimization.
+ GDB 6.0 and older crashes when it sees location lists. GDB
6.1 or later is needed to debug binaries containing location
lists.
+ When you are trying to view a value of a variable in a part
of a function where it has no location (for example when the
variable is no longer used and thus its location was used for
something else) GDB will say that it is not available.
You can disable generating location lists by -fno-var-tracking.
* GCC no longer accepts the -fwritable-strings option. Use named
character arrays when you need a writable string.
* The options -freduce-all-givs and -fmove-all-movables have been
discontinued. They were used to circumvent a shortcoming in the
heuristics of the old loop optimization code with respect to
common Fortran constructs. The new (tree) loop optimizer works
differently and doesn't need those work-arounds.
* The graph-coloring register allocator, formerly enabled by the
option -fnew-ra, has been discontinued.
* -I- has been deprecated. -iquote is meant to replace the need for
this option.
* The MIPS -membedded-pic and -mrnames options have been removed.
* All MIPS targets now require the GNU assembler. In particular,
IRIX configurations can no longer use the MIPSpro assemblers,
although they do still support the MIPSpro linkers.
* The SPARC option -mflat has been removed.
* English-language diagnostic messages will now use Unicode
quotation marks in UTF-8 locales. (Non-English messages already
used the quotes appropriate for the language in previous
releases.) If your terminal does not support UTF-8 but you are
using a UTF-8 locale (such locales are the default on many
GNU/Linux systems) then you should set LC_CTYPE=C in the
environment to disable that locale. Programs that parse
diagnostics and expect plain ASCII English-language messages
should set LC_ALL=C. See [2]Markus Kuhn's explanation of Unicode
quotation marks for more information.
* The specs file is no longer installed on most platforms. Most
users will be totally unaffected. However, if you are accustomed
to editing the specs file yourself, you will now have to use the
-dumpspecs option to generate the specs file, and then edit the
resulting file.
General Optimizer Improvements
* The [3]tree ssa branch has been merged. This merge has brought in
a completely new optimization framework based on a higher level
intermediate representation than the existing RTL representation.
Numerous new code transformations based on the new framework are
available in GCC 4.0, including:
+ Scalar replacement of aggregates
+ Constant propagation
+ Value range propagation
+ Partial redundancy elimination
+ Load and store motion
+ Strength reduction
+ Dead store elimination
+ Dead and unreachable code elimination
+ [4]Autovectorization
+ Loop interchange
+ Tail recursion by accumulation
Many of these passes outperform their counterparts from previous
GCC releases.
* [5]Swing Modulo Scheduling (SMS). An RTL level instruction
scheduling optimization intended for loops that perform heavy
computations.
New Languages and Language specific improvements
C family
* The sentinel attribute has been added to GCC. This function
attribute allows GCC to warn when variadic functions such as execl
are not NULL terminated. See the GCC manual for a complete
description of its behavior.
* Given __attribute__((alias("target"))) it is now an error if
target is not a symbol, defined in the same translation unit. This
also applies to aliases created by #pragma weak alias=target. This
is because it's meaningless to define an alias to an undefined
symbol. On Solaris, the native assembler would have caught this
error, but GNU as does not.
C and Objective-C
* The -Wstrict-aliasing=2 option has been added. This warning
catches all unsafe cases, but it may also give a warning for some
cases that are safe.
* The cast-as-lvalue, conditional-expression-as-lvalue and
compound-expression-as-lvalue extensions, which were deprecated in
3.3.4 and 3.4, have been removed.
* The -fwritable-strings option, which was deprecated in 3.4, has
been removed.
* #pragma pack() semantics have been brought closer to those used by
other compilers. This also applies to C++.
* Taking the address of a variable with register storage is invalid
in C. GCC now issues an error instead of a warning.
* Arrays of incomplete element type are invalid in C. GCC now issues
an error for such arrays. Declarations such as extern struct s
x[]; (where struct s has not been defined) can be moved after the
definition of struct s. Function parameters declared as arrays of
incomplete type can instead be declared as pointers.
C++
* When compiling without optimizations (-O0), the C++ frontend is
much faster than in any previous versions of GCC. Independent
testers have measured speed-ups up to 25% in real-world production
code, compared to the 3.4 family (which was already the fastest
version to date). Upgrading from older versions might show even
bigger improvements.
* ELF visibility attributes can now be applied to a class type, so
that it affects every member function of a class at once, without
having to specify each individually:
class __attribute__ ((visibility("hidden"))) Foo
{
int foo1();
void foo2();
};
The syntax is deliberately similar to the __declspec() system used
by Microsoft Windows based compilers, allowing cross-platform
projects to easily reuse their existing macro system for denoting
exports and imports. By explicitly marking internal classes never
used outside a binary as hidden, one can completely avoid PLT
indirection overheads during their usage by the compiler. You can
find out more about the advantages of this at
[6]http://people.redhat.com/drepper/dsohowto.pdf
* The -fvisibility-inlines-hidden option has been added which marks
all inlineable functions as having hidden ELF visibility, thus
removing their symbol and typeinfo from the exported symbol table
of the output ELF binary. Using this option can reduce the
exported symbol count of template-heavy code by up to 40% with no
code change at all, thus notably improving link and load times for
the binary as well as a reduction in size of up to 10%. Also,
check the new [7]-fvisibility option.
* The compiler now uses the library interface specified by the
[8]C++ ABI for thread-safe initialization of function-scope static
variables. Most users should leave this alone, but embedded
programmers may want to disable this by specifying
-fno-threadsafe-statics for a small savings in code size.
* Taking the address of an explicit register variable is no longer
supported. Note that C++ allows taking the address of variables
with register storage so this will continue to compile with a
warning. For example, assuming that r0 is a machine register:
register int foo asm ("r0");
register int bar;
&foo; // error, no longer accepted
&bar; // OK, with a warning
* G++ has an undocumented extension to virtual function covariancy
rules that allowed the overrider to return a type that was
implicitly convertable to the overridden function's return type.
For instance a function returning void * could be overridden by a
function returning T *. This is now deprecated and will be removed
in a future release.
* The G++ minimum and maximum operators (<? and >?) and their
compound forms (<?=) and >?=) have been deprecated and will be
removed in a future version. Code using these operators should be
modified to use std::min and std::max instead.
* Declaration of nested classes of class templates as friends are
supported:
template <typename T> struct A {
class B {};
};
class C {
template <typename T> friend class A<T>::B;
};
This complements the feature member functions of class templates
as friends introduced in GCC 3.4.0.
* When declaring a friend class using an unqualified name, classes
outside the innermost non-class scope are not searched:
class A;
namespace N {
class B {
friend class A; // Refer to N::A which has not been declared yet
// because name outside namespace N are not searched
friend class ::A; // Refer to ::A
};
}
Hiding the friend name until declaration is still not implemented.
* Friends of classes defined outside their namespace are correctly
handled:
namespace N {
class A;
}
class N::A {
friend class B; // Refer to N::B in GCC 4.0.0
// but ::B in earlier versions of GCC
};
Runtime Library (libstdc++)
* Optimization work:
+ Added efficient specializations of istream functions for char
and wchar_t.
+ Further performance tuning of strings, in particular wrt
single-char append and getline.
+ iter_swap - and therefore most of the mutating algorithms -
now makes an unqualified call to swap when the value_type of
the two iterators is the same.
* A large subset of the features in Technical Report 1 (TR1 for
short) is experimentally delivered (i.e., no guarantees about the
implementation are provided. In particular it is not promised that
the library will remain link-compatible when code using TR1 is
used):
+ General utilities such as reference_wrapper and shared_ptr.
+ Function objects, i.e., result_of, mem_fn, bind, function.
+ Support for metaprogramming.
+ New containers such as tuple, array, unordered_set,
unordered_map, unordered_multiset, unordered_multimap.
* As usual, many bugs have been fixed and LWG resolutions
implemented for the first time (e.g., DR 409).
Java
* In order to prevent naming conflicts with other implementations of
these tools, some GCJ binaries have been renamed:
+ rmic is now grmic,
+ rmiregistry is now grmiregistry, and
+ jar is now fastjar.
In particular, these names were problematic for the jpackage.org
packaging conventions which install symlinks in /usr/bin that
point to the preferred versions of these tools.
* The -findirect-dispatch argument to the compiler now works and
generates code following a new "binary compatibility" ABI. Code
compiled this way follows the binary compatibility rules of the
Java Language Specification.
* libgcj now has support for using GCJ as a JIT, using the
gnu.gcj.jit family of system properties.