Commit Graph

32 Commits

Author SHA1 Message Date
pfg
9c8bbe6849 gcc: Add support for Apple's Block extension
Block objects [1] are a C-level syntactic and runtime feature. They
are similar to standard C functions, but in addition to executable
code they may also contain variable bindings to automatic (stack)
or managed (heap) memory. A block can therefore maintain a set of
state (data) that it can use to impact behavior when executed.

This port is based on Apple's GCC 5646 with some bugfixes from
Apple GCC 5666.3. It has some small differences with the support
in clang, which remains the recommended compiler.

Perhaps the most notable difference is that in GCC that __block
is not actually a keyword, but a macro. There will be workaround
for this issue in a near future. Other issues can be consulted in
the clang documentation [2]

For better compatiblity with Apple's GCC and llvm-gcc some related
fixes and features from Apple have been included. Support for the
non-standard nested functions in GCC is now off by default.

No effort was made to update the ObjC support since FreeBSD doesn't
carry ObjC in the base system, but some of the code crept in and
was more difficult to remove than to adjust.

Reference:
[1]
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html
[2]
http://clang.llvm.org/compatibility.html#block-variable-initialization

Obtained from:	Apple GCC 4.2
MFC after:	3 weeks
2014-01-05 00:43:28 +00:00
pfg
6053c493e0 Revert r260073; small diff reduction wrt gcc43 and Apple GCC.
Unfortunately this causes ICE on powerpc and sparc64.

Reducing these differences against upstream is not important
anymore so hopefully I have finished breaking the compiler
occasionally.
2014-01-02 13:53:53 +00:00
pfg
7f6132b57e gcc: small diff reduction wrt gcc43 and Apple GCC.
Obtained from:	gcc 4.3 (rev. 121464, 122528, 124106; GPLv2)
MFC after:	3 weeks
2013-12-30 02:52:43 +00:00
pfg
c5923c0498 gcc: Add support for label attributes and "unavailable" attribute.
Apple GCC has extensions to support for both label attributes and
an "unavailable" attribute. These are critical for objc but are
also useful in regular C/C++.

Apparently at least the label attributes might have found their way to
upstream GCC but the code doesn't seem available on the GPLv2 tree so
we are taking the code directly from Apple. To make this clearer we
are preserving the annoying "APPLE LOCAL" tags and the ChangeLogs
when they are available.

Obtained from:	Apple GCC 4.2 - 5531
MFC after:	3 weeks
2013-12-28 20:30:31 +00:00
pfg
412075b231 gcc: upstream alignment cleanups.
This solves GCC/32617 and contributes to reduce differences with
Apple's gcc42.

Complete some references in the ChangeLog while here.

Obtained from:	gcc 4.3 (rev. 126529, 126588; GPLv2)
MFC after:	3 weeks
2013-11-29 18:46:02 +00:00
dim
5a38866f59 Apply backported fix for gcc PR 20218. This makes __attribute__
((visibility ("hidden"))) work properly, and fixes building devel/glib20
with newer binutils.

Silence from:	current@
2010-11-25 20:29:14 +00:00
kan
cadd557b2c FreeBSD uses unchanged versions of this files. 2007-05-19 02:12:21 +00:00
kan
d2e7ac2a73 Resolve conflicts after GCC 3.4.6 20060825 import. 2006-08-26 21:37:21 +00:00
kan
17d0aa6eb2 Merge conflicts for GCC 3.4.4. 2005-06-03 04:02:20 +00:00
kan
f245def18e Merge FreeBSD modifications into gcc 3.4.2-prelelease:
1.2  -fformat-extensions.

Remove r1.7 (FORCE_OPTIMIZATION_DOWNGRADE knob for Alpha) as obsolete.
Move r1.14 (-O0 -O1 optimize alignment for time, not size) to opts.c.
2004-07-28 04:20:36 +00:00
kan
aba667dc74 Merge revs 1.2 (-fformat-extensions), 1.7 (FORCE_OPTIMIZATION_DOWNGRADE knob),
1.14 (-O/-O1 optimize alignment for time, not size).

Back out r1.22 which used to enable warnings in system headers by
default.
2003-11-07 03:27:32 +00:00
kan
5f7c06e920 Enable warn_system_heders by default. 2003-08-22 03:31:54 +00:00
kan
da88d76cbe Merge FreeBSD modifications into gcc 3.3.1-release:
1.2  -fformat-extensions.
  1.7  FORCE_OPTIMIZATION_DOWNGRADE knob for Alpha.
  1.14 -O0 -O1 optimize alignment for time, not size.
2003-08-22 03:13:20 +00:00
kan
3af246c7f2 Merge FreeBSD modifications into gcc 3.3.1-prerelease:
1.2  -fformat-extensions.
  1.7  FORCE_OPTIMIZATION_DOWNGRADE knob for Alpha.
  1.14 -O0 -O1 optimize alignment for time, not size.
2003-07-11 04:48:05 +00:00
obrien
8f4ce55b2c Merge revs 1.2 (-fformat-extensions), 1.7 (FORCE_OPTIMIZATION_DOWNGRADE knob),
1.14 (-O/-O1 optimize alignment for time, not size) into Gcc 3.2.1 release.
2002-12-04 15:59:56 +00:00
kan
0d0c2e1127 Merge FreeBSD modifications into gcc 3.2.1-prerelease:
1.2  -fformat-extensions
  1.7  FORCE_OPTIMIZATION_DOWNGRADE knob for Alpha
  1.14 -O0 -O1 should optimize alignment for time, not size

Approved by:	obrien
2002-10-10 04:51:11 +00:00
obrien
4a0f4fc5b5 Turn off the "-O2 flag TRIGGERS KNOWN OPTIMIZER BUGS" warning.
From current testsuite results, the optimizer bugs don't appear to exist
anymore.  RTH@cygnus.com did a lot of work on the Alpha ELF code generator
for GCC 3.2[.0].  A recent FreeBSD/AXP GCC bootstrap is at
http://gcc.gnu.org/ml/gcc-testresults/2002-09/msg00604.html
In this bootstraps, all gcc libraries are built with -O2 and c-torture
gives -O2 a real workout.  None of the remaining failures have anything
to do with -O2 optimizer bugs.

Submitted by:	Loren James Rittle <rittle@latour.rsch.comm.mot.com>
2002-09-22 07:26:38 +00:00
kan
d1eeee6125 Merge FreeBSD modifications into gcc 3.2.1-prerelease:
1.2  -fformat-extensions
  1.7  optimization downgrade
  1.14 -O0 -O1 should optimize alignment for time, not size

Approved by:	obrien
2002-09-01 21:06:42 +00:00
obrien
a0b51ec56f cc -O0 and -O1 didn't do the easy optimization of alignment for space.
Instead it attempted to do the easy optimization of alignment for time,
which should be to 1-byte alignment on i386's.

Submitted by:	bde
2002-06-21 18:21:30 +00:00
obrien
65e2ec7693 Merge rev 1.2 (-fformat-extensions) and rev 1.7 (optimization downgrade)
into the Gcc 3.1 prerelease.
2002-05-09 22:15:04 +00:00
obrien
7d7df915b2 Merge rev 1.2 (-fformat-extensions) and rev 1.7 (optimization downgrade)
into GCC 3.1-snap.
2002-02-06 04:59:39 +00:00
obrien
cd3f3aab8e Add the `WANT_FORCE_OPTIMIZATION_DOWNGRADE' knob. If set to an integer
value, it forces GCC to not optimize above this level.  For intance, GCC
made with "WANT_FORCE_OPTIMIZATION_DOWNGRADE=1" is a good setting for the
Alpha platform when building ports.
2001-08-16 06:05:18 +00:00
obrien
c6dcd6a7fe Merge rev 1.2 (-fformat-extensions); 1.{7,9} (complain about -O2 on the
Alpha & FORCE_OPTIMIZATION_DOWNGRADE); 1.8 (-Wnon-const-format)
into GCC 2.95.3(RC#3).
2001-02-17 09:06:31 +00:00
obrien
784d223de9 Merge rev 1.2 (-fformat-extensions); 1.{7,9} (complain about -O2 on the
Alpha & FORCE_OPTIMIZATION_DOWNGRADE); 1.8 (-Wnon-const-format)
into GCC 2.95.3(RC#1).
2001-01-03 18:05:31 +00:00
obrien
6b16a0fe37 Comment an endif. 2000-12-01 10:20:17 +00:00
obrien
2d22f9eac0 Yell about -O2 on the Alpha. Forceably downgrade -O2+ if
"FORCE_OPTIMIZATION_DOWNGRADE" is defined when GCC is built.
2000-03-26 12:56:54 +00:00
obrien
8797ccaa10 Merge in fixes from the GCC anoncvs tree. 2000-01-22 16:05:33 +00:00
obrien
68ba60f301 This adds rev 1.2 (-fformat-extensions) to GCC 2.95.2. 1999-11-01 19:51:19 +00:00
obrien
1292393efe This adds rev 1.2 (-fformat-extensions) to GCC 2.95.1. 1999-10-27 09:31:52 +00:00
obrien
308b546022 Fix conflicts.
This adds rev 1.2 (-fformat-extensions) to EGCS 1.1.2.
1999-08-30 04:01:02 +00:00
bde
f0825df278 Support printf format checking of FreeBSD kernel formats %[Dbrz].
This is enabled by the undocumented option -fformat-extensions.
This option should be named better and/or give more control over
the extensions.

Fixed a message - don't warn about the field width when it's the
precision that has the wrong type.  Didn't fix excessive checking
for the precision relative to the type - ANSI requires both to be
ints, but gcc permits the field width to be either int or unsigned
int.
1998-08-24 06:33:52 +00:00
peter
d4691e641b Import of unmodified (but trimmed) gcc-2.7.2. The bigger parts of the
non-i386, non-unix, and generatable files have been trimmed, but can easily
be added in later if needed.

gcc-2.7.2.1 will follow shortly, it's a very small delta to this and it's
handy to have both available for reference for such little cost.

The freebsd-specific changes will then be committed, and once the dust has
settled, the bmakefiles will be committed to use this code.
1996-09-18 05:35:50 +00:00