Checking for null format arguments has been decoupled from
the rest of the format checking mechanism. Programs which
use the format attribute may regain this
functionality by using the new nonnull function
attribute. Note that all functions for which GCC has a
built-in format attribute, an appropriate
built-in nonnull attribute is also applied.
The DWARF (version 1) debugging format has been deprecated and
will be removed in a future version of GCC. Version 2 of the
DWARF debugging format will continue to be supported for the
foreseeable future.
The C and Objective-C compilers no longer accept the "Naming
Types" extension (typedef foo = bar); it was
already unavailable in C++. Code which uses it will need to
be changed to use the "typeof" extension instead:
typedef typeof(bar) foo. (We have removed this
extension without a period of deprecation because it has
caused the compiler to crash since version 3.0 and no one
noticed until very recently. Thus we conclude it is not in
widespread use.)
The -traditional C compiler option has been
removed. It was deprecated in 3.1 and 3.2. (Traditional
preprocessing remains available.) The
<varargs.h> header, used for writing
variadic functions in traditional C, still exists but will
produce an error message if used.
GCC 3.3.1 automatically places zero-initialized variables in
the .bss section on some operating systems.
Versions of GNU Emacs up to (and including) 21.3 will not work
correctly when using this optimization; you can use
-fno-zero-initialized-in-bss to disable it.
General Optimizer Improvements
A new scheme for accurately describing processor pipelines,
the DFA scheduler, has been
added.
Pavel Nejedly, Charles University Prague, has contributed new file format
used by the edge coverage profiler (-fprofile-arcs).
The new format is robust and diagnoses common mistakes where
profiles from different versions (or compilations) of the program are
combined resulting in nonsensical profiles and slow code to produced
with profile feedback. Additionally this format allows extra data to
be gathered. Currently, overall statistics are produced helping
optimizers to identify hot spots of a program globally replacing the
old intra-procedural scheme and resulting in better code. Note that the
gcov tool from older GCC versions will not be able to
parse the profiles generated by GCC 3.3 and vice versa.
Jan Hubicka, SuSE Labs, has contributed a new superblock formation
pass enabled using -ftracer. This pass simplifies the
control flow of functions allowing other optimizations to do better
job.
He also contributed the function reordering pass
(-freorder-functions) to optimize function placement
using profile feedback.
New Languages and Language specific improvements
C/ObjC/C++
The preprocessor now accepts directives within macro
arguments. It processes them just as if they had not been within
macro arguments.
The separate ISO and traditional preprocessors have been
completely removed. The front end handles either type of
preprocessed output if necessary.
In C99 mode preprocessor arithmetic is done in the precision
of the target's intmax_t, as required by that
standard.
The preprocessor can now copy comments inside macros to the
output file when the macro is expanded. This feature, enabled
using the -CC option, is intended for use by
applications which place metadata or directives inside comments,
such as lint.
The method of constructing the list of directories to be searched
for header files has been revised. If a directory named by a
-I option is a standard system include directory,
the option is ignored to ensure that the default search order
for system directories and the special treatment of system header
files are not defeated.
A new function attribute,
nonnull, has been added
which allows pointer arguments to functions to be specified as
requiring a non-null value. The compiler currently uses this
information to issue a warning when it detects a null value passed
in such an argument slot.
A new type attribute,
may_alias, has been added.
Accesses to objects with types with this attribute are not
subjected to type-based alias analysis, but are instead assumed to
be able to alias any other type of objects, just like the
char type.
C++
Type based alias analysis has been implemented for C++
aggregate types.
Objective-C
Generate an error if Objective-C objects are passed by value
in function and method calls.
When -Wselector is used, check the whole list of
selectors at the end of compilation, and emit a warning if a
@selector() is not known.
Define __NEXT_RUNTIME__ when compiling for the
NeXT runtime.
No longer need to include objc/objc-class.h to
compile self calls in class methods (NeXT runtime only).
New -Wundeclared-selector option.
Removed selector bloating which was causing object files to be
10% bigger on average (GNU runtime only).
Using at run time @protocol() objects has been
fixed in certain situations (GNU runtime only).
Type checking has been fixed and improved in many situations
involving protocols.
Java
The java.sql and javax.sql packages now
implement the JDBC 3.0 (JDK 1.4) API.
The JDK 1.4 assert facility has been
implemented.
The bytecode interpreter is now direct threaded and thus
faster.
The following changes have been made to the IA-32/x86-64 port:
SSE2 and 3dNOW! intrinsics are now supported.
Support for thread local storage has been added to the IA-32
and x86-64 ports.
The x86-64 port has been significantly improved.
The following changes have been made to the MIPS port:
All configurations now accept the -mabi
switch. Note that you will need appropriate multilibs
for this option to work properly.
ELF configurations will always pass an ABI flag to
the assembler, except when the MIPS EABI is selected.
-mabi=64 no longer selects MIPS IV code.
The -mcpu option, which was deprecated
in 3.1 and 3.2, has been removed from this release.
-march now changes the core ISA level.
In previous releases, it would change the use of
processor-specific extensions, but would leave the core
ISA unchanged. For example, mips64-elf
-march=r8000 will now generate MIPS IV code.
Under most configurations, -mipsN now acts as a
synonym for -march.
There are some new preprocessor macros to describe the
-march and -mtune settings.
See the documentation of those options for details.
Support for the NEC VR-Series processors has been
added. This includes the 54xx, 5500, and 41xx series.
Support for the Sandcraft sr71k processor has been
added.
The following changes have been made to the S/390 port:
Support to build the Java runtime libraries has been added.
Java is now enabled by default on s390-*-linux*
and s390x-*-linux* targets.
Multilib support for the s390x-*-linux* target
has been added; this allows to build 31-bit binaries using
the -m31 option.
Support for thread local storage has been added.
Inline assembler code may now use the 'Q' constraint
to specify memory operands without index register.
Various platform-specific performance improvements
have been implemented; in particular, the compiler now
uses the BRANCH ON COUNT family of instructions
and makes more frequent use of the TEST UNDER MASK
family of instructions.
The following changes have been made to the PowerPC port:
Support for IBM Power4 processor added.
Support for Motorola e500 SPE added.
Support for AIX 5.2 added.
Function and Data sections now supported on AIX.
Sibcall optimizations added.
The support for H8 Tiny is added to the H8/300 port with
-mn.
Support for a number of older systems has been declared obsolete in
GCC 3.3. Unless there is activity to revive them, the next release of
GCC will have their sources permanently removed.
All configurations of the following processor architectures have
been declared obsolete:
Matsushita MN10200, mn10200-*-*
Motorola 88000, m88k-*-*
IBM ROMP, romp-*-*
Also, some individual systems have been obsoleted:
Alpha
Interix, alpha*-*-interix*
Linux libc1, alpha*-*-linux*libc1*
Linux ECOFF, alpha*-*-linux*ecoff*
ARM
Generic a.out, arm*-*-aout*
Conix, arm*-*-conix*
"Old ABI," arm*-*-oabi
StrongARM/COFF, strongarm-*-coff*
HPPA (PA-RISC)
Generic OSF, hppa1.0-*-osf*
Generic BSD, hppa1.0-*-bsd*
HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
HiUX, hppa*-*-hiux*
Mach Lites, hppa*-*-lites*
Intel 386 family
Windows NT 3.x, i?86-*-win32
MC68000 family
HP systems, m68000-hp-bsd*
and m68k-hp-bsd*
Sun systems, m68000-sun-sunos*,
m68k-sun-sunos*,
and m68k-sun-mach*
AT&T systems, m68000-att-sysv*
Atari systems, m68k-atari-sysv*
Motorola systems, m68k-motorola-sysv*
NCR systems, m68k-ncr-sysv*
Plexus systems, m68k-plexus-sysv*
Commodore systems, m68k-cbm-sysv*
Citicorp TTI, m68k-tti-*
Unos, m68k-crds-unos*
Concurrent RTU, m68k-ccur-rtu*
Linux a.out, m68k-*-linux*aout*
Linux libc1, m68k-*-linux*libc1*
pSOS, m68k-*-psos*
MIPS
Generic ECOFF, mips*-*-ecoff*
SINIX, mips-sni-sysv4
Orion RTEMS, mips64orion-*-rtems*
National Semiconductor 32000
OpenBSD, ns32k-*-openbsd*
POWER (aka RS/6000) and PowerPC
AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
Bull BOSX, rs6000-bull-bosx
Generic Mach, rs6000-*-mach*
Generic SysV, powerpc*-*-sysv*
Linux libc1, powerpc*-*-linux*libc1*
Sun SPARC
Generic a.out, sparc-*-aout*,
sparclet-*-aout*,
sparclite-*-aout*,
and sparc86x-*-aout*
NetBSD a.out, sparc-*-netbsd*aout*
Generic BSD, sparc-*-bsd*
ChorusOS, sparc-*-chorusos*
Linux a.out, sparc-*-linux*aout*
Linux libc1, sparc-*-linux*libc1*
LynxOS, sparc-*-lynxos*
Solaris on HAL hardware, sparc-hal-solaris2*
SunOS versions 3 and 4, sparc-*-sunos[34]*
NEC V850
RTEMS, v850-*-rtems*
VAX
VMS, vax-*-vms*
Documentation improvements
Other significant improvements
Almost all front-end dependencies in the compiler have been
separated out into a set of language hooks. This should make
adding a new front end clearer and easier.
One effect of removing the separate preprocessor is a small
increase in the robustness of the compiler in general, and the
maintainability of target descriptions. Previously
target-specific built-in macros and others, such as
__FAST_MATH__, had to be handled with so-called specs
that were hard to maintain. Often they would fail to behave
properly when conflicting options were supplied on the command
line, and define macros in the user's namespace even when strict
ISO compliance was requested. Integrating the preprocessor has
cleanly solved these issues.
The Makefile suite now supports redirection of
make install by means of the variable
DESTDIR.
GCC 3.3
Detailed release notes for the GCC 3.3 release follow.
This section lists the problem reports (PRs) from GCC's bug tracking
system that
are known to be fixed in the 3.3.1 release. This list might not be complete
(that is, it is possible that some PRs that have been fixed are not listed
here).
Bootstrap failures
11272 [Solaris] make bootstrap fails while building libstdc++
This section lists the problem reports (PRs) from GCC's bug tracker
that are known to be fixed in the 3.3.2 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed are
not listed here).
Bootstrap failures and problems
8336 [SCO5] bootstrap config still tries to use COFF options
9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with --enable-threads=posix
In addition to the bug fixes documented below, this release
contains few minor features such as:
Support for --with-sysroot
Support for automatic detection of executable stacks
Support for SSE3 instructions
Support for thread local storage debugging under GDB on S390
Bug Fixes
This section lists the problem reports (PRs) from GCC's bug tracker
that are known to be fixed in the 3.3.3 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed are
not listed here).
Bootstrap failures and issues
11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
12399 boehm-gc fails (when building a cross compiler): libtool unable to infer tagged configuration
Some of the bug fixes in this list were made to implement decisions
that the ISO C++ standards committee has made concerning several defect
reports (DRs). Links in the list below point to detailed discussion of
the relevant defect report.
2094 unimplemented: use of `ptrmem_cst' in template type unification
This is the list
of problem reports (PRs) from GCC's bug tracking system that are
known to be fixed in the 3.3.4 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed
are not listed here).
This is the list
of problem reports (PRs) from GCC's bug tracking system that are
known to be fixed in the 3.3.5 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed
are not listed here).
This is the list
of problem reports (PRs) from GCC's bug tracking system that are
known to be fixed in the 3.3.6 release. This list might not be
complete (that is, it is possible that some PRs that have been fixed
are not listed here).