Module Name:    src
Committed By:   apb
Date:           Fri Oct 25 14:41:08 UTC 2013

Modified Files:
        src/share/man/man3: attribute.3

Log Message:
Try to make this more compiler-neutral, and give both GCC and LLVM/Clang
as examples.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/share/man/man3/attribute.3

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man3/attribute.3
diff -u src/share/man/man3/attribute.3:1.11 src/share/man/man3/attribute.3:1.12
--- src/share/man/man3/attribute.3:1.11	Sun Sep 18 17:43:20 2011
+++ src/share/man/man3/attribute.3	Fri Oct 25 14:41:08 2013
@@ -1,4 +1,4 @@
-.\" $NetBSD: attribute.3,v 1.11 2011/09/18 17:43:20 jym Exp $
+.\" $NetBSD: attribute.3,v 1.12 2013/10/25 14:41:08 apb Exp $
 .\"
 .\" Copyright (c) 2010 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,12 +27,12 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd December 19, 2010
+.Dd October 25, 2013
 .Dt ATTRIBUTE 3
 .Os
 .Sh NAME
 .Nm attribute
-.Nd non-standard GCC attribute extensions
+.Nd non-standard compiler attribute extensions
 .Sh SYNOPSIS
 .In sys/cdefs.h
 .Pp
@@ -61,30 +61,42 @@
 .Pp
 .Fn __predict_false "exp"
 .Sh DESCRIPTION
+As an extension to the C standard, some compilers allow non-standard
+attributes to be associated with functions, variables, or types, to
+modify some aspect of the way the compiler treats the associated item.
 The
 .Tn GNU
 Compiler Collection
-.Pq Tn GCC
-provides many extensions to the standard C language.
-Among these are the so-called attributes.
-In
+.Pq Tn GCC ,
+and
+.Tn LLVM/Clang ,
+use the
+.Em __attribute__
+syntax for such attributes,
+but different versions of the compilers support different attributes,
+and other compilers may use entirely different syntax.
+.Pp
 .Nx
-all attributes are provided in a restricted namespace.
-The described macros should be preferred instead of using the
-.Tn GCC's
+code should usually avoid direct use of the
 .Em __attribute__
-extension directly.
+or similar syntax provided by specific compilers.
+Instead,
+.Nx Ns 's
+.In sys/cdefs.h
+header file
+provides several attribute macros in a namespace
+reserved for the implementation (beginning with
+.Ql __ ) ,
+that expand to the appropriate syntax for the compiler that is in use.
 .Sh ATTRIBUTES
 .Bl -tag -width abc
 .It Ic __dead
-The
-.Xr gcc 1
-compiler knows that certain functions such as
+Certain functions, such as
 .Xr abort 3
 and
-.Xr exit 3
+.Xr exit 3 ,
 can never return any value.
-When such a function is equipped with
+When such a function is declared with
 .Ic __dead ,
 certain optimizations are possible.
 Obviously a
@@ -129,34 +141,29 @@ As with pure functions,
 certain micro-optimizations are possible for functions declared with
 .Ic __constfunc .
 .It Ic __noinline
-.Tn GCC
-is known for aggressive function inlining.
 Sometimes it is known that inlining is undesirable or that
 a function will perform incorrectly when inlined.
 The
 .Ic __noinline
 macro expands to a function attribute that prevents
-.Tn GCC
-for inlining the function, irrespective
-whether the function was declared with the
+the compiler from inlining the function, irrespective
+of whether the function was declared with the
 .Em inline
 keyword.
 The attribute takes precedence over all
 other compiler options related to inlining.
 .It Ic __unused
-In most
-.Tn GCC
-versions the common
-.Fl Wall
-flag enables warnings produced by functions that are defined but unused.
 Marking an unused function with the
 .Ic __unused
-macro inhibits these warnings.
+macro inhibits warnings that a function is defined but not used.
+Marking a variable with the
+.Ic __unused
+macro inhibits warnings that the variable is unused,
+or that it is set but never read.
 .It Ic __used
 The
 .Ic __used
-macro expands to an attribute that informs
-.Tn GCC
+macro expands to an attribute that informs the compiler
 that a static variable or function is to be always retained
 in the object file even if it is unreferenced.
 .It Ic __packed
@@ -300,6 +307,7 @@ and
 .Ic __predict_true .
 .El
 .Sh SEE ALSO
+.Xr clang 1 ,
 .Xr gcc 1 ,
 .Xr __builtin_object_size 3 ,
 .Xr cdefs 3 ,

Reply via email to