[cfe-commits] r42857 - in /cfe/trunk: AST/ASTContext.cpp AST/Builtins.cpp Sema/SemaDecl.cpp include/clang/AST/ASTContext.h include/clang/AST/Builtins.def
Gabor Greif
gabor at mac.com
Fri Oct 12 03:04:05 PDT 2007
Hi Chris,
looks like the __builtin_va_alist is not a typedef,
but a variable/stack slot.
It arises from expanding
va_start on solaris.
Here is the original function:
void check_empty_format_string(char* buf)
{
va_list ap;
va_start(ap,buf);
vprintf("",ap); // expected-warning {{format string is empty}}
sprintf(buf,""); // expected-warning {{format string is empty}}
}
And its expansion (clang -E):
void check_empty_format_string(char* buf)
{
va_list ap;
(void) (ap = (__va_list) &__builtin_va_alist);
vprintf("",ap);
sprintf(buf,"");
}
Here is the portion from /usr/include/iso/stdarg_iso.h
relevant for SPARC:
55 /*
56 * Many compilation systems depend upon the use of special functions
57 * built into the the compilation system to handle variable argument
58 * lists and stack allocations. The method to obtain this in SunOS
59 * is to define the feature test macro "__BUILTIN_VA_ARG_INCR" which
60 * enables the following special built-in functions:
61 * __builtin_alloca
62 * __builtin_va_alist
63 * __builtin_va_arg_incr
64 * It is intended that the compilation system define this feature test
65 * macro, not the user of the system.
66 *
67 * The tests on the processor type are to provide a transitional period
68 * for existing compilation systems, and may be removed in a future
69 * release.
70 */
71 #if (defined(__BUILTIN_VA_ARG_INCR) || defined(__sparc) || \
72 defined(__i386)) && !defined(__lint)
73
74 /*
75 * Instruction set architectures which use a simple pointer to the
76 * argument save area share a common implementation.
77 */
78 #define va_start(list, name) (void) (list = (__va_list) &__builtin_va_alist)
79 #define va_arg(list, mode) ((mode *)__builtin_va_arg_incr((mode *)list))[0]
80
81 #elif defined(__ia64)
I hope this info is sufficient to get started :-)
Cheers,
Gabor
More information about the cfe-commits
mailing list