From 480e518baafe5100f6331fa10cb2e4aaa29b4b08 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 24 Dec 2008 02:38:38 +0000 Subject: [PATCH] - implemented __builtin_trap() [r24883] --- ast2firm.c | 8 +++++++- parser.c | 10 ++++++++-- tokens.inc | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ast2firm.c b/ast2firm.c index 287c078..555a717 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1676,11 +1676,17 @@ static ir_node *process_builtin_call(const call_expression_t *call) in[1] = new_Const_long(mode_int, 0); in[2] = new_Const_long(mode_int, 3); } - ir_type *tp = get_ir_type((type_t*) function_type); + ir_type *tp = get_ir_type(function_type); ir_node *irn = new_d_Builtin(dbgi, get_store(), ir_bk_prefetch, 3, in, tp); set_store(new_Proj(irn, mode_M, pn_Builtin_M)); return NULL; } + case T___builtin_trap: { + ir_type *tp = get_ir_type(function_type); + ir_node *irn = new_d_Builtin(dbgi, get_store(), ir_bk_prefetch, 0, NULL, tp); + set_store(new_Proj(irn, mode_M, pn_Builtin_M)); + return NULL; + } default: panic("unsupported builtin found"); } diff --git a/parser.c b/parser.c index 964e69f..32055db 100644 --- a/parser.c +++ b/parser.c @@ -6973,6 +6973,11 @@ static type_t *get_builtin_symbol_type(symbol_t *symbol) return make_function_1_type(type_int, type_unsigned_int); case T___builtin_prefetch: return make_function_1_type_variadic(type_float, type_void_ptr); + case T___builtin_trap: { + type_t *type = make_function_0_type(type_void); + type->function.base.modifiers |= DM_NORETURN; + return type; + } default: internal_errorf(HERE, "not implemented builtin identifier found"); } @@ -7845,7 +7850,8 @@ static expression_t *parse_primary_expression(void) case T___builtin_ctz: case T___builtin_popcount: case T___builtin_parity: - case T___builtin_prefetch: return parse_builtin_symbol(); + case T___builtin_prefetch: + case T___builtin_trap: return parse_builtin_symbol(); case T___builtin_isgreater: case T___builtin_isgreaterequal: case T___builtin_isless: @@ -8155,7 +8161,7 @@ static void handle_builtin_argument_restrictions(call_expression_t *call) { break; } case T___builtin_prefetch: { - /* second and third argument must be constant if existant */ + /* second and third argument must be constant if existent */ call_argument_t *rw = call->arguments->next; call_argument_t *locality = NULL; diff --git a/tokens.inc b/tokens.inc index 2e39abf..607e3e2 100644 --- a/tokens.inc +++ b/tokens.inc @@ -116,6 +116,7 @@ S(_ALL, __builtin_clz) S(_ALL, __builtin_ctz) S(_ALL, __builtin_popcount) S(_ALL, __builtin_parity) +S(_ALL, __builtin_trap) S(_ALL, __builtin_types_compatible_p) S(_ALL, __PRETTY_FUNCTION__) S(_ALL, __FUNCTION__) -- 2.20.1