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
);