3 static void fn(const char *s,
4 struct declaration_specifiers *ds) {
5 struct declarator *decl;
8 decl->name = xstrdup(s);
9 NEW(decl->declarator_type);
10 decl->declarator_type->type = dt_old_function;
11 decl->declaration_specifiers = ds;
12 add_declaration(decl);
15 static void ptrfn(const char *s,
16 struct declaration_specifiers *ds) {
17 struct declarator *decl;
20 decl->name = xstrdup(s);
21 NEW(decl->declarator_type);
22 decl->declarator_type->type = dt_old_function;
23 NEW(decl->declarator_type->next);
24 decl->declarator_type->next->type = dt_pointer;
25 decl->declaration_specifiers = ds;
26 add_declaration(decl);
30 void gcc_extensions(void) {
31 struct declaration_specifiers *ds_void, *ds_int;
34 ds_void->type_specifiers = TS_VOID;
36 ds_void->type_specifiers = TS_INT;
38 fn("__builtin_stdarg_start", ds_void);
39 fn("__builtin_va_start", ds_void);
40 fn("__builtin_va_end", ds_void);
41 fn("__builtin_va_copy", ds_void);
42 ptrfn("__builtin_memcpy", ds_void);
43 ptrfn("__builtin_alloca", ds_void);
44 ptrfn("__builtin_next_arg", ds_void);
45 fn("__builtin_constant_p", ds_int);