[Issue 21974] importC: Error: undefined identifier '__builtin_va_list'

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Sep 28 06:24:05 UTC 2021


https://issues.dlang.org/show_bug.cgi?id=21974

--- Comment #11 from Walter Bright <bugzilla at digitalmars.com> ---
The following code:

#include <stdarg.h>

#define  MAXARGS     31

int execl(const char *file, const char *args, ...)
{
    va_list ap;
    char *array[MAXARGS +1];
    int argno = 0;


    va_start(ap, args);
    while (args != 0 && argno < MAXARGS)
    {
        array[argno++] = args;
        args = va_arg(ap, const char *);
    }
    array[argno] = (char *) 0;
    va_end(ap);
    return execv(file, array);
}


when compiled with gcc -E test.c produces:

# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.c"
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h" 1 3 4
# 40 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 98 "/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 2 "test.c" 2



int execl(const char *file, const char *args, ...)
{
    va_list ap;
    char *array[31 +1];
    int argno = 0;


    __builtin_va_start(ap,args);
    while (args != 0 && argno < 31)
    {
        array[argno++] = args;
        args = __builtin_va_arg(ap,const char *);
    }
    array[argno] = (char *) 0;
    __builtin_va_end(ap);
    return execv(file, array);
}

--


More information about the Digitalmars-d-bugs mailing list