From 476e0d374791edb600cf47fd062cbd99b418d192 Mon Sep 17 00:00:00 2001 From: Sandra Loosemore Date: Mon, 25 Feb 2019 21:33:26 -0500 Subject: [PATCH] re PR c/80409 (Document that va_arg(ap, void*) can be used to consume any pointer argument) 2019-02-25 Sandra Loosemore PR c/80409 gcc/ * doc/extend.texi (Variadic Pointer Args): New section. From-SVN: r269203 --- gcc/ChangeLog | 6 ++++++ gcc/doc/extend.texi | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b146480f84d..94505990bcc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-02-25 Sandra Loosemore + + PR c/80409 + + * doc/extend.texi (Variadic Pointer Args): New section. + 2019-02-25 Sandra Loosemore Martin Sebor diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index d9c78a3b0d8..696d892cfec 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -47,6 +47,7 @@ extensions, accepted by GCC in C90 mode and in C++. * Escaped Newlines:: Slightly looser rules for escaped newlines. * Subscripting:: Any array can be subscripted, even if not an lvalue. * Pointer Arith:: Arithmetic on @code{void}-pointers and function pointers. +* Variadic Pointer Args:: Pointer arguments to variadic functions. * Pointers to Arrays:: Pointers to arrays with qualifiers work as expected. * Initializers:: Non-constant initializers. * Compound Literals:: Compound literals give structures, unions @@ -1944,6 +1945,22 @@ and on function types, and returns 1. The option @option{-Wpointer-arith} requests a warning if these extensions are used. +@node Variadic Pointer Args +@section Pointer Arguments in Variadic Functions +@cindex pointer arguments in variadic functions +@cindex variadic functions, pointer arguments + +Standard C requires that pointer types used with @code{va_arg} in +functions with variable argument lists either must be compatible with +that of the actual argument, or that one type must be a pointer to +@code{void} and the other a pointer to a character type. GNU C +implements the POSIX XSI extension that additionally permits the use +of @code{va_arg} with a pointer type to receive arguments of any other +pointer type. + +In particular, in GNU C @samp{va_arg (ap, void *)} can safely be used +to consume an argument of any pointer type. + @node Pointers to Arrays @section Pointers to Arrays with Qualifiers Work as Expected @cindex pointers to arrays -- 2.30.2