Thread View: gnu.gcc.bug
1 messages
1 total messages
Started by Paul Eggert
Mon, 02 Nov 1992 21:29
<varargs.h> + <stdio.h> generates empty decl warning (GCC 2.3.1)
Author: Paul Eggert
Date: Mon, 02 Nov 1992 21:29
Date: Mon, 02 Nov 1992 21:29
370 lines
4533 bytes
4533 bytes
Given the program:
#include <varargs.h>
#include <stdio.h>
main() { return 0; }
GCC 2.3.1 (sparc, SunOS 4.1.2, with fixincludes run) outputs:
In file included from /reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdarg.h:32, from /reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdio.h:2, from T.c:2:
/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h:45: warning: useless keyword or type name in empty declaration
The problem is that va-sparc.h is included twice (once by <stdio.h>), but it
isn't designed for this. At the end of this message I'll enclose the
preprocessor output that pinpoints the problem.
Here is a patch for va-sparc.h. I think similar patches need to be applied to
the other va-* files.
Mon Nov 2 21:17:40 1992 Paul Eggert (eggert@twinsun.com)
* va-sparc.h (va_end): Protect against multiple inclusion.
===================================================================
RCS file: va-sparc.h,v
retrieving revision 2.3
retrieving revision 2.3.1.1
diff -c -r2.3 -r2.3.1.1
*** va-sparc.h 1992/09/25 05:47:08 2.3
--- va-sparc.h 1992/11/02 21:17:40 2.3.1.1
***************
*** 42,48 ****
--- 42,50 ----
(__builtin_saveregs (), (AP) = ((char *) &__builtin_va_alist))
#endif
+ #ifndef va_end
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
+ #endif
#define va_end(pvar)
#define __va_rounded_size(TYPE) \
===================================================================
Here the output of gcc -E on the test program shown above.
The problem is the `void ;' line.
# 1 "T.c"
# 1 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/varargs.h" 1 3
# 1 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h" 1 3
typedef char * __gnuc_va_list;
void va_end (__gnuc_va_list);
# 78 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h" 3
# 11 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/varargs.h" 2 3
# 102 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/varargs.h" 3
# 120 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/varargs.h" 3
typedef __gnuc_va_list va_list;
# 1 "T.c" 2
# 1 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdio.h" 1 3
# 1 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdarg.h" 1 3
# 1 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h" 1 3
# 18 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h" 3
void ;
# 78 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/va-sparc.h" 3
# 32 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdarg.h" 2 3
# 77 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdarg.h" 3
# 140 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdarg.h" 3
# 2 "/reb0.1/sun4c-4.1.2/lib/gcc-lib/sparc-sun/2.3.1/include/stdio.h" 2 3
extern struct _iobuf {
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
int _bufsiz;
short _flag;
char _file;
} _iob[];
extern struct _iobuf *fopen();
extern struct _iobuf *fdopen();
extern struct _iobuf *freopen();
extern struct _iobuf *popen();
extern struct _iobuf *tmpfile();
extern long ftell();
extern char *fgets();
extern char *gets();
extern char *sprintf();
extern char *ctermid();
extern char *cuserid();
extern char *tempnam();
extern char *tmpnam();
# 2 "T.c" 2
main() { return 0; }
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads