diff --git a/tcc.c b/tcc.c index f223f68..97d4445 100644 --- a/tcc.c +++ b/tcc.c @@ -7599,6 +7599,24 @@ static void unary(void) vpushi(res); } break; + case TOK_builtin_frame_address: + { + CType type; + next(); + skip('('); + if (tok != TOK_CINT) { + error("__builtin_frame_address only takes integers"); + } + if (tokc.i != 0) { + error("TCC only supports __builtin_frame_address(0)"); + } + next(); + skip(')'); + type.t = VT_VOID; + mk_pointer(&type); + vset(&type, VT_LOCAL, 0); + } + break; case TOK_INC: case TOK_DEC: t = tok; diff --git a/tcctok.h b/tcctok.h index d717024..ef7bf7a 100644 --- a/tcctok.h +++ b/tcctok.h @@ -109,6 +109,7 @@ DEF(TOK_NORETURN2, "__noreturn__") DEF(TOK_builtin_types_compatible_p, "__builtin_types_compatible_p") DEF(TOK_builtin_constant_p, "__builtin_constant_p") + DEF(TOK_builtin_frame_address, "__builtin_frame_address") DEF(TOK_REGPARM1, "regparm") DEF(TOK_REGPARM2, "__regparm__")